Apache Qpid:一個AMQP的開源實現

通信是一個基本的需求,正如人與人之間需要交流一樣,比較大型的軟件系統也往往需要內部或者外部通信。

在系統間通信最基礎的通信方式是 socket,但 socket 比較底層。使用起來非常不易。如果需要一些高級特性,需要很多的編程負擔。

與 socket 的原始對應,企業級的應用軟件往往有着各種各樣從簡單到複雜的通信需求,表現爲不同的通信模型。常見的有:

  • 點對點:A 發消息給 B。
  • 廣播:A 發給所有其他人的消息
  • 組播:A 發給多個但不是所有其他人的消息。
  • Requester/response:類似訪問網頁的通信方式,客戶端發請求並等待,服務端回覆該請求
  • Pub-sub:類似雜誌發行,出版雜誌的人並不知道誰在看這本雜誌,訂閱的人並不關心誰在發表這本雜誌。出版的人只管將信息發佈出去,訂閱的人也只在需要的時候收到該信息。
  • Store-and-forward:存儲轉發模型類似信件投遞,寫信的人將消息寫給某人,但在將信件發出的時候,收信的人並不一定在家等待,也並不知道有消息給他。但這個消息不會丟失,會放在收信者的信箱中。這種模型允許信息的異步交換。
  • 其他通信模型。。。

除了各類不同的通信模型之外,系統間的通信還有其他一些需要考慮的問題。比如企業級應用往往有巨量的數據需要交換,對可靠性的要求也比較高。 比如一個分佈式的財務處理軟件,每時每刻都有成千上萬的用戶在使用,需要產生難以想象的海量消息,每個消息可能都關乎某人的銀行賬戶等關鍵信息,如果丟失 將帶來巨大損失。編寫這樣一個通信中間件不是一件容易的事情,即使編寫出來,假如需要和其他的軟件系統交互信息,又需要大量的格式轉換,接口遷移等工作。

爲了解決以上這些問題,人們開發出了很多的軟件產品和協議。從早期的 RPC,到複雜的面向消息的中間件 (MOM),再到 JMS,人們取得了很多的進步,但是這些技術還是存在各自的問題。

RPC,Corba 等技術是同步的,即調用者必須等待對方的回覆,這意味着調用者必須瞭解接收者,是一種緊耦合的模型。緊耦合意味着不靈活,而在軟件行業唯一不變的就是變化,當需求和環境發生變化時,緊耦合的應用修改代價非常高。

爲此衆多的消息中間件產品應運而生,打破了消息生產者和消費者之間的緊耦合關係。但中間件產品是由各個廠商自行定義和實現的,在整合企業級應用的時候,人們發現各種應用往往採用了不同的技術和中間件產品,要想讓這些產品互通消息,又是一件非常困難的事情。

JMS 是標準化的一種努力,但其缺點在於 JMS 是 J2EE 的標準,假如不是採用 Java 技術實現的產品,想使用 JMS 還是比較麻煩的。

因此即便到了今天人們還是希望有一款功能強大,平臺 / 語言無關,標準化的面向消息的中間件產品。

假如這正是您時時刻刻所想的問題,那麼 Qpid 便是您值得了解的一款開源軟件。它實現了可靠複雜的通信中間件,支持多種通信模型,效率高,平臺語言無關,而且實現了業界的通信標準 AMQP。

AMQP 是 Advanced Message Queuing Protocol,即高級消息隊列協議。和前面羅列的技術不同,AMQP 是一個標準化的消息中間件協議。她的理想是讓不同語言,不同系統的應用互相通信,並提供一個簡單統一的模型和編程接口。這樣,人們就可以採用各種語言和平 臺來實現自己的應用,當需要和其他系統通信時,只要承認 AMQP 協議即可。

舉個不太自然的例子吧。。。

世界各地的人們由於地理和歷史的原因,使用着各種不同的語言,相互交流十分不易。AMQP 類似一架自動翻譯機,當我用中文對它說了什麼之後,假如一個英語世界的人想聽的話,可以聽到 英文版的 精確的一字不差的翻譯。

此外這個翻譯機還提供其他很多好處,比如中國和美國有 12 小時的時差,假如我現在希望和某個美國人通話,他必須半夜爬起來,或者我必須等到他起牀,但通過這臺機器,我說完就行了,那個美國人起牀後就會聽到的。我很放心,這句話絕不會丟掉,也絕不會走樣;

我其實可以不關心有多少人來聽,假如有更多的人都想聽,那麼他們也可以隨時聽到。

假如我只想讓部分人聽到,還可以加密認證;

假如有些人不想聽,有些人想聽,那麼這臺翻譯機也能知道誰想聽,而不會將我的聲音發給不想聽到的人。

這種交流方式和體驗,作爲一個人類我還不曾享受過,但是 AMQP 已經爲 衆多的計算機軟件提供了這種服務。

AMQP 來自 JPMorgon,最初只是這個財大氣粗的投行內部使用的消息中間件。發起人 John O'Hara 很有氣魄,他說“從 1996 年開始到 2003 我一直在等這樣一個標準,但始終沒有等到,我已經等不下去了”,並且“投行對這類標準的需求最迫切,而銀行又從來不缺乏技術專家” ,所以他自己開發了一個。我想一個人如果想成就什麼事,就需要這樣的英雄氣概吧。

因爲他的努力,AMQP 從金融界迅速推廣到整個計算機行業,參與者包括了很多 IT 巨頭。雖然今天 AMQP 依舊是一個草案,但值得我們拭目以待。

AMQP的架構示意:

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