Apache RocketMQ在我司的最佳实践--智慧政务场景下的分布式消息与分布式事务
<本文已參與 RocketMQ Summit 優(yōu)秀案例征文活動(dòng),點(diǎn)此了解詳情>
緣起
對(duì)于Apache RocketMQ的了解,追溯起來(lái),可以說(shuō)是從開(kāi)源初始,就認(rèn)識(shí)到了它。那時(shí)候的它,還是個(gè)幼年,沒(méi)有成熟的社區(qū),也沒(méi)有好的機(jī)制去運(yùn)作。本身,也不算是成熟的產(chǎn)品。
但是,在阿里強(qiáng)大的技術(shù)背景驅(qū)動(dòng)下,隨著業(yè)務(wù)的支撐,它慢慢得到了長(zhǎng)遠(yuǎn)的發(fā)展,更多的走向了大眾的視野,也慢慢成為了一款優(yōu)秀的消息隊(duì)列中間件。
在技術(shù)選型中,可以作為一名佼佼者,為各個(gè)技術(shù)負(fù)責(zé)人提供技術(shù)支持。
緣與業(yè)務(wù)
對(duì)于我司傳統(tǒng)的業(yè)務(wù)場(chǎng)景以及相關(guān)產(chǎn)品中,一般不會(huì)涉及到消息中間件的涉及。很有幸,公司的發(fā)展以及壯大,新的產(chǎn)品、新的業(yè)務(wù)場(chǎng)景進(jìn)行了拓展。我司,也參與了智慧城市的相關(guān)業(yè)務(wù)場(chǎng)景建設(shè)。
很多的產(chǎn)品,屬于互聯(lián)網(wǎng)平臺(tái),因此,對(duì)于消息隊(duì)列中間件的需求,就隨之誕生,也就比較迫切。借助消息隊(duì)列其減少相應(yīng)所需的時(shí)間和削峰,降低系統(tǒng)耦合性的相關(guān)特性,構(gòu)建更加健壯的平臺(tái)產(chǎn)品。
實(shí)踐從業(yè)務(wù)中來(lái),到業(yè)務(wù)中去。本次分享便從一個(gè)企業(yè)服務(wù)平臺(tái)的建設(shè)才講述。
業(yè)務(wù)場(chǎng)景如下所示:
我司與政府大數(shù)據(jù)局,參與共建一個(gè)企業(yè)與企業(yè)、企業(yè)與政府之間互聯(lián)互通的、信息交互的一個(gè)新型互聯(lián)網(wǎng)平臺(tái)。平臺(tái)中,為企業(yè)提供了最便捷的溝通入口。
根據(jù)政府的需求,企業(yè)可以在線,實(shí)現(xiàn)政策申報(bào)、政策享受等一系列先進(jìn)的、優(yōu)秀的、便捷、快速的政府服務(wù)。同時(shí),企業(yè)在平臺(tái)中,跟其他企業(yè)可以實(shí)現(xiàn)在線服務(wù)申請(qǐng)、在線溝通。其中,平臺(tái)上企業(yè)個(gè)人中心中會(huì)有個(gè)模塊會(huì)消息中心。展示了,企業(yè)收到的來(lái)自各個(gè)方面的消息通知。
場(chǎng)景如下圖所示:
緣與技術(shù)
本身作為分布式消息業(yè)務(wù)需要,同時(shí)為了降低系統(tǒng)耦合性,選擇消息隊(duì)列中間件,來(lái)完成消息中心的建設(shè)。
技術(shù)選型
四種常用的分布式消息隊(duì)列開(kāi)源軟件:Kafka、ActiveMQ、RabbitMQ?及?RocketMQ。
在分布式消息隊(duì)列的江湖里,Kafka 憑借其優(yōu)秀的性能占據(jù)重要一席。
Kafka 作為流平臺(tái)具有以下三種能力:
Kafka 適用于兩類應(yīng)用:
目前,Kafka更多的用于數(shù)據(jù)量大的大數(shù)據(jù)平臺(tái)項(xiàng)目。
ActiveMQ 由 Apache 出品,據(jù)官網(wǎng)介紹,它是最流行和最強(qiáng)大的開(kāi)源消息總線。ActiveMQ 非常快速,支持多種語(yǔ)言的客戶端和協(xié)議,而且可以非常容易地嵌入到企業(yè)的應(yīng)用環(huán)境中,并有許多高級(jí)功能。
ActiveMQ 基于 Java 語(yǔ)言開(kāi)發(fā),從使用的便捷性與開(kāi)源程度,是可以承擔(dān)起更多的職責(zé)。但是,目前由于
因此,不適合更新迭代速度的互聯(lián)網(wǎng)平臺(tái)。
RabbitMQ 是流行的開(kāi)源消息隊(duì)列系統(tǒng),支持多種客戶端,如 Python、Ruby、.NET、Java、JMS、C、PHP、ActionScript、XMPP、STOMP 等,支持 AJAX、持久化。用于在分布式系統(tǒng)中存儲(chǔ)轉(zhuǎn)發(fā)消息,在易用性、擴(kuò)展性、高可用性等方面表現(xiàn)不俗。但是,目前由于
因此,綜合考慮沒(méi)有選擇。
RocketMQ 由阿里研發(fā)團(tuán)隊(duì)開(kāi)發(fā)的分布式隊(duì)列,側(cè)重于消息的順序投遞,具有高吞吐量、可靠性等特征。RocketMQ 與ActiveMQ一樣,用 Java 語(yǔ)言實(shí)現(xiàn),在設(shè)計(jì)時(shí)參考了 Kafka,并做出了自己的改進(jìn),在消息可靠性上比 Kafka 更好,RocketMQ 已經(jīng)被業(yè)界多個(gè)大型互聯(lián)網(wǎng)公司采用。
所謂實(shí)踐是檢驗(yàn)真理的唯一標(biāo)準(zhǔn),實(shí)際應(yīng)用中的表現(xiàn)比文字更具說(shuō)服力。在阿里內(nèi)部,RocketMQ 很好地服務(wù)了集團(tuán)大大小小上千個(gè)應(yīng)用,在每年的雙十一當(dāng)天,更有不可思議的萬(wàn)億級(jí)消息通過(guò) RocketMQ 流轉(zhuǎn)(在 2017 年的雙 11 當(dāng)天,整個(gè)阿里巴巴集團(tuán)通過(guò) RocketMQ 流轉(zhuǎn)的線上消息達(dá)到了萬(wàn)億級(jí),峰值 TPS 達(dá)到 5600 萬(wàn)),在阿里大中臺(tái)策略上發(fā)揮著舉足輕重的作用。
目前,社區(qū)活躍,開(kāi)源程度高,本身經(jīng)得起業(yè)務(wù)場(chǎng)景的考驗(yàn),因此最終選型為RocketMQ。
部署架構(gòu)
RocketMQ支持部署場(chǎng)景的自定義,同時(shí)支持高可用的部署方案。
對(duì)于當(dāng)前平臺(tái)的建設(shè),存在DMZ區(qū)、金宏網(wǎng)區(qū)網(wǎng)絡(luò)隔離環(huán)境。對(duì)于平臺(tái)的中間件部署存在一些復(fù)雜的網(wǎng)絡(luò)要求。
借用官網(wǎng)對(duì)于部署架構(gòu)的圖示:
對(duì)于我們?cè)趯?shí)踐中的部署,同樣采用了官方的部署實(shí)踐。采用了多Master、多Slave異步復(fù)制的方式,即使磁盤損壞,消息丟失得非常少,消息實(shí)時(shí)性不會(huì)受影響,因?yàn)?Master 宕機(jī)后,消費(fèi)者仍然可以從 Slave 消費(fèi),此過(guò)程對(duì)應(yīng)用透明,不需要人工干預(yù),性能同多 Master 模式幾乎一樣。
技術(shù)實(shí)現(xiàn)
對(duì)于RocketMQ的客戶端消費(fèi)者、服務(wù)端生產(chǎn)者來(lái)講,采用Springboot作為技術(shù)開(kāi)發(fā)框架,實(shí)現(xiàn)起來(lái)非常簡(jiǎn)單。
引入對(duì)應(yīng)的POM依賴
<dependency><groupId>org.apache.rocketmq</groupId><artifactId>rocketmq-spring-boot-starter</artifactId><version>2.0.3</version> </dependency>應(yīng)用配置文件修改
rocketmq:name-server: xxxx:9876producer:group: base_group_syncMsgsend-message-timeout: 5000retry-times-when-send-failed: 2max-message-size: 4194304對(duì)應(yīng)的添加相關(guān)注解、實(shí)現(xiàn)業(yè)務(wù)代碼即可。
使用方便,功能強(qiáng)大,對(duì)于開(kāi)發(fā)者來(lái)說(shuō)非常友好,是一個(gè)很好的選擇。
緣與分布式事務(wù)
寫到這里,同時(shí)也描述下,采用了微服務(wù)技術(shù)解決方案后,在很多場(chǎng)景下,會(huì)產(chǎn)生分布式事務(wù)。那么,除了自實(shí)現(xiàn),分布式事務(wù)框架,同時(shí),我們可以采用消息隊(duì)列來(lái)實(shí)現(xiàn)。
在本次實(shí)踐中,我們有過(guò)進(jìn)一步的實(shí)踐。在此,就不多說(shuō)。
緣與未來(lái)
實(shí)踐看來(lái),對(duì)于RocketMQ的落地過(guò)程中,雖有坎坷,但是達(dá)到了預(yù)想的效果。社區(qū)的文檔也是比較滿足實(shí)際落地需要,總體來(lái)說(shuō),是不錯(cuò)的。
在此,也希望社區(qū)越做越好吧,未來(lái)可期。
總結(jié)
以上是生活随笔為你收集整理的Apache RocketMQ在我司的最佳实践--智慧政务场景下的分布式消息与分布式事务的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
                            
                        - 上一篇: 面向工业场景,如何实现绿色智能?
 - 下一篇: 极验创始人吴渊:恶意流量威胁新趋势,洞察