知识卡片

镜像队列为何不做读写分离

专业/工作 · 594.d

内容

镜像队列有一个master和若干slave,除了发布消息会同时发给master和所有slave外,其余所有操作(包括消费)实际上都由master处理——即使客户端连接的是slave,Basic.Get这类请求也会先转发给master,由master准备好数据再经slave投递给客户端。RabbitMQ完全有能力像MySQL那样做读写分离,但没有这么做,因为队列在集群中的负载均衡是靠master角色均匀分散在各个物理节点上实现的,读写分离并不能带来更多收益,却会显著增加实现复杂度和出错概率。发散:这提醒我们,”能做”和”值得做”是两回事——一个架构手段是否该被引入,取决于它带来的边际收益能否覆盖引入的复杂度成本,而不是它在技术上是否可行。

参考来源

《RabbitMQ实战指南》第9章《RabbitMQ高阶》