本文為您介紹雲訊息佇列 RocketMQ 版的領域模型。
產品定位
雲訊息佇列 RocketMQ 版是一款典型的分布式架構下的中介軟體產品,使用非同步通訊方式和發布訂閱的訊息傳輸模型。
通訊方式和傳輸模型的具體說明,請參見下文通訊方式介紹和訊息傳輸模型介紹。
雲訊息佇列 RocketMQ 版產品具備非同步通訊的優勢,系統拓撲簡單、上下遊耦合較弱,主要應用於非同步解耦,流量削峰填穀等情境。
對於同步鏈路,需要即時返回調用結果的情境,建議使用RPC調用方案。
您在進行產品選型時,請明確您的業務情境和主要需求。
訊息佇列RocketMQ版領域模型

如上圖所示,雲訊息佇列 RocketMQ 版中訊息的生命週期主要分為訊息生產、訊息儲存、訊息消費這三部分。
生產者生產訊息並發送至雲訊息佇列 RocketMQ 版服務端,訊息被儲存在服務端的主題中,消費者通過訂閱主題消費訊息。
訊息生產
生產者(Producer):雲訊息佇列 RocketMQ 版中用於產生訊息的運行實體,一般整合於業務調用鏈路的上遊。生產者是輕量級匿名無身份的。
訊息儲存
主題(Topic):雲訊息佇列 RocketMQ 版訊息傳輸和儲存的分組容器,主題內部由多個隊列組成,訊息的儲存和水平擴充實際是通過主題內的隊列實現的。
輕量主題(LiteTopic):雲訊息佇列 RocketMQ 版當主題(Topic)的類型為Lite類型時,可以在主題下建立二級資源輕量主題。每個LiteTopic下預設由一個隊列組成。
隊列(MessageQueue):雲訊息佇列 RocketMQ 版訊息傳輸和儲存的實際單元容器,類比於Kafka中的分區。雲訊息佇列 RocketMQ 版通過流式特性的無限隊列結構來儲存訊息,訊息在隊列內具備順序性儲存特徵。
訊息(Message):雲訊息佇列 RocketMQ 版的最小傳輸單元。訊息具備不可變性,在初始化發送和完成儲存後即不可變。
訊息消費
消費者分組(ConsumerGroup):雲訊息佇列 RocketMQ 版發布訂閱模型中定義的獨立的消費身份分組,用於統一管理底層啟動並執行多個消費者(Consumer)。同一個消費組的多個消費者必須保持消費邏輯和配置一致,共同分擔該消費組訂閱的訊息,實現消費能力的水平擴充。
消費者(Consumer):雲訊息佇列 RocketMQ 版消費訊息的運行實體,一般整合在業務調用鏈路的下遊。消費者必須被指定到某一個消費組中。
訂閱關係(Subscription):雲訊息佇列 RocketMQ 版發布訂閱模型中訊息過濾、重試、消費進度的規則配置。訂閱關係以消費組粒度進行管理,消費組通過定義訂閱關係控制指定消費組下的消費者如何?訊息過濾、消費重試及消費進度恢複等。
雲訊息佇列 RocketMQ 版的訂閱關係除過濾運算式之外都是持久化的,即服務端重啟或請求斷開,訂閱關係依然保留。
通訊方式介紹
分布式系統架構思想下,將複雜系統拆分為多個獨立的子模組,例如微服務模組。此時就需要考慮子模組間的遠程通訊,典型的通訊模式分為以下兩種,一種是同步的RPC遠程調用;一種是基於中介軟體代理的非同步通訊方式。
同步RPC調用模型

同步RPC調用模型下,不同系統之間直接進行調用通訊,每個請求直接從調用方發送到被呼叫者,然後要求被呼叫者立即返迴響應結果給調用方,以確定本次調用結果是否成功。
此處的同步並不代表RPC的編程介面方式,RPC也可以有非同步非阻塞調用的編程方式,但本質上仍然是需要在指定時間內得到目標端的直接響應。
非同步通訊模型

非同步訊息通訊模式下,各子系統之間無需強耦合直接連接,調用方只需要將請求轉化成非同步事件(訊息)發送給中間代理,發送成功即可認為該非同步鏈路調用完成,剩下的工作中間代理會負責將事件可靠通知到下遊的調用系統,確保任務執行完成。該中間代理一般就是訊息中介軟體。
非同步通訊的優勢如下:
系統拓撲簡單
由於調用方和被呼叫者統一和中間代理通訊,系統是星型結構,易於維護和管理。
上下遊耦合性弱
上下遊系統之間弱耦合,結構更靈活,由中間代理負責緩衝和非同步恢複。 上下遊系統間可以獨立升級和變更,不會互相影響。
容量削峰填穀
基於訊息的中間代理往往具備很強的流量緩衝和整形能力,業務流量高峰到來時不會擊垮下遊。
訊息傳輸模型介紹
主流的訊息中介軟體的傳輸模型主要為點對點模型和發布訂閱模型。
點對點模型

點對點模型也叫隊列模型,具有如下特點:
消費匿名:訊息上下遊溝通的唯一的身份就是隊列,下遊消費者從隊列擷取訊息無法聲明獨立身份。
一對一通訊:基於消費匿名特點,下遊消費者即使有多個,但都沒有自己獨立的身份,因此共用隊列中的訊息,每一條訊息都只會被唯一一個消費者處理。因此點對點模型只能實現一對一通訊。
發布訂閱模型

發布訂閱模型具有如下特點:
消費獨立:相比隊列模型的匿名消費方式,發布訂閱模型中消費方都會具備的身份,一般叫做訂閱組(訂閱關係),不同訂閱組之間相互獨立不會相互影響。
一對多通訊:基於獨立身份的設計,同一個主題內的訊息可以被多個訂閱組處理,每個訂閱組都可以拿到全量訊息。因此發布訂閱模型可以實現一對多通訊。
傳輸模型對比
點對點模型和發布訂閱模型各有優勢,點對點模型更為簡單,而發布訂閱模型的擴充性更高。雲訊息佇列 RocketMQ 版使用的傳輸模型為發布訂閱模型,因此也具有發布訂閱模型的特點。