两种简单Rabbitmq使用方案及其测试-002

方案二  高可用方案

问题:

Rabbitmq现提供队列mirror功能,通过这一功能可以提高Rabbitmq的可靠性,当某个Rabbitmq节点故障时,只要其它节点里存在该故障节点的队列镜像,该队列就能继续正常工作不会丢失数据。但使用该功能也会有些副作用,它这种通过冗余数据保障可靠性的方式会降低系统的性能,因为往一个队列发数据也就会往这个队列的所有镜像队列发数据,这必然产生大量Rabbitmq节点间数据的交互,降低吞吐率,镜像越多性能必然下降越多。与此同时,为充分利用集群的的资源,需要创建多个队列,若在所有节点上都有每个队列的镜像来实现可靠性,则队列镜像数会太多,过多的RabbitMq集群内部网络通讯会吃掉大量网络带宽。

方案:

为解决上述问题,我们实现一个允许挂一个节点的方案,该方案在方案一的基础上加上以下2条:

  1. 每个队列只有一个镜像,镜像的位置为“下一个节点”,节点的分布如下图

  1. 消费者端监控所有链接,当发现某个节点挂掉时,自动连接到镜像节点,而当故障节点恢复时自动连接回来。

测试:

测试环境:与测试一相同

测试结果:

  • 包大小1byte

集群每秒处理包数:

各连接传输速率:

各队列数据包收发速率:

  • 包大小(256K

集群每秒处理包数:

各连接传输速率:

各队列数据包收发速率:

结论:

与方案一的测试结果做比较可以看出,开启mirror后吞吐量大大降低,只有不到原来的1/4.

以下文章点击率最高

Loading…

发表评论