天天看點

消息隊列訓練營總結

消息隊列是使用場景:異步解耦 削峰填谷

什麼是消息隊列?(類比古代皇帝處理事務,設内閣,分級處理)

阿裡雲消息服務MNS (Message Service)是一款簡單、高效、可靠、安全、便捷、可彈性擴充的分布式消息通知服務。MNS能夠幫助應用開發者在他們應用的分布式元件上自由的傳遞資料、通知消息,建構松耦合系統。

消息隊列模型

1.隊列模型(QUEUE):提供高可靠、高并發的一對一消費模型,及隊列中的每一條消息都隻能被一個消費者消費

消息隊列訓練營總結

2.主題模型(Topic):提供一對多的訂閱模型,支援消息通知

消息隊列訓練營總結

什麼是消息隊列MNS

阿裡雲消息隊列MNS,定位輕量RocketMQ,提供輕量模型、清涼HTTP RESTful協定,運維輕量、計費輕量,具備易內建等特點

消息隊列訓練營總結

與自建隊列相比,MNS具備1+2+3+N的特性,即一輕、二談、三可靠的特點,自建隊列依賴記憶體

消息隊列訓練營總結

小知識消息隊列MNS同樣支援訂閱釋出模型

推送模式的好處是即時性能較好,但需暴露用戶端位址來接收服務端的消息推送。有些情況下有的資訊,例如企業内網,無法暴露推送位址,希望改用拉取(Pull)的方式。雖然消息服務MNS不直接提供這種消費模型,但可以結合主題和隊列來實作一對多的拉取消息消費模型。

解決方案

通過建立訂閱,讓主題将消息先推送到隊列,然後由消費者從隊列拉取消息。這樣既可以做到一對多的廣播消息,又可避免暴露消費者的位址。

特性總結:

輕量隊列

首先第一個特性是輕量隊列,MNS定位是RocketMQ輕量版(Message Service,MNS),提供更簡單,輕量的消息隊列,聚焦消息領域核心能力建構。MNS提供輕量Queue/Topic資源模型,簡單易用無複雜模型概念;同時提供輕量HTTPRESTful接口,原生支援 HTTP協定對平台無依賴;此外,支援多種語言SDK,C++、Java、C#、Python、PHP、golang(第三方)、Node.js(第三方)

Serverless

第二個特性是支援Serverless 彈性,MNS是标準的Serverless 化産品,可處理近乎無限的并發請求,無需感覺或預先配置任何叢集資訊,拆箱即用;同時采用後付費計費方式,無需預留任何執行個體資源,隻為實際使用量付費。

安全穩定

第三個特性是安全穩定,

1)首先穩定性方面資料三重備份,可靠性達十個9 ( 99.99999999%) ;

2)其次服務可用性高達99.95%;可以做到始終可寫(Always Writable) ;

3)同時提供多層次安全防護和防DDoS攻擊;

4)此外,可以做到多使用者隔離機制,每個使用者獨立命名空間;全面支援 RAM:主子賬号,臨時AK;支援 HTTPS,VPC通路等,全方位的保障安全和穩定。

進階特性支援

第四個特性是支援進階特性,可自定義消息延遲,定時消息,消息體大小,消息生命周期,标簽過濾,重試即死信等進階特性。提供健全的消息産品方案幫助開發者在應用的分布式元件之間自由地傳遞資料、通知消息,進而建構松耦合系統。這部分的最佳實踐會在下一講中為大家着重展開。超大資訊傳輸

消息服務MNS的隊列的消息大小最大限制是64 KB,這個限制基本能夠滿足在正常情況下消息作為控制流資訊交換通道的需求。但是,在某些特殊場景下,消息資料比較大時,就隻能采用消息切片的方式。

下面是不做消息切片,通過OSS來實作傳遞大于64KB的消息的解決方案。

解決方案

生産者在向消息服務MNS發送消息前,如果發現消息體大于64 KB,則先将消息體資料上傳到OSS。

生産者把資料對應的Object資訊發送到消息服務MNS。

消費者從消息服務MNS隊列裡讀取消息,判斷消息内容是否為Oss的Object資訊。

判斷消息内容是OSS的Object資訊。則從OSS下載下傳對應的Object内容,并作為消息體傳回給上層程式。

消息隊列訓練營總結

事務消息

一些業務場景需要保證本地操作和消息發送的事務一緻性,即消息發送成功,本地操作成功。如果消息發送成功,本地操作失敗,那麼發送成功的消息需要復原。操作流程如圖所示。解決方案

消息發送成功,事務操作成功時操作步驟如下所示:

1.生産者發送一條事務準備消息到事務消息隊列。

2.生産者發送記錄檔消息到記錄檔隊列,日志中包含步驟1消息的消息句柄。

3.生産者執行本地事務操作成功。

4.生産者請求修改消息延遲時間,使消息對消費者可見。

5.生産者向記錄檔隊列确認記錄檔,删除日志消息。

6.消費者從事務消息隊列中接收事務消息。

7.消費者處理事務消息。

8.消費者請求删除事務消息。

消息隊列訓練營總結

應用場景

一、交易資訊解耦

交易系統是電商最核心的系統,為了保證主站業務的連續性,必須采用分布式的架構設計,對各個系統間進行解耦

核心價值:

高可用松耦合架構設計

通過上、下遊業務系統的松耦合設計,即便下遊子系統〔如物流、積分等)出現不可用甚至當機,都不會影響到核心交易系統的正常運轉。

靈活适應業務的快速增長

應業務要求新增業務系統時,不會影響基礎的技術架構改動,也不會影響其他系統間的正常運轉。

二、大容量場景削峰填谷

在滿足業務特殊時期,放紙系統超負荷甚至崩潰,或請求大量失敗影響使用者體驗。

核心價值:

超高流量脈沖處理能力

MNS超高性能的消息處理能力可以承接流量脈沖而不被擊垮,在確定系統可用性同時,因快速有效的請求響應而提升使用者的體驗。

海量消息堆積能力

確定下遊業務在安全水位内平滑穩定的運作,避免超高流量的沖擊。

合理的成本控制

通過削弱填谷可控制下遊業務系統的叢集規模,進而降低投入成本。