方案二 高可用方案
问题:
Rabbitmq现提供队列mirror功能,通过这一功能可以提高Rabbitmq的可靠性,当某个Rabbitmq节点故障时,只要其它节点里存在该故障节点的队列镜像,该队列就能继续正常工作不会丢失数据。但使用该功能也会有些副作用,它这种通过冗余数据保障可靠性的方式会降低系统的性能,因为往一个队列发数据也就会往这个队列的所有镜像队列发数据,这必然产生大量Rabbitmq节点间数据的交互,降低吞吐率,镜像越多性能必然下降越多。与此同时,为充分利用集群的的资源,需要创建多个队列,若在所有节点上都有每个队列的镜像来实现可靠性,则队列镜像数会太多,过多的RabbitMq集群内部网络通讯会吃掉大量网络带宽。
方案:
为解决上述问题,我们实现一个允许挂一个节点的方案,该方案在方案一的基础上加上以下2条:
- 每个队列只有一个镜像,镜像的位置为“下一个节点”,节点的分布如下图
- 消费者端监控所有链接,当发现某个节点挂掉时,自动连接到镜像节点,而当故障节点恢复时自动连接回来。
测试:
测试环境:与测试一相同
测试结果:
- 包大小1byte:
集群每秒处理包数:
各连接传输速率:
各队列数据包收发速率:
- 包大小(256K)
集群每秒处理包数:
各连接传输速率:
各队列数据包收发速率:
结论:
与方案一的测试结果做比较可以看出,开启mirror后吞吐量大大降低,只有不到原来的1/4.
以下文章点击率最高
Loading…