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

     

如果這文章對你有幫助,請掃左上角微信支付-支付寶,給於打賞,以助博客運營