兩種簡單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…