SOFAStack 消息隊列(SOFAStack MQ,簡稱 SOFAMQ)是基于 Apache RocketMQ 構建的分布式消息中間件,并與金融分布式架構 SOFAStack 深度集成,為分布式應用系統提供異步解耦和削峰填谷的能力,支持事務消息、順序消息、定時消息等多種消息類型,并具備高可靠、高吞吐、低延時等金融級特性。
應用場景
異步解耦消息隊列的生產消費模型可以解耦上下游業務系統,并支持下游多個消費者對同一消息進行消費和處理。以金融場景為例,支付中心作為支付寶主站最核心的系統,每筆支付數據的產生會引起幾百個下游業務系統的關注,包括賬戶中心、用戶中心、權益中心、流計算分析等,整體業務系統龐大而且復雜,在應用強耦合的情況下,任一應用故障都將可能對業務帶來影響。通過消息隊列進行異步通信和應用解耦,可以很好的提升業務的連續性。
削峰填谷應用分布式改造后,不同應用能承載的性能情況往往不一致,在諸如雙 11、店慶、秒殺等大型活動時,將會帶來較高的流量脈沖,可能導致系統超負荷甚至崩潰,影響用戶體驗。消息隊列可提供強大的抗積壓能力,實現削峰填谷,生產方生產消息后,消費方可以按照系統自身的承受能力進行消息的消費。
順序收發指的是消息消費者按照消息發送的順序進行消費,保證 FIFO。金融場景里需要保證順序的應用場景非常多,例如證券交易過程中的時間優先原則(交易系統中的訂單創建、支付、退款等流程)。
分布式事務一致性應用解耦往往帶來多個應用之間的事務一致性的問題。例如支付轉賬成功后,需要生成賬單,更新用戶積分等,此時通過消息隊列的分布式事務處理功能,既可以實現系統之間的解耦,又可以保證最終的數據一致性。
更多信息請參見 應用場景。
核心概念
Topic:消息主題,一級消息類型,生產者向其發送消息。
生產者:也稱為消息發布者,負責生產并發送消息至 Topic。
消費者:也稱為消息訂閱者,負責從 Topic 接收并消費消息。
消息:生產者向 Topic 發送并最終傳送給消費者的數據和(可選)屬性的組合。
消息屬性:生產者可以為消息定義的屬性,包含 Message Key 和 Tag。
Group:一類生產者或消費者,這類生產者或消費者通常生產或消費同一類消息,且消息發布或訂閱的邏輯一致。
更多概念解釋請參見 基礎術語。
消息收發模型
消息隊列支持發布/訂閱模型,消息生產者應用創建 Topic 并將消息發送到 Topic。消費者應用創建對 Topic 的訂閱以便從其接收消息。通信可以是一對多(扇出)、多對一(扇入)和多對多。
生產者集群
用來表示發送消息應用,一個生產者集群下包含多個生產者實例,可以是多臺機器,也可以是一臺機器的多個進程,或者一個進程的多個生產者對象。
一個生產者集群可以發送多個 Topic 消息。發送分布式事務消息時,如果生產者中途意外宕機,Broker 會主動回調生產者集群的任意一臺機器來確認事務狀態。
消費者集群
用來表示消費消息應用,一個消費者集群下包含多個消費者實例,可以是多臺機器,也可以是多個進程,或者是一個進程的多個消費者對象。
一個消費者集群下的多個消費者以均攤方式消費消息。如果設置的是廣播方式,那么這個消費者集群下的每個實例都消費全量數據。
一個消費者集群對應一個 Group ID,一個 Group ID 可以訂閱多個 Topic,如上圖中的 Group 2 所示。Group 和 Topic 的訂閱關系可以通過直接在程序中設置即可。