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