消息中间件能做什么
消息中間件主要解決的就是分布式系統(tǒng)之間消息傳遞的問(wèn)題,它能夠屏蔽各種平臺(tái)以及協(xié)議之間的特性,實(shí)現(xiàn)應(yīng)用程序之間的協(xié)同。舉個(gè)非常簡(jiǎn)單的例子,就拿一個(gè)電商平臺(tái)的注冊(cè)功能來(lái)簡(jiǎn)單分析下,用戶注冊(cè)這一個(gè)服務(wù),不單單只是insert一條數(shù)據(jù)到數(shù)據(jù)庫(kù)里面就完事了,還需要發(fā)送激活郵件、發(fā)送新人紅包或者積分、發(fā)送營(yíng)銷短信等一系列操作。假如說(shuō)這里面的每一個(gè)操作,都需要消耗1s,那么整個(gè)注冊(cè)過(guò)程就需要耗時(shí)4s才能響應(yīng)給用戶。
但是我們從注冊(cè)這個(gè)服務(wù)可以看到,每一個(gè)子操作都是相對(duì)獨(dú)立的,同時(shí),基于領(lǐng)域劃分以后,發(fā)送激活郵件、發(fā)送營(yíng)銷短信、贈(zèng)送積分及紅包都屬于不同的子域。所以我們可以對(duì)這些子操作進(jìn)行來(lái)實(shí)現(xiàn)異步化執(zhí)行,類似于多線程并行處理的概念。?
如何實(shí)現(xiàn)異步化呢?用多線程能實(shí)現(xiàn)嗎?多線程當(dāng)然可以實(shí)現(xiàn),只是,消息的持久化、消息的重發(fā)這些條件,多線程并不能滿足。所以需要借助一些開(kāi)源中間件來(lái)解決。而分布式消息隊(duì)列就是一個(gè)非常好的解決辦法,引入分布式消息隊(duì)列以后,架構(gòu)圖就變成這樣了(下圖是異步消息隊(duì)列的場(chǎng)景)。通過(guò)引入分布式隊(duì)列,就能夠大大提升程序的處理效率,并且還解決了各個(gè)模塊之間的耦合問(wèn)題
? 這個(gè)是分布式消息隊(duì)列的第一個(gè)解決場(chǎng)景【異步處理】
我們?cè)賮?lái)展開(kāi)一種場(chǎng)景,通過(guò)分布式消息隊(duì)列來(lái)實(shí)現(xiàn)流量整形,比如在電商平臺(tái)的秒殺場(chǎng)景下,流量會(huì)非常大。通過(guò)消息隊(duì)列的方式可以很好的緩解高流量的問(wèn)題
? 用戶提交過(guò)來(lái)的請(qǐng)求,先寫入到消息隊(duì)列。消息隊(duì)列是有長(zhǎng)度的,如果消息隊(duì)列長(zhǎng)度超過(guò)指定長(zhǎng)度,直接拋棄
? 秒殺的具體核心處理業(yè)務(wù),接收消息隊(duì)列中消息進(jìn)行處理,這里的消息處理能力取決于消費(fèi)端本身的吞吐量
當(dāng)然,消息中間件還有更多應(yīng)用場(chǎng)景,比如在弱一致性事務(wù)模型中,可以采用分布式消息隊(duì)列的實(shí)現(xiàn)最大能力通知方式來(lái)實(shí)現(xiàn)數(shù)據(jù)的最終一致性等等
?
總結(jié)
- 上一篇: 创建一个带副本机制的topic
- 下一篇: 关于Topic和Partition