兩種簡單Rabbitmq使用方案及其測試-002

方案二  高可用方案

問題:

Rabbitmq現提供隊列mirror功能,通過這一功能可以提高Rabbitmq的可靠性,當某個Rabbitmq節點故障時,只要其它節點裏存在該故障節點的隊列鏡像,該隊列就能繼續正常工作不會丟失數據。但使用該功能也會有些副作用,它這種通過冗餘數據保障可靠性的方式會降低系統的性能,因為往一個隊列發數據也就會往這個隊列的所有鏡像隊列發數據,這必然產生大量Rabbitmq節點間數據的交互,降低吞吐率,鏡像越多性能必然下降越多。與此同時,為充分利用集群的的資源,需要創建多個隊列,若在所有節點上都有每個隊列的鏡像來實現可靠性,則隊列鏡像數會太多,過多的RabbitMq集群內部網絡通訊會吃掉大量網絡帶寬。

方案:

為解決上述問題,我們實現一個允許掛一個節點的方案,該方案在方案一的基礎上加上以下2條:

  1. 每個隊列只有一個鏡像,鏡像的位置為「下一個節點」,節點的分佈如下圖

  1. 消費者端監控所有鏈接,當發現某個節點掛掉時,自動連接到鏡像節點,而當故障節點恢復時自動連接回來。

測試:

測試環境:與測試一相同

測試結果:

  • 包大小1byte

集群每秒處理包數:

各連接傳輸速率:

各隊列數據包收發速率:

  • 包大小(256K

集群每秒處理包數:

各連接傳輸速率:

各隊列數據包收發速率:

結論:

與方案一的測試結果做比較可以看出,開啟mirror後吞吐量大大降低,只有不到原來的1/4.

以下文章點擊率最高

Loading…

     

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