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

- 消費者端監控所有鏈接,當發現某個節點掛掉時,自動連接到鏡像節點,而當故障節點恢復時自動連接回來。
測試:
測試環境:與測試一相同
測試結果:
- 包大小1byte:
集群每秒處理包數:

各連接傳輸速率:

各隊列數據包收發速率:

- 包大小(256K)
集群每秒處理包數:

各連接傳輸速率:

各隊列數據包收發速率:

結論:
與方案一的測試結果做比較可以看出,開啟mirror後吞吐量大大降低,只有不到原來的1/4.
以下文章點擊率最高
Loading…