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

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

方案一  简单负载均衡方案

问题:

rabbitmq可以为Consumers做负载均衡,但rabbimq自身并没有负载均衡。用户连接到rabbitmq集群的任意节点都可以访问集群中的任意消息队列,但一个消息队列只存储在一个物理节点上,其它节点只存储该队列的元数据,这使得当队列里只有一个队列时,系统性能受限于单个节点的网络带宽和主机性能。若使用多个队列来提升性能,也会有新的问题,即如何在队列之间做负载均衡,同时网络连接也会影响系统性能,比如当一个用户往某个消息队列发消息时,而该用户当前连接的节点不是该队列真实所在的物理节点,这必然会产生rabbitmq节点间通讯,从而消耗的一部分网络带宽。

方案:

为了解决以上问题,有以下方案(发送端做负载均衡,随机发送集群中任意节点),

1.建立多个消息队列,每个物理节点上消息队列数相同。

2.exchange的类型设置为direct,建立多个binding,每个队列对应一个key。

3.每个publisher建立到每个物理节点的连接。

4.每个worker订阅所有消息队列,。

5.发送消息时随机选择一个key,并使用该key对应的队列所有在节点的连接发送该消息。

6.当某个mq节点挂掉后,发送者将消息随机发送到其余节点,并一直监控该挂掉的节点是否重起,重启后,即可向该节点发消息。

示意图如下

测试:

1.测试环境

硬件环境:

发送者(my031090, rds064071,rds064072)

rabbit节点(rds064073, rds064075,rds064074)

接收者(rds064076,rds064077,my031091)

软件环境:

内核2.6.32-220.el6.x86_64

rabbitmq: 2.8.1

erlang:R16B

rabbit-client: rabbit-erlang-client

网络环境:

≈117MB/s

 

2.测试结果

(1)包大小:1byte

集群整体每秒传输包个数:

每个连接传输速率

各队列数据包收发速率:

(2)包大小:256k

集群整体每秒传输包个数:

各连接传输速率:

队列收发速率:

3.结论

从上述测试结果可以看出,该方案基本实习了Rabbitmq的负载均衡,在数据包大小为256k时网络吞吐量(250MB/s)也比较理想。

以下文章点击率最高

Loading…

发表评论