文章目錄
- 前言
- 如何保證訊息佇列是高可用的?
- 1 RabbitMQ實作高可用
- 1.1 普通集群(無高可用性,可提高吞吐量)
- 1.2 鏡像集群(高可用,但不能提高吞吐量)
- 2 RocketMQ實作高可用
- 2.1 多個master集群多Master模式
- 2.2. 多Master多Slave異步模式(一般生產環境使用)
- 2.3. 多Master多Slave同步模式(對資料可靠性要求高時使用)
前言
這是一個MQ的系列文章,主要由MQ的基礎認識到深入了解,和針對不同業務對MQ的技術選型問題,通過文章了解不同MQ的各種區別,和使用MQ會存在的一些問題,
入門篇:MQ(訊息佇列)系列學習—MQ基礎認識
基礎篇:MQ(訊息佇列)系列學習—MQ組件優劣勢比較
晉級篇:MQ(訊息佇列)系列學習—MQ如何保證訊息佇列高可用
在我們選擇了一個技術框架后,我們不光要掌握它的日常使用,也要了解因為這個選型而出現的問題,并未這些問題做好相應的方法備案,而這些知識都是使用該組件會碰見的問題,也是面試必備的問題,
如何保證訊息佇列是高可用的?
在系統中引入了會導致系統的復雜程度增加,如果系統的中間件掛掉后會導致系統中有依賴的內容崩潰,那么保證系統的高可用性就是必不可少的,
在生產中,訊息佇列一般都是使用使用集群來實作高可用,但對于不同的MQ的會有不同的集群模式,如RabbitMQ的集群模式為單機模式,普通集群模式,鏡像集群模式、RocketMQ的集群方式為多個master集群、多Master多Slave模式-異步復制、多Master多Slave模式-同步雙寫,
1 RabbitMQ實作高可用
1.1 普通集群(無高可用性,可提高吞吐量)
多臺MQ上啟動多個RabbitMQ的實體,你使用的queue只會在某一個RabbitMQ的實體上,但是每個實體都會去同步queue的元資料(就是一些配置資訊,通過元資料就可以找到queue所對應的實體),如果你消費的時候,如果連接了其他實體(其他實體中并沒有queue需要的資料),那么當前實體就通過元資料,找到對應的實體中的queue然后進行拉取資料,
優點:
提高了吞吐量
缺點:
不能保證高可用性,當 放queue的實體掛掉后,就會造成資料丟失,

1.2 鏡像集群(高可用,但不能提高吞吐量)
該模式與普通模式的區別為:不光會進行同步元資料也會同步queue資料,每個MQ實體中的queue資料都是相同的,所以在隨意一臺的MQ宕機后,也能去其他MQ實體進行正常消費,
優點:
實作了高可用
缺點:
1.因為會將所有資料進行同步,如果一個queue過大,同步的性能消耗也會過高,
2.不能擴展,每臺實體資料一樣的,不能通過增加實體來解決

2 RocketMQ實作高可用
RocketMQ的集群方式為多個master集群、多Master多Slave模式-異步復制、多Master多Slave模式-同步雙寫,
RocketMq中由NameServer 集群、Broker 集群、Producer 集群和 Consumer 集群:
NameServer: 提供輕量級的服務發現和路由, 每個 NameServer 記錄完整的路由資訊,提供等效的讀寫服務,并支持快速存盤擴展,
Broker: 通過提供輕量級的 Topic 和 Queue 機制來處理訊息存盤,同時支持推(push)和拉(pull)模式以及主從結構的容錯機制,
Producer:生產者,產生訊息的實體,擁有相同 Producer Group 的 Producer 組成一個集群,
Consumer:消費者,接收訊息進行消費的實體,擁有相同 Consumer Group 的Consumer 組成一個集群,

簡單說明一下圖中箭頭含義,從 Broker 開始,Broker Master1 和 Broker Slave1 是主從結構,它們之間會進行資料同步,即 Date Sync,同時每個 Broker 與NameServer 集群中的所有節點建立長連接,定時注冊 Topic 資訊到所有 NameServer 中,
Producer 與 NameServer 集群中的其中一個節點(隨機選擇)建立長連接,定期從 NameServer 獲取 Topic 路由資訊,并向提供 Topic 服務的 Broker Master 建立長連接,且定時向 Broker 發送心跳,Producer 只能將訊息發送到 Broker master,但是 Consumer 則不一樣,它同時和提供 Topic 服務的 Master 和 Slave
建立長連接,既可以從 Broker Master 訂閱訊息,也可以從 Broker Slave 訂閱訊息,
2.1 多個master集群多Master模式
全是Master,無Slave,某個實體掛了,該實體在重啟前未被消費的訊息無法被消費
優點:配置簡單,性能最高
缺點:單臺機器重啟或宕機期間,該機器下未被消費的訊息在機器恢復前不可訂閱,影響訊息實時性
2.2. 多Master多Slave異步模式(一般生產環境使用)
每個Master配一個Slave,有多對Master-Slave,集群采用異步復制方式,主備有短暫訊息延遲,毫秒級
優點:性能同多Master幾乎一樣,實時性高,主備間切換對應用透明,不需人工干預
缺點:Master宕機或磁盤損壞時會有少量訊息丟失
2.3. 多Master多Slave同步模式(對資料可靠性要求高時使用)
每個Master配一個Slave,有多對Master-Slave,集群采用同步雙寫方式,主備都寫成功,才向應用回傳成功
優點:服務可用性與資料可用性非常高
缺點:性能比異步集群略低(大約低10%),當前版本主宕備不能自動切換為主
需要注意的是,在RocketMQ里面,1臺機器只能要么是Master,要么是Slave,這個在初始的機器配置里面,就定死了,
其中Master的broker id = 0,Slave的broker id > 0,有點類似于mysql的主從概念,Master掛了以后,Slave仍然可以提供讀服務,但是由于有多主的存在,當一個Master掛了以后,可以寫到其他的Master上,
Rocket轉載于:云原生實戰
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/232681.html
標籤:其他
