1. 程式人生 > >消息中間件(一)基礎

消息中間件(一)基礎

如果 fff 可能 可靠 多系統 表示 操作 str 數據一致性

消息中間件是用於分步式系統之間收發消息的組件。


消息中間件的作用

1. 應用解耦

2. 異步處理

比如用戶註冊場景,註冊主流程完成以後,需要調用郵件系統發送郵件通知用戶註冊成功,可能還需要調用其他系統。這是串行的,如果一個系統依賴很多系統,那麽這個主流程會比較長,耦合度高,整個系統維護成本也會越來越高。那麽我們就可以使用消息中間件來進行解耦,通過發布訂閱模式,完成用戶註冊之後,向中間件發送消息,這樣就可以馬上給用戶返回,至於後續工作其他系統向中間件訂閱這個消息並完成後續工作就好。這也就是一個解耦和異步處理過程。


中間件有下面兩種模型

點對點模型

技術分享圖片

發布訂閱模型

技術分享圖片


消息中間件的解耦和異步是兩個最重要的需求點,除此之外還應該做一些其他事情比如:

  • 保證一致性,產生消息和發送消息是一致的,也就是如果操作成功,那麽消息一定發送成功;如果業務操作沒有成功那麽就不能發送消息

  • 具備一定消息堆積能力,可以為後端擋住一些數據流保證後端不會被壓垮

  • 具備消息實時性,保證消息的低延遲

  • 具備消息的可靠性,主要是可靠地存儲和投遞


消息系統裏面應該有這樣一個假設:消息一定會堆積。下遊系統通常有很多,裏面有重要的也不重要的,面對突發流量高峰,一定會有後端系統處理不過來的情況,從而造成消息堆積;當然還有一種情況是後端系統出現問題導致暫時無法消費消息從而造成消息中間件的消息堆積。所以中間件要起到蓄水池的作用。


數據一致性,這個很容易理解,因為是分布式異步的,但是又不能容忍數據出錯,所以在性能和數據一致性方面就需要有所妥協,通常在互聯網行業中采取最終一致性。需要註意的是最終一致性和弱一致性不同,弱一致性表示允許在異常情況下數據可能不一致,而最終一致性則是在某段時間內允許不一致但是最終會一致。


消息中間件(一)基礎