RocketMQ概念
- 1.概念
- 2.應用場景
- 3.MQ的優點和缺點
- 4.常見MQ對比
1.概念
MQ(Message Queue),是一種提供消息隊列服務的中間件,也稱為消息中間件,是一套提供了消息生產、存儲、消費全過程API的軟件系統。
RocketMQ是阿里巴巴2016年MQ中間件,使用Java語言開發,阿?巴巴向 Apache 軟件基?會捐贈RocketMQ,成為 Apache 孵化項?。
2.應用場景
1)應用解耦系統的耦合性越高,容錯性就越低。上游系統對下游系統的調用若為同步調用,則會大大降低系統的吞吐量與并發量,且系統耦合度太高。而異步調用則會解決這些問題。所以兩層之間若要實現由同步到異步的轉化,一般性做法就是,在這兩層間添加一個MQ層。
使用消息隊列解耦合,系統的耦合性就會提高了。比如物流系統發生故障,需要幾分鐘才能修復,在這段時間內,物流系統要處理的數據被緩存到消息隊列中,用戶的下單操作正常完成。當物流系統恢復后,補充處理存在消息隊列中的訂單消息即可,終端系統感知不到物流系統發生過幾分鐘故障。
2)流量削峰
應用系統如果遇到系統請求流量的瞬間猛增,有可能會將系統壓垮。
有了消息隊列可以將大量請求緩存起來,分散到很長一段時間處理,這樣可以大大提高系統的穩定性和用戶體驗。
一般情況,為了保證系統的穩定性,如果系統負載超過閾值,就會阻止用戶請求,這會影響用戶體驗。而如果使用消息隊列將請求暫存起來,后續按一定速率處理,會在一定程度提升體驗。
3)數據分發
通過消息隊列可以讓數據在多個系統之間進行流通。數據的產生方不需要關心誰來使用數據,只需要將數據發送到消息隊列,數據使用方直接在消息隊列中直接獲取數據即可。
3.MQ的優點和缺點
優點:解耦、削峰、數據分發
缺點:
- 系統可用性降低
系統引入的外部依賴越多,系統穩定性越差。一旦MQ宕機,就會對業務造成影響。如何保證MQ的高可用? - 系統復雜度提高
MQ的加入大大增加了系統的復雜度,以前系統間是同步的遠程調用,現在是通過MQ進行異步調用。
如何保證消息沒有被重復消費?怎么處理消息丟失情況?那么保證消息傳遞的順序性? - 一致性問題
A系統處理完業務,通過MQ給B、C、D三個系統發消息數據,如果B系統、C系統處理成功,D系統處理失敗。
如何保證消息數據處理的一致性?