關於消息中間件,看完這篇介紹你會更懂

一、什麼是消息中間件

消息中間件是一套平臺,用於應用之間的數據通信。舉個例子:淘寶網的用戶註冊,在註冊的同時需要有一系列的操作,如下圖:

同時,伴隨着業務的擴展,後端流程還會增加。如果在註冊時要順序的完成每一步操作,整個流程會耗費很多的時間,從而使得用戶等待延遲增加。最容易想到的處理方法是將串行改爲並行處理,如下圖:

並行雖然能提速,但是由於各個流程之間有同步要求,如果某個流程耗時過長,就會導致整體的等待時間過長。考慮具體的業務,用戶註冊這個操作只和註冊是否成功有及時一致性要求,其他流程都允許有延遲,所以可以將用戶註冊分爲兩部分完成,分別是主流程和消息推送流程。主流程只負責用戶註冊,給出及時性響應,如下圖:

而消息推送流程,則是將用戶註冊消息提交給消息中間件,由消息中間件推送給各個需要該消息的業務流程,延遲處理,如下圖:

消息中間件的作用就是用於將某一消息推送給各個需要的業務流程,它相當於一個投遞員,當收到消息之後,傳遞給多個需要這條消息的第三方。

二、消息中間件的兩種模式

2.1生產者消費者模式:點對點(Queue),不可重複

生產者將消息放入隊列中, 多個消費者同時監聽隊列,誰先搶到消息就取走消息,每條消息最多隻能被一個消費者擁有。

2.2發佈者訂閱者模式:點對多點(Topic)

發佈者將消息發佈到隊列中,多個監聽隊列的消費者都會收到一份消息。每一份消息都會推送給它的所有訂閱者。

三、消息中間件的幾個特點

消息中間件有幾個特點,分別是

分佈式:消息中間件要求分佈式部署,滿足大規模數據併發能力,同時要求可擴展

可靠性:可靠,數據一致性要求高,要求避免數據丟失,提供持久化,落盤和落數據庫都可選

異步:借用消息中間件將消息處理從同步拆解爲異步,提高系統性能

松耦合:消息發佈者和訂閱者之間完全解耦,兩者互不知道對方的存在,藉助於中間件實現松耦合

事件驅動:通過消息隊列,將事件拆分爲若干個消息,同時能追溯整個變化過程

四、消息處理過程

4.1消息生產者將消息發送到消息中間件

消息中間件提供數據接收接口,可以使用TCP和Http兩種協議方式,一般內網長連接使用TCP,保障速度和效率。公網使用Http,用於跨防火牆

4.2消息中間件接收消息,並將消息轉發給訂閱者隊列

由於消息中間件穩定性要求,消息接收後一般要做持久化,一般是落盤,也可以選擇落數據庫

4.3消息訂閱者處理消息隊列

處理消息隊列時,可以由消息中間件推送給訂閱者,也可以由訂閱者拉取。

消息處理的級別有不同,主要有三種,分別是:最多處理一次、至少處理一次、準確的僅處理一次。其中:

最多處理一次:消息僅消費一次,無論消息是否已經消費成功,都不再發送。此時可能遇到數據丟失的問題,儘管消息中間件已經將消息發送給了消費者,但是並沒有能成功得到消費。

至少處理一次:消息消費者若沒有返回有效值,消息中間件將再次推送消息給消費者,保證消息得到處理。此時可能會造成重複現象。

精確的僅處理一次,消息中間件得到有效返回值之後進行剩餘操作,此時要求僅處理一次,若返回值爲失敗,將再次推送,若返回值成功,則消息移出隊列。這種方式對機器性能消耗較高。

五、消息中間件的應用場景

消息中間件主要有以下一些主要的應用場景,分別如下:

5.1業務解耦

由於系統業務流程較多,如果一次操作所有的流程,耗時較長。通過消息中間件平臺,將消息發送給各個消費者,使得各個消費者僅需要處理自己的業務邏輯,而不需要等待其他消費者的狀態,從而實現消息的異步處理,提高系統對消息的處理性能。

5.2削峯填谷

一般來說,消息中間件相當於一個消息緩衝池。當上遊的系統吞吐量高於下游第三方消費者的吞吐量的時候,如果直接推送給第三方,會使得第三方由於來不及處理,使得系統崩潰。如果採用消息中間件,上游的峯值數據可以在消息中間件平臺得到緩衝,而第三方則按照自身的消費能力去處理消息隊列,達到均衡峯谷數據量的作用。

5.3廣播通知

系統中一個狀態,需要通知多個第三方,借用消息中間件平臺,實現高效、高可用的系統廣播。

5.4 日誌分析

日誌分析是大規模分佈式系統不可避免的一個環節,用於快速定位系統問題,高效運維,實現高可靠的系統。一般來說,日誌分佈在若干臺機器上,藉助於消息中間件,收集多臺機器上的日誌數據,統一到日誌分析平臺作處理。

六、常見的消息中間件產品

Notify:淘寶之前使用的消息中間件系統,使用MySQL作爲落地媒介,可完全水平擴展

Kafka:Apache基金會支持的開源項目,實現高效的持久化,常用於日誌系統

RocketMQ:淘寶開源的一個消息中間件,原本是借鑑了kafka的思路實現的中間件,原名稱爲MetaQ,後來開源捐獻給Apache基金會,改名爲RocketMQ。

其他的,包括JMS、ActiveMQ、ZeroMQ等等,有興趣自己看吧。重點推薦RocketMQ。

作者|Maxwell_7|CSDN

七、面試專題

獲取方式:點贊+關注,私信“面試”

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章