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