1 / 10
文档名称:

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

格式:docx   大小:1,494KB   页数:10页
下载后只包含 1 个 DOCX 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

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

上传人:1322891254 2017/2/24 文件大小:1.46 MB

下载得到文件列表

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

相关文档

文档介绍

文档介绍:两种简单 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 ) 软件环境: 内核 - rabbitmq: erlang:R16B rabbit-client: rabbit-erlang-client 网络环境: ≈ 117MB /s 2. 测试结果(1 )包大小: 1byte 集群整体每秒传输包个数: 每个连接传输速率各队列数据包收发速率: (2 )包大小: 256k 集群整体每秒传输包个数: 各连接传输速率: 队列收发速率: 3. 结论从上述测试结果可以看出,该方案基本实****了 Rabbitmq 的负载均衡,在数据包大小为 256k 时网络吞吐量( 250MB /s )也比较理想。方案二高可用方案问题: Rabbitmq 现提供队列 mirror 功能,通过这一功能可以提高 Rabbitmq 的可靠性,当某个 Rabbitm q 节点故障时,只要其它节点里存在该故障节点的队列镜像,该队列就能继续正常工作不会丢失数据。但使用该功能也会