分布式--消息中间件
1.什么是消息中間件
? ? ? ?消息中間件是指:利用高效可靠的消息傳遞機制進行與平臺無關(guān)的數(shù)據(jù)交流,并基于數(shù)據(jù)通信來進行分布式系統(tǒng)的集成。通過提供消息傳遞和消息排隊模型,可以在分布式架構(gòu)下擴展進程之間的通信。
2.消息中間件能做什么
? ? ? ?消息中間件主要解決的就是分布式系統(tǒng)之間消息傳遞的問題,它能夠屏蔽各種平臺以及協(xié)議之間的特性,實現(xiàn)應(yīng)用程序之間的協(xié)同。
? ? ? ?使用消息中間件,主要有如下兩個特點:①異步化? ?②解耦。我們可以從如下兩個實例來入手,具體了解消息中間件在項目中的具體使用場景。
場景一:電商平臺用戶注冊功能
? ? ? ?用戶注冊這一服務(wù),并不單單只是向數(shù)據(jù)庫中insert一條數(shù)據(jù)即可,有些時候比如我們使用郵箱來注冊,還需要發(fā)送激活郵件等操作。新用戶還有可能會給你發(fā)送新人紅包、發(fā)送短信等來提示你注冊成功等等操作。
? ? ? ?我們從上圖這個注冊服務(wù)可以看到,信息入庫、發(fā)送激活短信...等每一個操作都是獨立的。同時,基于領(lǐng)域劃分(請參考:領(lǐng)域驅(qū)動設(shè)(DDD))以后,發(fā)送郵件短信、發(fā)送新人紅包、發(fā)送注冊成功短信等都屬于不同的子域。所以我們可以對這些子模塊來異步化執(zhí)行,類似于多線程并行處理的概念。
? ? ? ?如何實現(xiàn)異步化呢?多線程當然可以實現(xiàn),只是消息的持久化、消息的重發(fā)這些條件,多線程并不能滿足。所以需要借助一些開源中間件來解決。而分布式消息隊列就是一個非常好的解決辦法,引入分布式消息隊列以后,架構(gòu)圖就變成這樣了(下圖是異步消息隊列的場景)。通過引入分布式隊列,就能夠大大提升程序的處理效率,并且還解決了各個模塊之間的耦合問題。
? ? ?? 具體步驟為:用戶注冊成功后,發(fā)送一條信息到消息中間件,其他的幾個子域如果有需要的話,只需要訂閱/關(guān)注該消息中間件,就能夠?qū)崿F(xiàn)異步化操作了。這就是分布式消息隊列異步化 && 解耦 的一個場景。
? ? ? 注冊接口并不依賴其他三個子域的操作的結(jié)果。成功或失敗,與主流程是沒有任何影響的。做解耦,只需要在當前功能關(guān)心核心領(lǐng)域即可,不需要關(guān)心其他子域,只需要保證其他子域的正確性即可。
? ? ? ?假如說這里面每一部操作都需要消耗1s,按照基礎(chǔ)一個Conntroller開發(fā),將這4步都寫在一個Controller中,整個注冊過程就需要消耗4s才能響應(yīng)給客戶。使用消息中間件之后,則整個過程只需要消耗1s多,便能夠響應(yīng)給客戶,明顯縮短了響應(yīng)時間,這就是異步化所帶來的好處。
場景二:流量削峰(秒殺、搶購情景)
? ? ? ?比如在電商平臺的秒殺場景下,流量會非常大。通過消息隊列的方式可以很好的緩解高流量的問題,異步的消息隊列,可以通過排隊的機制,來很好的解決這一問題。
? ? ? 具體步驟如下:①用戶提交過來的請求,先寫入到消息隊列。消息隊列是有長度的,如果消息隊列長度超過指定長度,直接拋棄;?②秒殺的具體核心處理業(yè)務(wù),接收消息隊列中消息,并進行下一步處理。
其他場景使用:??
? ? ? ?消息中間件還有更多應(yīng)用場景,比如在弱一致性事務(wù)模型中,可以采用分布式消息隊列的實現(xiàn)最大能力通知方式來實現(xiàn)數(shù)據(jù)的最終一致性等等?
3.常用的消息中間件有哪些
①ActiveMQ
? ? ? ?ActiveMQ 是Apache出品,最流行的,能力強的開源消息總線。ActiveMQ 是一個完全支持JMS1.1和J2EE 1.4規(guī)范的 JMS Provider實現(xiàn)。官網(wǎng):https://activemq.apache.org/
②RabbitMQ
? ? ? ? AMQP協(xié)議的領(lǐng)導實現(xiàn),支持多種場景。淘寶的MySQL集群內(nèi)部有使用它進行通訊,OpenStack開源云平臺的通信組件,最先在金融行業(yè)得到運用。官網(wǎng):http://www.rabbitmq.com/
③ZeroMQ
? ? ? ? 史上最快的消息隊列系統(tǒng),這屬于是一個類庫,直接使用能不快嗎。官網(wǎng):https://zeromq.org/
④Kafka
? ? ? ?Apache下的一個子項目 。特點:高吞吐,在一臺普通的服務(wù)器上即可以達到10w/s的吞吐速率;完全的分布式系統(tǒng)。適合處理海量數(shù)據(jù)。官網(wǎng):http://kafka.apache.org/
⑤RocketMQ
? ? ? ? RocketMQ是阿里開源的消息中間件,目前已經(jīng)捐獻給Apache基金會。它是由Java語言開發(fā)的,具備高吞吐量、高可用性、適合大規(guī)模分布式系統(tǒng)應(yīng)用等特點,經(jīng)歷過雙11的洗禮,實力不容小覷。官網(wǎng):http://rocketmq.apache.org/
其他一些消息中間件,使用也不是很多,這里就不再過多羅列了
END
總結(jié)
以上是生活随笔為你收集整理的分布式--消息中间件的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 超详细教程-Django使用邮箱发送验证
- 下一篇: ubuntu 连接 iTouch