深入理解阿里分散式訊息中介軟體

java填坑路發表於2018-07-20

什麼是分散式訊息中介軟體

什麼是分散式訊息中介軟體?

對於分散式訊息中介軟體,首先要了解兩個基礎的概念,即什麼是分散式系統,什麼又是中介軟體。

 

分散式系統:

“A distributed system is one in which components located at networked computers communicate and coordinate their actions only by passing messasges.”——《Distributed Systems Concepts and Design》

 

從上面這個解釋可以得到分散式系統的兩個特點:

元件分佈在網路計算機上

元件之間通過訊息來協調行動

中介軟體:

Middleware is computer software that provides services to software applications beyond those available from the operating system. It can be described as “software glue”. Middleware makes it easier for software developers to implement communication and input/output, so they can focus on the specific purpose of their application.——維基百科

 

中介軟體被描述為為應用程式提供作業系統所提供的服務之外的服務,簡化應用程式的通訊、輸入輸出的開發,使他們專注於自己的業務邏輯。

 

從維基百科上對中介軟體的解釋感覺有點繞,其實可以從“空間”的角度去理解中介軟體,即中介軟體是處於“中間層”的元件,是上層的應用程式和底層的服務之間的橋樑(比如DB中介軟體的上層是應用程式,底層是DB服務),也是應用與應用之間的橋樑(比如分散式服務元件)。

分散式訊息中介軟體:

“Message-oriented middleware (MOM) is software or hardware infrastructure supporting sending and receiving messages between distributed systems.”——維基百科

 

維基百科給出的訊息中介軟體的定義是支援在分散式系統中傳送和接受訊息的硬體或軟體基礎設施(對我們這裡討論的範圍來說肯定就是軟體了)。

 

那麼分散式訊息中介軟體其實就是指訊息中介軟體本身也是一個分散式系統。

為什麼要使用訊息中介軟體

訊息中介軟體就是可以省去繁瑣的步驟,直達目的,怎麼講呢,就是比如你想很多人,知道你的動態,而知道的人可能手機沒電,可能手機訊號不好,可能手機不在服務區,或者看的人比較忙,看的時間不固定,這樣的時候,你傳送的訊息怎麼會讓其看到呢,就是建立一個微信公眾號,可以滿足使用者隨時看到你想讓其看到的訊息,這就是中介軟體的一種應用方式,生活中老師講課的黑板,家中的電視機都是中介軟體的一種體現方式。

訊息中介軟體能做什麼?

任何中介軟體必然都是要去解決特定領域的某個問題,訊息中介軟體解決的就是分散式系統之間訊息傳遞的問題。訊息傳遞是分散式系統必然要面對的一個問題。

 假設一個電商交易的場景,使用者下單之後呼叫庫存系統減庫存,然後需要呼叫物流系統進行發貨,如果交易、庫存、物流是屬於一個系統的,那麼就是介面呼叫。但是隨著系統的發展,各個模組越來越龐大、業務邏輯越來越複雜,必然是要做服務化和業務拆分的。這個時候就需要考慮這些系統之間如何互動,第一反應就是RPC(Remote Procedure Call)。系統繼續發展,可能一筆交易後續需要呼叫幾十個介面來執行業務,比如還有風控系統、簡訊服務等等。這個時候就需要訊息中介軟體登場來解決問題了。

筆者認為,RPC和訊息中介軟體的場景的差異很大程度上在於就是“依賴”和“量”。比如簡訊通知服務並不是事交易環節必須的,並不影響下單流程,不是強依賴,所以交易系統不應該依賴簡訊服務。比如一些資料分析程式可能需要在拿到一天的總銷售量,這個就只需要銷售中心提供介面在需要時呼叫即可。

 訊息中介軟體出現以後對於交易場景可能是呼叫庫存中心等強依賴系統執行業務,之後釋出一條訊息(這條訊息儲存於訊息中介軟體中)。像是簡訊通知服務、資料統計服務等等都是依賴於訊息中介軟體去消費這條訊息來完成自己的業務邏輯。

 從以上的場景可以看出訊息中介軟體其實就是對系統進行了解耦,同時帶來了非同步化等好處。

 簡單概括一下訊息中介軟體的應用場景大致如下:

業務解耦:交易系統不需要知道簡訊通知服務的存在,只需要釋出訊息

削峰填谷:比如上游系統的吞吐能力高於下游系統,在流量洪峰時可能會沖垮下游系統,訊息中介軟體可以在峰值時堆積訊息,而在峰值過去後下游系統慢慢消費訊息解決流量洪峰的問題

事件驅動:系統與系統之間可以通過訊息傳遞的形式驅動業務,以流式的模型處理

分散式訊息中介軟體圖

一個抽象的對分散式訊息中介軟體的認知大概是這樣:

有一個SDK,提供給業務系統傳送、消費訊息的介面

有一批Server節點用於接受和儲存訊息,並在合適的時候傳送給下游的系統進行消費

常見訊息中介軟體對比

1、ActiveMQ

ActiveMQ是Apache出品,最流行的,能力強勁的開源訊息匯流排. ActiveMQ是一個完全支援JMS1.1和J2EE1.4規範的JMS Provider實現,儘管JMS規範出臺已經是很久的事情了,但是JMS在當今的J2EE應用中間仍然扮演著特殊的地位.

ActiveMQ特性

(1)多種語言和協議編寫客戶端.語言:Java,C,C++,C#,Ruby,Perl,Python,PHP.

(2)應用協議:OpenWire、Stomp REST,WS Notification,XMPP,AMQP

(3)完全支援JMS1.1和J2EE1.4規範(持久化,XA訊息,事務)

(4)虛擬主題、組合目的、映象佇列

2、RabbitMQ

RabbitMQ是一個開源的AMQP實現,伺服器端用Erlang語言編寫。用於在分散式系統中儲存轉發訊息,在易用性、擴充套件性、高可用性等方面表現不俗。

 RabbitMQ特性    

(1)支援多種客戶端,如:Python、Ruby、.NET、Java、JMS、C、PHP、ActionScript等

(2)AMQP的完整實現(vhost、Exchange、Binding、Routing Key 等)

(3)事務支援/釋出確認

(4)訊息持久化

3、Kafka

Kafka是一種高吞吐量的分散式釋出訂閱訊息系統,是一個分散式的、分割槽的、可靠的分散式日誌儲存服務。它通過一種獨一無二的設計提供了一個訊息系統的功能。(不是個嚴格的中介軟體,主要是用於日誌轉存的)

 Kafka特性:

(1)通過O(1)  的磁碟資料結構提供訊息的持久化,這種結構對於即使數以TB的訊息儲存也能夠保持長時間的穩定效能。

(2)高吞吐量:即使是非常普通的硬體Kafka也可以支援每秒數百萬的訊息。

(3)Partition、Consumer Group

歡迎工作一到五年的Java工程師朋友們加入Java架構開發:744677563

本群提供免費的學習指導 架構資料 以及免費的解答

不懂得問題都可以在本群提出來 之後還會有職業生涯規劃以及面試指導

訊息中介軟體綜合對比

 


相關文章