作者:隆基
2022 年,RocketMQ 5.0 的正式版發(fā)布。相對于 4.0 版本而言,架構走向云原生化,并且覆蓋了更多業(yè)務場景。
消息隊列演進史
操作系統(tǒng)、數據庫、中間件是基礎軟件的三駕馬車,而消息隊列屬于最經典的中間件之一,已經有 30 多年的歷史。消息隊列的發(fā)展主要經歷了以下幾個階段:
- 第一階段(1980-2000 年) 80 年代誕生了第一款消息隊列 The Information Bus,第一次提出發(fā)布訂閱模式來解決軟件之間的通信問題;90 年代是國際商業(yè)軟件巨頭的時代,IBM、Oracle、Microsoft 紛紛推出自己的 MQ,其中最具代表性的為 IBM MQ,價格昂貴,面向高端企業(yè),主要是大型金融、電信等企業(yè)。該類商業(yè) MQ 一般采用高端硬件,軟硬件一體機交付,MQ 本身的軟件架構為單機架構。
-
第二階段(2000~2007 年)
進入 00 年代后,初代開源消息隊列崛起,誕生了 JMS、AMQP 兩大標準,與之對應的兩個實現分別為 ActiveMQ、RabbitMQ,他們引領了初期的開源消息隊列技術。開源極大促進了消息隊列的流行,降低了使用門檻,技術普惠化,逐漸成為企業(yè)級架構的標配。相比于今天而言,這類 MQ 主要面向傳統(tǒng)企業(yè)級應用和小流量場景,橫向擴展能力較弱。 - 第三階段(2007~2017 年) PC 互聯網、移動互聯網爆發(fā)式發(fā)展。由于傳統(tǒng)的消息隊列無法承受億級用戶的訪問流量與海量數據傳輸,誕生了互聯網消息中間件,核心能力是全面采用分布式架構,具備很強的橫向擴展能力,開源典型代表有 Kafka、RocketMQ,閉源的有淘寶 Notify。Kafka 的誕生還將消息中間件從消息領域延伸到了流領域,從分布式應用的異步解耦場景延伸到大數據領域的流存儲與流計算場景。
- 第四階段(2014~至今) 云計算、IoT、大數據引領了新的浪潮。
互聯網時代的 RocketMQ
阿里的電商系統(tǒng)最初是個龐大的單體巨石應用,在研發(fā)效率、穩(wěn)定性方面都無法滿足淘寶和天貓飛速的發(fā)展。為了解決問題,2008 年,淘寶與天貓發(fā)起了一次最大規(guī)模的架構升級,啟動了“五彩石”項目,將單體應用拆分為分布式應用,同時抽象淘寶、天貓的共同底座——業(yè)務中臺,包括交易中心、商品中心、買家中心等。在業(yè)務中臺之下,同時誕生了阿里中間件(初期三大件包括消息、RPC、分布式數據層),RocketMQ 是其中之一。
雖然在當時業(yè)界已經存在不少商業(yè)或開源的消息隊列,比如 IBMMQ、ActiveMQ、RabbitMQ,但無一例外,它們都誕生于傳統(tǒng)企業(yè)級應用的場景,無法承受互聯網對于高并發(fā)、無限擴展的苛刻要求。以 RabbitMQ 為例,RabbitMQ 的隊列流量與存儲負載都為單機,無法滿足業(yè)務橫向擴展的需求。當時另一款具備無限橫向擴展能力的消息隊列是 Kafka,但其主要用于日志類場景,未經過大規(guī)模核心業(yè)務穩(wěn)定性驗證,而且偏向于簡單的 log 型消息隊列,無法滿足電商對于復雜消息功能特性的訴求,比如消息過濾、延遲消息等。
另一方面,傳統(tǒng)的消息隊列無法解決電商業(yè)務對于分布式一致性的要求。通過消息隊列實現應用異步解耦后,電商業(yè)務還需要保障不同上下游應用對于訂單狀態(tài)要達成最終一致,否則會產生大量臟數據,造成業(yè)務錯誤。
大規(guī)模的電商系統(tǒng),既要高性能又要一致性,傳統(tǒng)的分布式事務技術束手無策。比如IBM MQ 雖然可以使用 XA 事務來滿足分布式一致性的功能訴求,但是 XA 帶來的延遲與成本,對于海量的互聯網流量難以承受。
為了解決電商業(yè)務對于消息隊列的高性能、一致性、無限擴展等需求,自研消息隊列成為了當時阿里唯一的出路,最終互聯網消息隊列 RocketMQ 應運而生。
為了支持超大規(guī)模的復雜電商業(yè)務,RocketMQ 面向四個方面進行了重點建設,形成了四大優(yōu)勢能力。
① 支撐超大規(guī)模復雜業(yè)務的能力,具備豐富的消息特性
每一個大型互聯網公司都會有主營業(yè)務(比如阿里是交易、螞蟻是支付、餓了么是外賣),以主營業(yè)務為中心擴展業(yè)務能力,阿里電商是圍繞交易事件建設的電商操作系統(tǒng),每筆交易事件都會觸發(fā)不同的業(yè)務,不同細分業(yè)務會關注不同類型的交易事件,比如垂直市場只關注某個類目的交易事件、天貓超市只關注某個賣家的交易事件、購物車只關注下單成功的交易事件等。
RocketMQ 的 SQL 訂閱提供靈活的消息過濾能力,能夠滿足下游消費者按照不同的業(yè)務維度進行消息過濾的訴求。
在大型互聯網業(yè)務中,還會有各種定時事件觸發(fā)場景,最典型的是交易超時關閉機制,阿里交易或者 12306 訂票都有類似的機制。RocketMQ 的定時消息能夠很方便的滿足這類訴求。
② 一致性
無論是阿里交易還是螞蟻支付,都天然對數據一致性有著極高要求,RocketMQ 在一致性方面也打造了多個關鍵特性。最具代表性的是分布式事務消息,RocketMQ 是第一個實現該種特性的消息隊列,能夠保障交易的上下游對于訂單狀態(tài)達到最終一致。該方案也成為異步消息一致性方案的事實標準,被多個互聯網公司所采納,甚至也有公司將移植到定制版的 Kafka 種。除了分布式一致性之外,RocketMQ 還提供了順序消息的特性,滿足順序一致性的需求。
③ 穩(wěn)定性
穩(wěn)定性是交易與金融場景的基石特性,也是 RocketMQ 的根本。RocketMQ 除了具備核心服務的 HA 之外,還具備了全局高可用能力,在阿里內部支持同城多活、異地多活、中心容災等高階 HA 能力。同時,穩(wěn)定性也不局限于數據與服務的高可用,RocketMQ 從產品層面對穩(wěn)定性進行了全方位的建設,如消息軌跡、消息回溯、消息死信機制。
④ 高性能
在雙十一的極限流量下,RocketMQ 寫消息延遲 4 個 9 在 1ms 內,100% 在 100ms 內。RocketMQ 采用 shared-nothing 分布式架構,在吞吐量方面也具備無限擴展的能力,已經連續(xù) 10 年支持了雙十一萬億級消息洪峰,為百萬級的應用實例提供低延遲消息服務。
互聯網的故事還在進行,云計算規(guī)?;涞氐臅r代悄然而來。
云計算時代的 RocketMQ 5.0
2015 年,RocketMQ 的首個云消息服務在阿里云上線,開啟了大規(guī)模的云計算實踐的序幕。同時 RocketMQ 也是業(yè)界第一個提供公有云服務的開源消息隊列。
在大規(guī)模的云計算業(yè)務場景下,RocketMQ 面臨著全新的挑戰(zhàn)與機遇。
- 多樣性: 它不再僅服務于某一家公司的內部業(yè)務,不再局限于互聯網或金融企業(yè),需要實現全行業(yè)、全場景的覆蓋。
- 標準化: 對于服務企業(yè)內部的自研消息隊列而言,無需考慮協議或 API 的標準化。但是對于云消息服務而言,因為服務對象是外部企業(yè)客戶,據信通院統(tǒng)計,80% 以上的企業(yè)客戶已經采納開源技術和標準技術。因此,作為一款云消息服務,需要提供對業(yè)界的事實標準協議、接口、SDK 的兼容,才能保證客戶平滑上云,同時打消客戶技術綁定的擔憂。
- 云原生: 云原生理念深入人心,消息隊列要更好地幫助客戶實現云原生應用架構,為業(yè)務降本提效。
- 新趨勢: 各種新技術的興起,包括 IoT、5G、邊緣計算、事件驅動,還有事件流技術。面向技術的新趨勢與多樣化的業(yè)務需求,RocketMQ 進行了自我進化,演進到 5.0 版本。
為了充分釋放云的技術紅利,RocketMQ 5.0 在技術架構上進行了云原生的演進。從客戶端到服務端都進行了全方位的改造,更高彈性、可用性、更低成本。
- 客戶端采用輕量 SDK 設計理念,將原來富客戶端的邏輯下沉到 Broker,滿足現代化應用輕量化、Serverless 的趨勢。
- Broker 徹底進行彈性架構改造,分離 RocketMQ Proxy 與 Store 層,其中 Proxy 是完全無狀態(tài)的計算節(jié)點,專注多協議、多領域場景覆蓋,可以面向不同工作負載獨立彈性,如物聯網、微服務、大數據不同場景有不同的資源訴求。Store 層則專注消息的高可用存儲,包括副本復制、主備切換與云存儲集成。同時對 RocketMQ 的 Topic 資源進行三層解耦,面向消息的Topic、面向流的 Topic 邏輯分片、面向底層存儲的 Topic 物理分片,每一層都可以獨立彈性。
- 在存儲層引入了 Leaderless 的高可用架構,Store 節(jié)點身份對等,Leaderless 化,0 外部依賴。多副本策略可定制,可用性+可靠性+成本靈活組合,面向多可用區(qū)、多 region 組建 Geo 高可用能力。
為了滿足云時代多樣化的用戶需求,RocketMQ 5.0 從原來的互聯網業(yè)務消息中間件擴展到"消息、事件、流"超融合處理平臺,解鎖更全面的能力。
在消息領域, 全面擁抱云原生技術,更好的彈性架構與高可用能力。
在事件領域, 支持 CloudEvent 規(guī)范,以事件為中心的產品新界面,助力客戶建設跨業(yè)務、跨組織的數字化商業(yè)生態(tài)。
在流領域, 流存儲增強批量特性,大幅度提高數據吞吐量;新增邏輯隊列能力,解耦邏輯資源與物理資源,在流場景也具備無縫伸縮能力;新增流數據庫 RSQLDB,提供實時事件流處理、流分析能力。
RocketMQ 基于端云一體化架構實現了完整的物聯網消息隊列的能力,從原來的連接應用擴展到連接物聯網設備。同時 RocketMQ 5.0 也繼續(xù)保持極簡架構的原則,能夠以最低的資源消耗、運維成本搭建服務,適合邊緣計算。
除了的產品核心能力之外,RocketMQ 5.0 積極建設開源生態(tài)。
一方面是應用架構生態(tài)的建設,既有經典的開源項目、規(guī)范的集成,比如 JMS、AMQP 等,也有云原生技術生態(tài)的集成,比如 CloudEvents、Dapr、Envoy。同時 RocketMQ 也會進一步發(fā)力數據架構生態(tài),全鏈路集成大數據的攝入、數據存儲、數據處理、數據分析組件,從離線大數據到實時大數據。
RocketMQ 學習社區(qū)體驗地址
RocketMQ 學習社區(qū)重磅上線!AI 互動,一秒了解 RocketMQ 功能源碼。RocketMQ 學習社區(qū)是國內首個基于AIGC提供的知識服務社區(qū),旨在成為 RocketMQ 學習路上的“貼身小二”。
PS:RocketMQ 社區(qū)以 RocketMQ 5.0 資料為主要訓練內容,持續(xù)優(yōu)化迭代中,回答內容均由人工智能模型生成,其準確性和完整性無法保證,且不代表 RocketMQ 學習社區(qū)的態(tài)度或觀點。
立即體驗 RocketMQ 學習社區(qū)(建議 PC 端體驗完整功能):文章來源:http://www.zghlxwxcb.cn/news/detail-620817.html
https://rocketmq-learning.com/文章來源地址http://www.zghlxwxcb.cn/news/detail-620817.html
到了這里,關于從互聯網到云時代,Apache RocketMQ 是如何演進的?的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!