郭嘉凱
在成為Apache頂級(jí)項(xiàng)目后,RocketMQ團(tuán)隊(duì)基于RocketMQ在各類(lèi)場(chǎng)景下的豐富實(shí)踐,將互聯(lián)網(wǎng)業(yè)務(wù)對(duì)消息的需求抽象化,形成了一套能滿足大多數(shù)業(yè)務(wù)場(chǎng)景的標(biāo)準(zhǔn)模型。
2016年11月11日,天貓、淘寶的總交易額超過(guò)1207億元,創(chuàng)造了當(dāng)時(shí)新的世界紀(jì)錄,也被認(rèn)為是一個(gè)商業(yè)奇跡。在取得巨大成就的背后,卻很少有人知道,一項(xiàng)技術(shù)起到了非常重要的支撐作用。這項(xiàng)技術(shù)就是阿里巴巴中間件團(tuán)隊(duì)自主開(kāi)發(fā)的RocketMQ消息中間件。
在2016年幫助阿里巴巴創(chuàng)造商業(yè)奇跡之后,2017年,RocketMQ消息中間件再次讓世界震驚。這一次是因?yàn)椋?017年9月,Apache軟件基金會(huì)官方宣布,阿里巴巴捐贈(zèng)給Apache社區(qū)的開(kāi)源項(xiàng)目RocketMQ從Apache社區(qū)正式畢業(yè),成為Apache頂級(jí)項(xiàng)目(TLP)。Apache RocketMQ也是國(guó)內(nèi)首個(gè)非Hadoop生態(tài)體系的頂級(jí)項(xiàng)目,可以說(shuō),這是中國(guó)自主研發(fā)的技術(shù)在國(guó)際IT舞臺(tái)上的一次華麗綻放,與此同時(shí),Apache RocketMQ也引發(fā)了全球IT產(chǎn)業(yè)的廣泛關(guān)注。
那么,這一技術(shù)究竟是如何誕生的呢?
“在阿里巴巴技術(shù)發(fā)展初期,伴隨著淘寶業(yè)務(wù)的快速發(fā)展,網(wǎng)站流量呈現(xiàn)幾何級(jí)增長(zhǎng)。單體巨無(wú)霸式的應(yīng)用無(wú)法跟上快速迭代的研發(fā)要求,上百名工程師每天對(duì)著同一套系統(tǒng),代碼不斷地遷入遷出,發(fā)布、交付成本也非常之高?!卑⒗锇桶透呒?jí)技術(shù)專(zhuān)家、RocketMQ聯(lián)合創(chuàng)始人馮嘉介紹道。
這個(gè)時(shí)候,阿里巴巴公司內(nèi)部從業(yè)務(wù)、組織層面進(jìn)行了一次大的水平與垂直切分,拆分出用戶中心、商品中心、交易中心、評(píng)價(jià)中心等平臺(tái),分布式電商系統(tǒng)的雛形也由此誕生。
阿里第一代消息引擎Notify就是在這樣的背景下設(shè)計(jì)出來(lái)的,主要解決的核心問(wèn)題是交易下單鏈路的異步解耦?!爱?dāng)然,這背后需要我們嚴(yán)肅考慮分布式系統(tǒng)的可擴(kuò)展性,比方說(shuō)它的服務(wù)發(fā)現(xiàn)節(jié)點(diǎn)、存儲(chǔ)節(jié)點(diǎn)、Broker節(jié)點(diǎn)都支持水平擴(kuò)展,面對(duì)淘寶高峰流量,比較好地起到了削峰填谷的作用?!瘪T嘉說(shuō)。
放眼全球,當(dāng)時(shí)業(yè)界的消息引擎如Apache ActiveMQ,在后端有超大規(guī)模消費(fèi)者,尤其是在消費(fèi)能力不均衡的前提下,經(jīng)常會(huì)出現(xiàn)堆積,這種影響被傳遞到上游生產(chǎn)者,進(jìn)而影響交易核心業(yè)務(wù),系統(tǒng)卡頓、宕機(jī)現(xiàn)象不在少數(shù)。如何能夠更好地削峰填谷,這也是Notify最早面臨的難題之一。
后來(lái),隨著2011年Kafka從Apache頂級(jí)項(xiàng)目畢業(yè),其自研存儲(chǔ)引擎帶來(lái)的海量消息堆積,高效的持久化特性進(jìn)入阿里巴巴中間件團(tuán)隊(duì)的視野。但它特殊的日志通道定位,并不能完全滿足阿里巴巴高頻的在線交易場(chǎng)景,為此阿里巴巴中間件團(tuán)隊(duì)設(shè)計(jì)并研發(fā)了新一代消息引擎 RocketMQ(阿里巴巴內(nèi)部叫MetaQ),從最初的日志傳輸?shù)胶髞?lái)阿里集團(tuán)全維度在線業(yè)務(wù)的支撐,RocketMQ被廣泛用在交易、數(shù)據(jù)同步、緩存同步、IM通信、流計(jì)算、IoT等場(chǎng)景型應(yīng)用中。
據(jù)馮嘉介紹,目前,包括阿里云上的消息產(chǎn)品以及收購(gòu)的子公司在內(nèi),阿里集團(tuán)的消息產(chǎn)品全線跑在RocketMQ4的內(nèi)核上面。而說(shuō)到數(shù)據(jù)表現(xiàn),馮嘉則更加自豪?!耙?016年阿里巴巴的雙11為例,RocketMQ完成了1.2萬(wàn)億消息精準(zhǔn)低延遲投遞,交易峰值高達(dá)17萬(wàn)筆/秒?!?/p>
在淘寶、天貓的成功應(yīng)用證明了RocketMQ中間件的價(jià)值和能力,也使得越來(lái)越多的企業(yè)和開(kāi)發(fā)者開(kāi)始關(guān)注RocketMQ。而就在此時(shí),阿里巴巴公司做出了一個(gè)出人意料的舉動(dòng),宣布將開(kāi)源分布式消息中間件RocketMQ捐贈(zèng)給Apache,成為Apache孵化項(xiàng)目。
在很多人看來(lái),阿里巴巴投入了大量人力、資源,歷經(jīng)多年所開(kāi)發(fā)出來(lái)的如此強(qiáng)大的一項(xiàng)自主開(kāi)發(fā)的核心技術(shù),肯定是要作為企業(yè)的核心競(jìng)爭(zhēng)力之一,嚴(yán)密地保護(hù)起來(lái)。而阿里巴巴卻反其道而行之,將這項(xiàng)技術(shù)捐贈(zèng)給Apache,開(kāi)源給全世界的企業(yè)和開(kāi)發(fā)者。
阿里巴巴為什么要這么做?“在阿里建立之初,正是基于開(kāi)源軟件,將整個(gè)電商平臺(tái)的原型快速搭建起來(lái)的。不僅如此,即便這么多年過(guò)去了,雖然阿里的基礎(chǔ)平臺(tái)還在不斷演進(jìn),但仍舊有開(kāi)源軟件的身影。我們感恩社區(qū),也希望將這些久經(jīng)驗(yàn)證的臻品拿出來(lái),分享出來(lái),回饋社區(qū),讓更多的人受益。我們希望更多的人能夠參與進(jìn)來(lái),在這樣一個(gè)開(kāi)放透明、全球協(xié)作的環(huán)境下,相信阿里巴巴在開(kāi)源領(lǐng)域會(huì)取得更多的成績(jī)?!瘪T嘉道出了其中的原因。
之后RocketMQ的發(fā)展也證明了阿里巴巴的這一做法的正確性。團(tuán)隊(duì)吸引了多位國(guó)內(nèi)外Committer和PMC Member加入。在經(jīng)過(guò)半年多的努力后,在2017年9月,RocketMQ順利畢業(yè)并成為Apache頂級(jí)項(xiàng)目。
如今,RocketMQ在開(kāi)源社區(qū)的發(fā)展,整個(gè)生態(tài)已經(jīng)覆蓋了電子商務(wù)、物聯(lián)網(wǎng)、金融、大數(shù)據(jù)、新能源、新零售、物流、軌道交通等眾多領(lǐng)域,且具備了連接其他頂級(jí)開(kāi)源生態(tài)的能力,如Spark、Ignite和Storm等,而且,已經(jīng)有數(shù)百家國(guó)內(nèi)外知名企業(yè)在使用RocketMQ。
在成為Apache頂級(jí)項(xiàng)目后,RocketMQ團(tuán)隊(duì)基于RocketMQ在各類(lèi)場(chǎng)景下的豐富實(shí)踐,將互聯(lián)網(wǎng)業(yè)務(wù)對(duì)消息的需求抽象化,形成了一套能滿足大多數(shù)業(yè)務(wù)場(chǎng)景的標(biāo)準(zhǔn)模型,逐步發(fā)展成與廠商無(wú)關(guān)、與平臺(tái)無(wú)關(guān)的分布式消息及流處理領(lǐng)域的應(yīng)用開(kāi)發(fā)標(biāo)準(zhǔn)—OpenMessaging,并于2017年10月進(jìn)入Linux基金會(huì)。
進(jìn)入2018年,RocketMQ團(tuán)隊(duì)和社區(qū)已經(jīng)開(kāi)始著手思考和構(gòu)建下一代消息引擎—Apache RocketMQ5.0。據(jù)悉,RocketMQ5.0將基于云原生的理念,圍繞可運(yùn)維、可監(jiān)控、彈性、可恢復(fù)、敏捷5個(gè)維度來(lái)打造下一代分布式消息計(jì)算平臺(tái),全面提升RocketMQ的功能、性能、生態(tài)效能和場(chǎng)景應(yīng)對(duì)能力。
“在計(jì)算方面,我們將基于存儲(chǔ)和計(jì)算分離的理念,打造一個(gè)精簡(jiǎn)的計(jì)算節(jié)點(diǎn)群,更貼近地面或邊緣設(shè)備,高效解決數(shù)據(jù)量不斷增大、訪問(wèn)端點(diǎn)不斷增多,但計(jì)算能力有限的需求場(chǎng)景。在存儲(chǔ)方面,我們將更加精細(xì)化地控制內(nèi)存配置和回收,利用SPDK發(fā)揮在SSD新標(biāo)準(zhǔn)NVMe下的優(yōu)勢(shì),兼容各類(lèi)硬件設(shè)備,達(dá)到微秒級(jí)的端到端時(shí)延。同時(shí),團(tuán)隊(duì)也在積極尋求和全球高校合作,探索更前沿的技術(shù)實(shí)現(xiàn)以及應(yīng)用場(chǎng)景,努力挖掘用戶的癢點(diǎn),解決客戶的痛點(diǎn),創(chuàng)造產(chǎn)品的爽點(diǎn)?!瘪T嘉說(shuō)。
據(jù)馮嘉介紹,RocketMQ5.0將基于 OpenMessaging標(biāo)準(zhǔn)向上和向下拓展,提升生態(tài)效能。在聯(lián)機(jī)分析處理領(lǐng)域,對(duì)接Prometheus、ELK包括業(yè)務(wù)數(shù)據(jù),將來(lái)自上游的數(shù)據(jù)形態(tài)Metrics、Logs、Streams傳輸?shù)较掠蔚母黝?lèi)數(shù)據(jù)分析應(yīng)用上。在金融、游戲和電商領(lǐng)域,RocketMQ5.0將進(jìn)一步優(yōu)化打磨內(nèi)核,提供更高的穩(wěn)定性與可用性。同時(shí),借助 OpenMessaging提供更多語(yǔ)言的接入能力,包括Infrastructure Native的能力。而在一些新興領(lǐng)域,如IoT場(chǎng)景中,基于計(jì)算和存儲(chǔ)分離的理念,借助物聯(lián)網(wǎng)中無(wú)處不在的“物”來(lái)分擔(dān)計(jì)算,從而解決Java在單機(jī)上支持海量設(shè)備的連接在線不足的問(wèn)題,將上游的數(shù)據(jù)高效寫(xiě)入下游的TP或者AP系統(tǒng)中。
“優(yōu)秀的產(chǎn)品和強(qiáng)大的技術(shù)都需要通過(guò)解決實(shí)際場(chǎng)景中的業(yè)務(wù)問(wèn)題來(lái)詮釋自身的價(jià)值,RocketMQ5.0將在以下4個(gè)場(chǎng)景中進(jìn)一步提升應(yīng)對(duì)能力。在電子商務(wù)領(lǐng)域保證整個(gè)傳輸鏈上的消息不丟,提高交易數(shù)據(jù)的完整性;在金融領(lǐng)域,支持分布式事務(wù)下的多端調(diào)用,保證關(guān)鍵數(shù)據(jù)的一致性;在大數(shù)據(jù)領(lǐng)域,具備更強(qiáng)的天然的streaming能力,解決端到端的延遲,優(yōu)化用戶端體驗(yàn);在IoT領(lǐng)域,支持海量設(shè)備同時(shí)在線和海量topic消息隊(duì)列,保障雙向通信。”馮嘉介紹說(shuō)。
在不斷完善產(chǎn)品的同時(shí),RocketMQ團(tuán)隊(duì)和社區(qū)也在大力發(fā)展Messaging生態(tài),“也希望這方面的專(zhuān)家能夠加入我們,加入社區(qū),一起打造OpenMessaging領(lǐng)域新標(biāo)準(zhǔn)?!瘪T嘉說(shuō)道。
訪談實(shí)錄
Q:中國(guó)大數(shù)據(jù)產(chǎn)業(yè)生態(tài)聯(lián)盟、《軟件和集成電路》雜志社
A:阿里巴巴高級(jí)技術(shù)專(zhuān)家、 RocketMQ 聯(lián)合創(chuàng)始人馮嘉
Q:目前市面上的消息中間件有幾種,企業(yè)在進(jìn)行消息中間件選型時(shí),應(yīng)該注意些什么?需要從哪幾個(gè)維度考慮?
A:全球主流的開(kāi)源分布式消息引擎,除了RabbitMQ,基本上都在Apache上了。Apache ActiveMQ及其旗下的各個(gè)子項(xiàng)目,主要面向企業(yè)級(jí)市場(chǎng),吞吐不是其強(qiáng)項(xiàng),主要和企業(yè)已有基礎(chǔ)設(shè)施集成起來(lái)比較方便,如EAI、ESB這種早期企業(yè)基礎(chǔ)架構(gòu)。
Apache Kafka為日志處理而生,目前從社區(qū)來(lái)看,發(fā)力重點(diǎn)在流計(jì)算、IoT等領(lǐng)域,和ApacheSparkStreaming,ApacheFlink,ApacheStorm等一站式流計(jì)算平臺(tái)不同,它從 ApacheSamza這種輕量級(jí)方案中汲取了養(yǎng)分,提供給用戶的是一個(gè)異步編程框架,用戶基于類(lèi)庫(kù)編程,不需要考慮分發(fā)、部署、調(diào)度等一系列傳統(tǒng)流計(jì)算框架帶來(lái)的繁瑣工作。這種輕量級(jí)的解決方案在一些日志處理、ETL等場(chǎng)景更受大家歡迎。
如果是應(yīng)對(duì)一些高并發(fā)、高可靠、高可用以及比較苛刻的場(chǎng)景,Apache RocketMQ是一個(gè)不錯(cuò)的選擇。最近留意到一個(gè)有趣的現(xiàn)象,國(guó)內(nèi)一些中大型規(guī)模的公司普遍部署了兩套消息引擎,一套選擇Apache RocketMQ用在交易、數(shù)據(jù)分發(fā)等核心鏈路上,一套選擇Apache Kafka用在大數(shù)據(jù)等在線、離線分析鏈路上。毫無(wú)疑問(wèn),Kafka目前在大數(shù)據(jù)生態(tài)建設(shè)方面,確實(shí)具備一定的先發(fā)優(yōu)勢(shì)。
RocketMQ作為承載了阿里巴巴雙11萬(wàn)億級(jí)數(shù)據(jù)體量的消息引擎,在電商,金融領(lǐng)域的優(yōu)勢(shì)也是比較明顯的。目前,國(guó)內(nèi)很多金融領(lǐng)域的領(lǐng)軍企業(yè)在構(gòu)建自己的分布式金融體系時(shí),也都不約而同地選擇了RocketMQ。
另外,自從RocketMQ進(jìn)入Apache基金會(huì)后,團(tuán)隊(duì)大力發(fā)展社區(qū)生態(tài),包括和Apache Spar、ApacheFlink、ApacheStorm、Apache Ignite等頂級(jí)開(kāi)源產(chǎn)品有了更多的生態(tài)連接與整合能力。未來(lái)一兩年,我們也希望RocketMQ 能在大數(shù)據(jù)、流計(jì)算領(lǐng)域取得更多的創(chuàng)新突破。
Q:如果我是一個(gè)RocketMQ的愛(ài)好者,如何才能深度參與到社區(qū)的共建中?
A:通常社區(qū)會(huì)有PMCmember、committer、contributor和user這些角色,但一些優(yōu)秀的國(guó)際社區(qū)有更多的生態(tài)角色,例如專(zhuān)欄作家,以一個(gè)Editor的身份,把開(kāi)發(fā)和使用過(guò)程中的經(jīng)驗(yàn)以文字的形式分享出來(lái),發(fā)表在自己的社交賬號(hào)或者社區(qū)官網(wǎng)的blog上,幫助其他開(kāi)發(fā)者更好地使用開(kāi)源產(chǎn)品,這對(duì)社區(qū)的建設(shè)是非常有幫助的。除此之外,Evangelist(布道師)、ReleaseManager、Consultant包括各類(lèi)會(huì)議的Speaker也是非常重要的社區(qū)角色。
從去年開(kāi)始,我們?cè)诒本?、深圳開(kāi)展了線下的Meetup活動(dòng),豐富社區(qū)的交流方式,如果你有特別好的消息實(shí)踐,歡迎到我們的Meetup上來(lái)進(jìn)行分享。
另外,我們也會(huì)更多地聆聽(tīng)來(lái)自用戶的聲音,如果大家所在的公司在大規(guī)模使用RocketMQ中遇到了問(wèn)題,也歡迎找我們交流。我們也在計(jì)劃進(jìn)行一些更聚焦的workshop,走進(jìn)企業(yè)。希望大家一起來(lái)共建Messaging生態(tài),探討領(lǐng)域發(fā)展方向。當(dāng)然,如果你有想法寫(xiě)一本關(guān)于Messaging或者RocketMQ方面的書(shū)籍,也歡迎聯(lián)系我們。
Q:現(xiàn)在 OpenMessaging 也已經(jīng)正式入駐 Linux 基金會(huì),目前進(jìn)展如何?
A:OpenMessaging自去年10月進(jìn)入Linux 基金會(huì)以來(lái),受到了全球同行的廣泛關(guān)注。很多分布式領(lǐng)域的專(zhuān)家在Issue上,郵件列表里和我們進(jìn)行了激烈探討,整個(gè)模型也是在不斷打磨和優(yōu)化。
目前除了初創(chuàng)成員,我們還在考慮吸納來(lái)自全球其他互聯(lián)網(wǎng)、金融領(lǐng)域的大咖企業(yè),啟動(dòng)一個(gè)類(lèi)似Linux基金會(huì)的Funding Program,歡迎國(guó)內(nèi)有自主消息引擎的廠商加入我們,也非常歡迎積極擁抱標(biāo)準(zhǔn)化戰(zhàn)略的同行企業(yè)加入進(jìn)來(lái),共同打造消息領(lǐng)域的事實(shí)標(biāo)準(zhǔn)。整個(gè)標(biāo)準(zhǔn)的第一個(gè)正式版本(非Alpha版本)已經(jīng)發(fā)布,而阿里云MQ會(huì)成為OpenMessaging全球第一個(gè)云廠商標(biāo)準(zhǔn)實(shí)現(xiàn),并于今年晚些時(shí)候發(fā)布。
OpenMessaging在我們初步蹦出這個(gè)想法的時(shí)候,就跟Apache社區(qū)包括RabbitMQ團(tuán)隊(duì)的同行們聊過(guò),大家反響普遍還是很熱烈的。畢竟這塊在業(yè)界還是個(gè)空缺,在Java生態(tài)里,JMS 2.1在JavaEE體系里被推遲了又推遲,Spring 社區(qū)也忍不住自己設(shè)計(jì)了一套類(lèi)似的編程框架。但放眼多語(yǔ)言領(lǐng)域,這塊就顯得貧瘠了。
業(yè)界迫切需要一套類(lèi)似數(shù)據(jù)庫(kù)領(lǐng)域的SQL 這樣的編程標(biāo)準(zhǔn),而在整個(gè)標(biāo)準(zhǔn)的演進(jìn)過(guò)程中,像ApacheActiveMQ、ApachePulsar,包括 ApacheRocketMQ社區(qū)都給出了很多積極的回應(yīng)。在第一個(gè)標(biāo)準(zhǔn)版本實(shí)現(xiàn)中,大家也會(huì)看到其它幾家頂級(jí)開(kāi)源消息引擎的OpenMessaging實(shí)現(xiàn)。
除此之外,在SpringCloud、AMQP、MQTT、Serverless等領(lǐng)域,OpenMessaging也會(huì)尋求積極探索與合作。準(zhǔn)確地講,OpenMessaging 已經(jīng)不是一個(gè)傳統(tǒng)意義上的API標(biāo)準(zhǔn),它更像是一個(gè)生態(tài),一個(gè)圍繞著Messaging運(yùn)轉(zhuǎn)的全域開(kāi)源生態(tài)。
行業(yè)應(yīng)用案例
案例名稱(chēng):阿里巴巴“雙11”
核心特點(diǎn):
RocketMQ是一個(gè)低延遲、高可靠的分布式消息中間件。它被設(shè)計(jì)為采用長(zhǎng)輪詢拉的模式,支持傳統(tǒng)消息領(lǐng)域的點(diǎn)對(duì)點(diǎn)和發(fā)布訂閱模型,單主題下支持千萬(wàn)級(jí)別的消息堆積,對(duì)于離線計(jì)算具有很好的削峰填谷作用。對(duì)于企業(yè)級(jí)應(yīng)用,它能很好起到異步解耦的作用。作為數(shù)據(jù)通道,RocketMQ在事務(wù)數(shù)據(jù)復(fù)制(全局有序),實(shí)時(shí)計(jì)算方面也具備高效的吞吐能力。
應(yīng)用解讀:
RocketMQ主要由NameServer、Broker、Producer以及Consumer四部分構(gòu)成。其中NameServer以輕量級(jí)的方式提供服務(wù)發(fā)現(xiàn)和路由功能,每個(gè)NameServer存有全量的路由信息,提供對(duì)等的讀寫(xiě)服務(wù),支持快速擴(kuò)縮容。Broker負(fù)責(zé)消息存儲(chǔ),以Topic為緯度支持輕量級(jí)的隊(duì)列,單機(jī)可以支撐上萬(wàn)隊(duì)列規(guī)模,支持消息推拉模型,具備多副本容錯(cuò)機(jī)制(2副本或3副本)、強(qiáng)大的削峰填谷以及上億級(jí)消息堆積能力,同時(shí)可嚴(yán)格保證消息的有序性。
除此之外,Broker還提供了同城異地容災(zāi)能力,豐富的Metrics統(tǒng)計(jì)以及告警機(jī)制。Producer和Consumer以SDK形式提供,由用戶進(jìn)行分布式部署,消息由Producer通過(guò)多種負(fù)載均衡模式發(fā)送到Broker集群,支持Batch發(fā)送、oneway發(fā)送。發(fā)送低延時(shí),支持快速失敗。Consumer支持PUSH和PULL兩種消費(fèi)模式,支持集群消費(fèi)和廣播消息,提供實(shí)時(shí)的消息訂閱機(jī)制,目前不支持Exactly once語(yǔ)義,所以需要用戶自己做好判重處理。
應(yīng)用價(jià)值:
歷年“雙11”,RocketMQ都承載著阿里巴巴生產(chǎn)系統(tǒng)100%的消息流轉(zhuǎn),以2016年“雙十一”為例,RocketMQ完成了1.2萬(wàn)億消息精準(zhǔn)低延遲投遞,交易峰值高達(dá)17萬(wàn)筆/秒。
2017年“雙11”當(dāng)天的萬(wàn)億級(jí)數(shù)據(jù)洪峰下,做到了99.996%的毫秒級(jí)響應(yīng),每秒支撐千萬(wàn)級(jí)消息發(fā)布,每條消息發(fā)布平均響應(yīng)時(shí)間不超過(guò)3毫秒,最大不超過(guò)20毫秒,而核心交易鏈路平均延遲時(shí)間僅3ms,在全球Messaging領(lǐng)域做到了領(lǐng)先水平??梢哉f(shuō),RocketMQ在“雙11”期間,為阿里巴巴天貓、淘寶的正常運(yùn)轉(zhuǎn)提供了強(qiáng)有力的支撐。