摘要:?核心理念:計算和存儲分離。
近日,在Aliware Open Source?深圳站 - Apache Dubbo & Apache RocketMQ 開發(fā)者沙龍上,Apache RocketMQ 創(chuàng)始人,阿里巴巴中間件高級技術專家 馮嘉 向開發(fā)者們分享了Apache RocketMQ 的過去、現(xiàn)在和未來,以及對RocketMQ5.0的展望。本文是根據(jù)馮嘉的現(xiàn)場分享所整理,為大家回顧分享中的精彩內(nèi)容。
嘉賓介紹:馮嘉, Apache RocketMQ 創(chuàng)始人,Linux OpenMessaging 創(chuàng)始人,阿里巴巴 Messaging 技術負責人。
一、回顧過去 - RocketMQ的發(fā)展歷程
阿里巴巴最早是一個電商平臺,內(nèi)部有一套系統(tǒng),同時承載了會員、訂單、商品等應用,有上百人在維護,每天的提交和發(fā)布都非常復雜。為了更好的支撐快速發(fā)展的業(yè)務,阿里在2007年啟動了“五彩石”項目,通過橫向和縱向兩個維度將這一單體應用拆分出用戶中心,商品中心,交易中心,評價中心等平臺型應用,這時候系統(tǒng)和系統(tǒng)之間的交互就變得非常重要。通常,系統(tǒng)和系統(tǒng)之間有兩種交互方式,一種是同步方式,通過rpc來實現(xiàn),一種是異步,阿里的第一代消息引擎 Notify就是基于這個背景下產(chǎn)生的,用于淘寶B2C業(yè)務系統(tǒng)和系統(tǒng)之間的消息流轉。
緊接著在2010年,阿里B2B業(yè)務開始大規(guī)模使用 ActiveMQ,并打造了自己的消息引擎Napoli。但無論是Notify,還是Napoli,他們的存儲都是基于關系型數(shù)據(jù)庫,最大的隱患是容易在磁盤上造成堆積。
2011年,LinkedIn開源了自己的分布式消息引擎Kafka,Kafka擁有強大的日志處理和處理磁盤堆積的能力,隨后我們用Java重寫了Kafka的核心邏輯,并以MetaQ項目進行開源。但MetaQ在遇到淘寶海量數(shù)據(jù)交易場景時,出現(xiàn)了非常多的問題。為了解決這些問題,我們把MetaQ的存儲從原先的partition全量數(shù)據(jù)存儲模式優(yōu)化為目錄和數(shù)據(jù)文件分離的模式,這個版本我們命名為MetaQ2.0。但這種優(yōu)化不能從根本上解決我們在大規(guī)模數(shù)據(jù)下遇到的問題,比如在系統(tǒng)宕機和擴容方面出現(xiàn)的Rebalance問題,隨后我們決定去完全重寫MetaQ2.0,才有了第一代的RocketMQ,為了體現(xiàn)RocketMQ是源于MetaQ 2.0,我們將其命名為RocketMQ 3.0。
2016年,我們在阿里云上線了RocketMQ的商業(yè)化產(chǎn)品阿里云消息隊列MQ,幫助用戶方便快捷的獲得RocketMQ的消息發(fā)送和流數(shù)據(jù)處理能力。同年11月,我們將RocketMQ捐贈給Apache(版本升級為4.0),目的是希望更多的企業(yè)開發(fā)者加入到社區(qū)來共同發(fā)展RocketMQ。孵化期間,我們發(fā)現(xiàn)來自東南亞、包括美國的一些銀行開始使用RocketMQ在跑PoC,這讓我們感到非常欣慰。我們希望在未來,能夠?qū)ocketMQ建設成可以比肩Hadoop那樣的生態(tài)。
2017年,不到10個月的時間里,RocketMQ 從 Apache 畢業(yè),成為Apache下的頂級項目,和 Hadoop 同規(guī)格?;赗ocketMQ在各類場景下的豐富實踐,我們將互聯(lián)網(wǎng)業(yè)務對消息的需求進行抽象,形成了一套能滿足大多數(shù)業(yè)務場景的標準模型,逐步發(fā)展成與廠商無關、平臺無關的分布式消息及流處理領域的應用開發(fā)標準– OpenMessaging,并與10月進入Linux基金會。進入到2018年,團隊和社區(qū)開始著手思考和構建下一代消息引擎– Apache RocketMQ 5.0,并大力發(fā)展Messaging生態(tài),也希望這方面的專家能夠加入我們,加入社區(qū),一起打造OpenMessaging領域新標準。
二、如何深度參與社區(qū)共建
1、我們需要更多的社區(qū)角色:
通常社區(qū)會有PMC member、committer、contributor和user這些角色,但一些優(yōu)秀的國際社區(qū)有更多的生態(tài)角色,例如專欄作家,以一個Editor的身份,把開發(fā)和使用過程中的經(jīng)驗以文字的形式分享出來,發(fā)表在自己的社交賬號或者社區(qū)官網(wǎng)的blog上,幫助其他開發(fā)者更好的使用開源產(chǎn)品,這對社區(qū)的建設是非常有幫助的。除此之外,Evangelist(布道師),Release Manager,Consultant包括各類會議的Speaker也是非常重要的社區(qū)角色。
從去年開始,我們在北京、深圳開展了線下的Meetup活動,豐富社區(qū)的交流方式,如果你有特別好的消息實踐,歡迎到我們的Meetup上來進行分享。另外,我們也會更多的聆聽來自用戶的聲音,如果大家所在的公司在大規(guī)模使用RocketMQ中遇到了問題,也歡迎找我們交流。我們也在計劃進行一些更聚焦的workshop,走進企業(yè)。希望大家一起來共建Messaging生態(tài),探討領域發(fā)展方向。當然,如果你有想法寫一本關于Messaging或者RocketMQ方面的書籍,也歡迎聯(lián)系我們。
2、社區(qū)參與第一步 - 建立溝通渠道:
對于年輕的開發(fā)者和開源使用者,首先需要了解在遇到使用難題或問題的時候,如何向項目成員尋求幫助。在社區(qū)中,我們幾乎不使用微信、QQ等溝通方式,而遵循國外尤其是 Apache 提倡的郵件列表溝通方式,而對待Bug或者新需求,我們通常鼓勵 issue 提交、甚至是 PR(Patch) 提交。當然,接下來會有一些新變化,為了讓大家更好的參與進來,我們計劃起草 RIP(RocketMQ Improvement Proposals),這一標準實踐很快會正式和大家見面。
3、了解 How to Contribute
我們在社區(qū)的文檔界面上線了一頁“How to Contribute”的頁面,頁面詳細描述了開發(fā)者如何深度參與到社區(qū)中。除了在社區(qū)提交問題之外,開發(fā)者們還可以通過上報疑似錯誤報告、提交改進或新功能的需求的方式深度參與到社區(qū)共建,例如我們在限流方面做的還不夠精細,開發(fā)者可以起草一個改進,參與到社區(qū)的討論中,邀請社區(qū)的PMC member、committer來review自己的PR。
4、提交issue,在issue頁面發(fā)表評論
我們非常歡迎用戶和開發(fā)者在使用 RocketMQ 的過程中,將你遇到的使用問題或是改善建議發(fā)布到 issue 頁面,并對參與到已經(jīng)發(fā)布的 issue 的改善討論中。
5、貢獻代碼
開源項目的持續(xù)發(fā)展一定離不開開發(fā)者對項目的共同維護和改善,我們鼓勵任何人貢獻代碼。為了確保貢獻者和審閱者的愉快貢獻體驗并保持高質(zhì)量的代碼庫,需要遵循我們在 Contribute 中描述的貢獻過程。
6、參與到RocketMQ 社區(qū)項目中
我們在Apache上創(chuàng)建了一個倉庫repository,名稱是rocketmq-externals,把社區(qū)中已有的大規(guī)模場景的應用,或者我們認為比較好玩的項目都放到了這里。開發(fā)者可以選擇你們擅長的項目,無論是適配RocketMQ的客戶端,例如Go語言SDK,還是運行RocketMQ的Docker容器包括K8s Operator,或是 RocketMQ 上下游生態(tài)集成,開發(fā)者都可以提交你的代碼,對項目進行改進與完善。
7、更多參與方式 - 代碼不是為參與社區(qū)共建的唯一方式
我們非常重視文檔的建設,這是提高社區(qū)開發(fā)者效率非常重要的方式,提供簡明,精確和完整的文檔,并歡迎任何有助于改進Apache RocketMQ文檔的貢獻。
三、展望未來 - RocketMQ5.0
RocketMQ5.0 將基于云原生的理念,圍繞可運維、可監(jiān)控、彈性、可恢復、敏捷 5 個維度來打造下一代分布式消息計算平臺,全面提升RocketMQ的功能、性能、生態(tài)效能和場景應對能力。計算方面,我們將基于存儲和計算分離的理念,打造一個精簡的計算節(jié)點群,更貼近地面或邊緣設備的高效解決數(shù)據(jù)量不斷增大、訪問端點不斷增多,但計算能力有限的需求場景。存儲方面,我們將更加精細化的控制內(nèi)存配置和回收,利用SPDK發(fā)揮在SSD新標準NVMe下的優(yōu)勢,兼容各類硬件設備,達到微秒級的端到端時延。同時,團隊也在積極尋求和全球高校合作,探索更前沿的技術實現(xiàn)以及應用場景,努力挖掘用戶的癢點,解決客戶的痛點,創(chuàng)造產(chǎn)品的爽點。
? 提升周邊集成能力
RocketMQ5.0將基于 OpenMessaging 標準向上和向下拓展,提升生態(tài)效能。在聯(lián)機分析處理領域,對接Prometheus、ELK包括業(yè)務數(shù)據(jù),將來自上游的數(shù)據(jù)形態(tài)Metrics、Logs、Streams傳輸?shù)较掠蔚母黝悢?shù)據(jù)分析應用上。在金融、游戲和電商領域,RocketMQ5.0 將進一步優(yōu)化打磨內(nèi)核,提供更高的穩(wěn)定性與可用性。同時,借助 OpenMessaging 提供更多語言的接入能力,包括 Infrastructure Native 的能力。在一些新興領域,如IoT場景中,基于計算和存儲分離的理念,借助物聯(lián)網(wǎng)中無處不在的“物”來分擔計算,從而解決Java在單機上支持海量設備的連接在線的不足的問題,將上游的數(shù)據(jù)高效寫入下游的TP或者AP系統(tǒng)中。
? 拓展場景能力
優(yōu)秀的產(chǎn)品和強大的技術都需要通過解決實際場景的業(yè)務問題來詮釋自身的價值,RocketMQ5.0將在以下4個場景中進一步提升應對能力。在電子商務領域保證整個傳輸鏈上的消息不丟,提高交易數(shù)據(jù)的完整性;在金融領域,支持分布式事務下的多端調(diào)用,保證關鍵數(shù)據(jù)的一致性;在大數(shù)據(jù)領域,具備更強的天然的streaming能力,解決端到端的延遲,優(yōu)化用戶端體驗;在IoT領域,支持海量設備同時在線和海量topic消息隊列,保障雙向通信。
最后,和大家預告一下,接下來我們還會繼續(xù)在北京,上海,成都舉辦技術沙龍,歡迎大家報名參加,也歡迎領域?qū)<覀兒臀覀児餐e辦小范圍的workshop,豐富社區(qū)的交流方式。產(chǎn)品方面,可以提前透漏給大家的是,社區(qū)目前研發(fā)的多語言SDKs馬上就要對外開放,我們也在研發(fā)IoT套件,這塊的Proposal很快也會和大家見面,歡迎大家參與進來,共建RocketMQ生態(tài)。
本文為云棲社區(qū)原創(chuàng)內(nèi)容,未經(jīng)允許不得轉載。
評論