我将使用 rabbitMQ 作为消息代理并将大多数脚本切换为将数据发送到队列而不是执行直接写入/读取。消费者将获取这些消息并执行相应的操作。在我的梦想中,这会给我更多的灵活性来选择数据库引擎、应用程序级别的分片等等。但一般来说这是个好主意吗?还是我错过了什么?当前的写入负载为 mysql 的约 15k 插入/删除和 redis 实例的 30-50k 集。读取负载是相同的 ~15-20k 选择,50-70k 用于 redis。
问问题
160 次
2 回答
0
您将面临的最大问题是您的数据库写入将被异步处理。如果客户端将数据写入数据库,然后立即将其读回,则该值可能不是它最初插入的值,因为 Rabbit 队列可能非常繁忙或缓慢,从而延迟了更新操作。或者管理员可能不小心清除了您的队列,然后您将让所有这些客户认为他们的事务已提交,但没有任何内容被存储。
这听起来像是过早优化的经典案例。这是寻找问题的解决方案,您可能应该避免这样做。
于 2012-09-28T05:26:40.297 回答
0
使用 amqp,您可以使用 RPC 方式运行非异步操作,使用这种架构,您应该找出与异步操作相关的所有问题。
于 2012-09-28T08:52:02.450 回答