消息中间件详解
文章目錄
- 概述
- 使用場景
- 消息中間件
- 協議
- 消息分發策略機制
- 實現方式
- 高可用機制
- 集群模式1 - Master - Slave 主從共享部署
- 集群模式2 - Master - Slave 主從同步部署
- 集群模式3 - 多主集群同步部署
- 集群模式4 - 多主集群轉發部署
- 集群模式5 - Master - Slave 與 Breoker - Cluster 組合
概述
消息中間件是基于隊列與消息傳遞技術,在網絡環境中為應用系統提供同步或異步、可靠的消息傳輸的支撐性軟件系統。
那 MQ 解決了什么問題?
對于電商app來說,顧客下單后要扣減商品庫存,還要更新訂單狀態等一系列操作。當并發量大的時候,服務器磁盤、IO、CPU load 會很高,因此有的時候需要一個相對較長的時間間隔才能完成上述的一系列操作。如果用戶提交完訂單,讓用戶等待幾秒才能成功,對于用戶來說,會很不耐煩,甚至會流失大量用戶。
如果有了 MQ ,可以讓系統間的通信變為異步通信,系統A 發個消息到 MQ,系統 B什么時候獲取消息進行處理,系統A不用管,系統A向MQ發送完消息只需要給用戶及時反饋即可,剩下的操作系統B可能會在未來的幾秒、幾分鐘甚至幾小時后才進行處理。
使用場景
- 跨系統數據傳遞
- 高并發流量削峰
- 數據分發和異步處理
- 大數據分析與傳遞
- 分布式事務
消息中間件
協議
AMQP(Advanced Message Queuing Protocol) 是高級消息隊列協議,是一個提供統一消息服務的應用層標準高級消息隊列協議,是應用協議的一個開放標準,為面向消息的中間件設計。基于此協議的客戶端與中間件可傳遞消息,并不受客戶端/中間件不同產品,不同的開發語言等條件的限制。
常見的消息中間件協議有:OpenWire、AMQP、MQTT、Kafka、OpenMessage
大部分消息中間件采用的是 AMQP 協議,那為什么不用 http 協議?
實際上,AMQP是基于以上原因在 TCP/IP 協議基礎上設計的協議。
AMQP特性:
- 分布式事務支持
- 消息的持久化支持
- 高性能和高可靠的消息處理優勢
消息分發策略機制
| 發布訂閱 | 支持 | 支持 | 支持 | 支持 |
| 輪詢分發 | 支持 | 支持 | 支持 | / |
| 公平分發 | / | 支持 | 支持 | / |
| 重發 | 支持 | 支持 | / | 支持 |
| 消息拉取 | / | 支持 | 支持 | 支持 |
實現方式
| 單機吞吐量 | 萬級 | 萬級 | 10萬級,高吞吐 | 10萬級,高吞吐 |
| 時效性 | ms級 | 微秒級,延遲低 | ms級 | ms級以內 |
| 可用性 | 高,基于主從架構 | 高,基于主從架構 | 非常高,分布式架構 | 非常高,分布式架構 |
| 可靠性 | 較低的概率數據丟失 | 基本不丟失 | 經過參數優化配置,可以做到0丟失 | 經過參數優化配置,可以做到0丟失 |
| 功能支持 | 功能完備 | 并發能力強,性能好,延遲低 | 功能完善,擴展性好 | 支持簡單MQ功能,大數據領域被大規模使用 |
高可用機制
是指產品在規定的條件和規定的時間內處于可執行規定功能狀態的能力。當業務量增加時,請求也過大,一臺消息中間件服務器會觸及硬件的極限,一臺消息服務器已經無法滿足業務的需求,所以消息中間件必須支持集群部署,來達到高可用的目的。
集群模式1 - Master - Slave 主從共享部署
生產者將消息寫入到 master 節點,slave 節點連接 master 隊列共享一個數據區域。一旦 master 掛掉,生產者就無法將消息發送到隊列。
集群模式2 - Master - Slave 主從同步部署
生產者將消息寫入到 master 節點,master 會同步數據到 slave 形成副本,如果有多個消費者就可以去不同的節點進行消費。但是消息的拷貝和同步會占用很大的帶寬和網絡資源。
集群模式3 - 多主集群同步部署
生產者將消息寫入到master和slave所有節點,消費者也可以從任意節點消費消息。
集群模式4 - 多主集群轉發部署
生產者可以向任意節點寫入消息,如果向 broker1 中寫入消息,broker1 中會存儲數據的相關描述和記錄存放的位置,也就是元數據信息。broker1 會向其他的 broker 同步元數據信息。消費者也可以從任意節點消費消息,如果從 broker2 中消費消息,broker2 自己沒有對應的信息,可以從對應的元數據信息中查詢,返回對應的元消息信息。
集群模式5 - Master - Slave 與 Breoker - Cluster 組合
實現多主多從的熱備機制保證消息的高可用。
總結
- 上一篇: 计算机服务启动按钮显示灰色,win10系
- 下一篇: arduino教程-08.超声波的应用