像 RabbitMQ 这样的消息队列用于对 SQL 数据库进行大量写入?

Mic*_*ael 5 database scalability rabbitmq

该场景需要将大量数据(例如跟踪点击或鼠标移动)从 Web 应用程序写入 SQL 数据库。不需要立即写入数据,因为对数据的分析会在某些重复的基础上进行,例如每天或每周。

我想要一些关于我想到的解决方案的反馈:

单击和鼠标数据发布到消息队列。这将队列项存储在内存中,因此它应该比 SQL 更快。然后在其他一些服务器上,一个作业插入检索下一个队列项并将数据写入 SQL。

有谁知道这样的实现?我没有看到哪些陷阱?如果这个解决方案不是一个好的解决方案,还有其他选择吗?

问候

小智 0

为了解决一个非常相似的问题,我正在考虑这样做。最后我们决定不这样做,因为我们确实需要非常快速地访问数据。不过我仍然喜欢这个主意。

我最近还了解到,这正是 Microsofft Dynamics CRM 使用消息传递进行数据库更新的方式。

我认为你需要特别注意的事情。

  1. 确保如果您的 RabbitMQ 实例消失,不会对您的客户端产生任何影响。兔子死了已经够糟糕的了,你的客户因为兔子宕机而出错就更糟糕了。
  2. 如果它的容量确实非常大(而且无论如何它都是可靠性的良好实践),那么集群就值得考虑。
  3. 显然,必须注意死信队列。但是回放由于某种原因失败的消息的能力非常棒,理论上至少你的数据最终应该总是到达你的数据库。哪怕在一段时间内有所下滑。
  4. 确保您可以跟上传入的消息数量。当然,这应该可以通过向给定队列添加更多消费者来解决。这导致...
  5. 消息的幂等性。鉴于您的消息与数据库写入直接相关,它们必须是幂等的。