RocketMQ 簡(jiǎn)介
Apache RocketMQ是一款A(yù)pache 開源的、分布式的高性能消息中間件和流數(shù)據(jù)處理平臺(tái)。RocketMQ的前身是MetaQ,當(dāng)時(shí)是阿里巴巴內(nèi)部的消息中間件經(jīng)過阿里巴巴“雙十一”的長(zhǎng)期磨煉,MetaQ經(jīng)受住了各種海量用戶、高并發(fā)場(chǎng)景的考驗(yàn)。在這個(gè)過程中修煉成了很多內(nèi)功,而這些內(nèi)功實(shí)際上是可以應(yīng)對(duì)不同業(yè)務(wù)場(chǎng)景的需求的。在阿里巴巴內(nèi)部經(jīng)過3個(gè)版本迭代后,把MetaQ進(jìn)化成了更為通用的RocketMQ。到了2017年,阿里巴巴決定把RocketMQ貢獻(xiàn)給了Apache,并成功“畢業(yè)”。成為Apache頂級(jí)開源項(xiàng)目之一,并一直到現(xiàn)在。
因?yàn)槠鋸?qiáng)大的特效,出色的性能表現(xiàn),在國(guó)內(nèi)有很多互聯(lián)網(wǎng)企業(yè)紛紛基于RocketMQ搭建自身的技術(shù)架構(gòu)。經(jīng)過多年的實(shí)踐,無(wú)論是千萬(wàn)DAU的大型互聯(lián)網(wǎng)應(yīng)用,還是業(yè)務(wù)復(fù)雜的金融應(yīng)用,都取得了許多成功的實(shí)踐經(jīng)驗(yàn)。時(shí)至今日,Apache RocketMQ已經(jīng)發(fā)展成為國(guó)內(nèi)首屈一指的消息中間件。
RocketMQ在GitHub上的社區(qū)也非常活躍,現(xiàn)在已經(jīng)有19萬(wàn)多的star和10萬(wàn)多的fork,足以可見其社區(qū)的成熟度。目前,Apache RocketMQ的最新版本是5.1,是一個(gè)基于云原生時(shí)代的全新版本。值得注意的是,因?yàn)楸緯珜憰r(shí)間的限制,所有的特性及原理更多是基于4.x的最新版本,也就是4.9的版本。4.x的版本也是業(yè)界中使用最廣泛,最為穩(wěn)定的版本。
RocketMQ發(fā)展史
縱觀整個(gè)Apache RocketMQ的發(fā)展歷史,最早可以追溯到2007年的阿里巴巴內(nèi)部的Notify項(xiàng)目。在經(jīng)過了十年的發(fā)展,在2017年正式成為Apache頂級(jí)項(xiàng)目,也是國(guó)內(nèi)首個(gè)互聯(lián)網(wǎng)中間件在Apache上的頂級(jí)項(xiàng)目。在經(jīng)過接近10年的發(fā)展后,互聯(lián)網(wǎng)場(chǎng)景下的消息應(yīng)用已經(jīng)被充分的實(shí)踐,而這個(gè)過程中,RocketMQ一直在經(jīng)受國(guó)內(nèi)互聯(lián)網(wǎng)高速發(fā)展而帶來(lái)的挑戰(zhàn),已經(jīng)被充分地驗(yàn)證過,是一款非??煽康南⒅虚g件。其發(fā)展的歷程如圖1總結(jié)所示:
為了支持阿里巴巴內(nèi)部適應(yīng)淘寶更為復(fù)雜的業(yè)務(wù),更為海量的使用場(chǎng)景,阿里巴巴啟動(dòng)了第一代的消息隊(duì)列服務(wù)研發(fā),名稱為Notify,這款消息中間件也是阿里巴巴第一次在消息中間件領(lǐng)域的嘗試,期間積累了很多國(guó)內(nèi)互聯(lián)網(wǎng)特有的使用場(chǎng)景的設(shè)計(jì)經(jīng)驗(yàn)。隨著阿里巴巴業(yè)務(wù)的急速發(fā)展,消息量極大地上升,阿里巴巴急需一款對(duì)于消息堆積有海量支撐能力的消息中間件。在這個(gè)背景下,阿里巴巴在充分研究過Kafka原理后,借鑒了其很多優(yōu)秀的設(shè)計(jì)經(jīng)驗(yàn),設(shè)計(jì)出了RocketMQ。
自此RocketMQ正式誕生。隨著RocketMQ在阿里巴巴內(nèi)部“雙十一”的優(yōu)異表現(xiàn),越來(lái)越多人開始研究并使用RocketMQ。在開源三年后,RocketMQ已經(jīng)在國(guó)內(nèi)小有名氣,終于在2016年,阿里巴巴決定貢獻(xiàn)給Apache。在通過社區(qū)的一系列修改、評(píng)審及一些代碼調(diào)整后,RocketMQ以4.0版本的新面目正式進(jìn)入Apache的孵化階段,并于2017年成功“畢業(yè)”,成為Apache的頂級(jí)項(xiàng)目,這是國(guó)內(nèi)首個(gè)互聯(lián)網(wǎng)中間件在Apache的頂級(jí)項(xiàng)目,也是繼ActivveMQ、Kafka后,Apache消息中間件家族的一員“猛將”。
為什么要選擇Apache RocketMQ
既然要做選型,就要了解對(duì)應(yīng)技術(shù)對(duì)象的重要特性和表現(xiàn)。相信到這里,讀者已經(jīng)知道了大型互聯(lián)網(wǎng)系統(tǒng)能從消息中間件中獲取最重要的三項(xiàng)收益,那么接下來(lái)將看看如果將這三個(gè)任務(wù)交由 Apche RocketMQ 來(lái)完成的話,它的表現(xiàn)如何。
1. RocketMQ處理削峰填谷的表現(xiàn)
一個(gè)消息中間件要能做到削峰填谷,需要對(duì)其性能有很高的要求,因?yàn)樗枰陨頁(yè)蔚米『榉宓牧髁?。否則,如果它的性能和業(yè)務(wù)應(yīng)用的性能表現(xiàn)差不多的話,開發(fā)人員何必引入中間件?RocketMQ 在性能上有很好的表現(xiàn),按照公開的壓測(cè)數(shù)據(jù),RocketMQ 能擁有媲美 Kafka 的性能發(fā)送表現(xiàn),并且在大量分區(qū)的場(chǎng)景下性能遠(yuǎn)超 Kafka。除了性能之外,削峰填谷還要求消息中間件有很好的堆積能力,因?yàn)樯a(chǎn)端的速率可能遠(yuǎn)超消費(fèi)端,如果消息持續(xù)的大量生產(chǎn),就有大量消息堆積的情況發(fā)生。RocketMQ 的消息堆積能力是無(wú)上限的,理論上其堆積的能力就是其磁盤可用的大小,且在消息大量堆積的場(chǎng)景中,在性能上維持很好的表現(xiàn)。
2. RocketMQ如何實(shí)現(xiàn)解耦
RocketMQ 使用的是 Topic+ 訂閱的模式作為其消息模型,所以消息是支持同時(shí)分發(fā)到不同的消費(fèi)者組的,這個(gè)模型對(duì)于消息解耦來(lái)說異常重要。它使得生產(chǎn)者可以完全不關(guān)心有誰(shuí)在訂閱消息,也不關(guān)心消費(fèi)者有幾個(gè),是否在線等,只需要關(guān)注消息生產(chǎn)即可。剩下的工作均由 RocketMQ 解決。同時(shí) RocketMQ 還支持廣播模式,對(duì)于需要把消息投遞到所有實(shí)例的場(chǎng)景,RocketMQ也能很好支持。
3. RocketMQ的最終一致性特性。
實(shí)際上,利用消息系統(tǒng)做最終一致性需要消息系統(tǒng)很多方面的努力。從特性上,RocketMQ 支持消息高可靠,消息的可靠投遞,甚至還支持事務(wù)性消息,這使得 RocketMQ 可以成為互聯(lián)網(wǎng)場(chǎng)景下做最終一致性的“屠龍寶刀”。從以上三點(diǎn)上看,RocketMQ對(duì)于這三大任務(wù)完成度都很高,是互聯(lián)網(wǎng)高并發(fā)場(chǎng)景下的“神器”。
4. 常見消息中間件特性對(duì)比
為方便大家做選項(xiàng)參考,表1從特性、性能、運(yùn)維的角度對(duì)比了主流消息中間件,供讀者參考。
表1.常見消息中間件特性對(duì)比
RocketMQ在“雙十一”的表現(xiàn)
作為最具有挑戰(zhàn)的消息應(yīng)用場(chǎng)景之一:“雙十一”,RocketMQ的表現(xiàn)極為優(yōu)異。公開的資料表示,RocketMQ在2016年的“雙十一”上已經(jīng)支撐了超過10000億的消息流轉(zhuǎn),其性能及穩(wěn)定性讓人矚目,如圖2所示。
現(xiàn)在的RocketMQ,已經(jīng)被國(guó)內(nèi)眾多互聯(lián)網(wǎng)公司廣泛地使用,除了阿里巴巴以外,RocketMQ還在微眾銀行、OPPO、VIVO、小米、VIPKID、螞蟻金服、滴滴等知名的互聯(lián)網(wǎng)公司實(shí)踐中,不斷地證明自己是一個(gè)能適應(yīng)于各種場(chǎng)景的、可靠的、高性能的消息中間件。以上內(nèi)容節(jié)選自《Apache RocketMQ 進(jìn)階之路》
推薦閱讀
本書以Apache RocketMQ 4.9.5(編寫本書時(shí)最新的4.x版本)為基礎(chǔ),從Apache RocketMQ 的實(shí)際使用、原理剖析,大規(guī)模消息集群下企業(yè)級(jí)落地的實(shí)踐以及所面臨的挑戰(zhàn),逐一由淺入深地進(jìn)行講解。
全書分3篇,共16章?;A(chǔ)篇包含第1~4章,主要講解Apache RocketMQ 入門以及如何掌握Apache RocketMQ 的基礎(chǔ)使用。原理篇包含第5~12章,主要講解了消費(fèi)原理、負(fù)載均衡原理、順序消息原理等核心的RocketMQ部分。進(jìn)階篇包含第13~16章,主要講解消息冪等、雙活設(shè)計(jì)等進(jìn)階為架構(gòu)師必須掌握的內(nèi)容。講解過程中拋棄了傳統(tǒng)的源碼解析這種較枯燥的手段,而是更多地利用以下方式幫助讀者更快、更輕松地接受Apache RocketMQ的原理:通過近百?gòu)堅(jiān)瓌?chuàng)的手繪圖,形象地描述Apache RocketMQ 的運(yùn)作過程、原理;通過與Kafka、RabbitMQ等成熟的消息中間件產(chǎn)品做對(duì)比的方式,有助于讀者對(duì)相關(guān)知識(shí)觸類旁通,舉一反三;每章都有思考題,以便于讀者總結(jié)思考所學(xué)內(nèi)容,進(jìn)行靈活運(yùn)用。
撰? 稿? 人:計(jì)旭
責(zé)任編輯:張淑謙
審? 核? 人:曹新宇