RocketMQ:消息中間件簡介

1. 什麼是消息中間件

(1)什麼是消息?

消息是指:在應用程序之間傳遞的數據。消息可以非常簡單,比如只包含文本字符串、JSON等;但也可以很複雜,比如一個對象。

(2)什麼是消息中間件?

消息中間件是指:利用高效可靠的消息傳遞機制進行與平臺無關的數據(我們說消息就是數據,所以這裏也就是消息)交流,並基於數據通信來進行分佈式系統的集成。

2. 消息中間件的優缺點

2.1 優點

(1)應用解耦

系統的耦合性越高,容錯性就越低。以電商應用爲例,用戶創建訂單後,如果耦合調用庫存系統、物流系統、支付系統,任何一個子系統出了故障或者因爲升級等原因暫時不可用,都會造成下單操作異常,影響用戶使用體驗。

在這裏插入圖片描述

使用消息中間件解耦合,系統的耦合性就提高了。比如物流系統發生故障,需要幾分鐘才能來修復,在這段時間內,物流系統要處理的數據被緩存到消息中間件中,用戶的下單操作正常完成。當物流系統恢復後,補充處理存在消息中間件中的訂單消息即可,終端系統感知不到物流系統發生過幾分鐘故障。

在這裏插入圖片描述

(2)流量削峯

在這裏插入圖片描述

應用系統如果遇到系統請求流量的瞬間猛增,有可能會將系統壓垮。有了消息中間件可以將大量請求緩存起來,分散到很長一段時間處理,這樣可以大大提到系統的穩定性和用戶體驗。

在這裏插入圖片描述

一般情況,爲了保證系統的穩定性,如果系統負載超過閾值,就會阻止用戶請求,這會影響用戶體驗,而如果使用消息中間件將請求緩存起來,等待系統處理完畢後通知用戶下單完畢,這樣比不能下單體驗要好。

(3)異步通信

在這裏插入圖片描述

通過消息中間件可以讓數據在多個系統更加之間進行流通。數據的產生方不需要關心誰來使用數據,只需要將數據發送到消息中間件,數據使用方直接從消息中間件中獲取數據即可。

在這裏插入圖片描述

2.2 缺點

(1)系統可用性降低

系統引入的外部依賴越多,穩定性越差。一旦MQ宕機,就會對業務造成影響。這就帶來一個問題:我們如何保證MQ的高可用?(解決方案:搭建MQ集羣)

(2)系統複雜度提高

MQ的加入雖然降低了應用程序之間的耦合性,但也大大增加了系統的複雜度,以前系統間是同步的遠程調用,現在是通過MQ進行異步調用。同樣的,這裏會帶來幾個問題:如何保證消息沒有被重複消費?(解決方案:冪等校驗)怎麼保證消息不丟失?(解決方案:消息中間件接收到消息需要給生產者ack回覆;消息中間件需要進行消息持久化;消費者手動進行ack)如何保證消息的順序性?(解決方案:只能保證在同一隊列的消息有序性)

(3)一致性問題

使用事務消息或者配合本地消息表實現最終一致。

3. 各個MQ產品的比較

現在市場上常見的MQ產品主要包括:ActiveMQ、RabbitMQ、RocketMQ、kafka。每個產品都有自己的優缺點以及使用場景,部分特性的比較如下:

特性 ActiveMQ RabbitMQ RocketMQ kafka
開發語言 java erlang java scala
單機吞吐量 萬級 萬級 十萬級 十萬級
時效性 ms級 us級 ms級 ms級
可用性 高(主從架構) 高(主從架構) 非常高(分佈式架構) 非常高(分佈式架構)
功能特性 成熟的產品,在很多公司得到應用;有較多的文檔;支持各種協議。 基於erlang開發,併發能力很強,性能極其好,延時較低;有非常完善和豐富的管理界面。 MQ功能比較完善,擴展性好。 適用於大數據領域應用。
——End——
更多精彩分享,可掃碼關注微信公衆號哦。

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章