AMQP學習 & RabbitMQ 與 ActiveMQ、ZeroMQ以及Kafka的比較

以前寫了一篇文章關於Active以及消息隊列推拉模式的文章,能夠參考:linkhtml

 

關於 Active 與 RabbitMQ以及其餘的比較,有以下記錄:前端

 

這篇文章 link 提到:程序員

基本介紹
RabbitMQ:基於AMQP協議(Advanced Message Queue Protocol)
ActiveMQ:基於STOMP協議(注:我只知道是基於JMS)sql

 

注:更多AMQP的內容能夠看這裏:http://www.infoq.com/cn/articles/AMQP-RabbitMQ 編程

高級消息隊列協議(AMQP1)是一個異步消息傳遞所使用的應用層協議規範。做爲線路層協議,而不是API(例如JMS2),AMQP客戶端可以無視消息的來源任意發送和接受信息。後端

 

AMQP詳解:http://kb.cnblogs.com/page/73759/緩存

AMQP協議是一種二進制協議,提供客戶端應用與消息中間件之間異步、安全、高效地交互。從總體來看,AMQP協議可劃分爲三層: 安全

上面是對AMQP協議的大體說明。下面會以咱們對消息服務的需求來理解AMQP所提供的域模型。消息中間件的主要功能消息的路由(Routing)緩存(Buffering)。在AMQP中提供相似功能的兩種域模型:ExchangeMessage queue服務器

 

 

 

更具體的協議學習看這裏:http://www.cnblogs.com/charlesblc/p/6286875.html併發

 

 

rabbitMQ 是 AMQP 用 Erlang 實現的 MQ 。用 Erlang的緣由(Erlang消息機制與AMQP極度吻合):

AMQP 主要是由金融領域的軟件專家們貢獻的創意,而聯合了通信和軟件方面的力量,一塊兒打造出來的規範。
【Contributors: JPMorgan Chase Bank & Co., Cisco Systems, Inc., Credit Suisse, Envoy Technologies Inc.,iMatix Corporation,
IONA Technologies, Rabbit Technologies Ltd., Red Hat, Inc., TWIST Process Innovations Ltd, and 29West, Inc.】

粗略的從概念上來說 AMQP 首先知足的是金融系統的消息通信業務需求。
這是一個能夠和 JMS 進行類比的消息中間件開放規範,所不一樣的是 AMQP 同時定義了消息中間件的語意層面和協議層面
另一個不一樣是 AMQP 是語言中立的,而 JMS 僅和 Java 相關。

AMQP 在「語意層面的定義」,這就意味着,它並不只僅是象 JMS 或者其餘的 MQ 同樣,僅能按照預約義的方式工做,而是「可編程」的消息中間件
而「語言中立」則意味着只要遵循 AMQP 的協議,任何一種語言均可以開發消息組件乃至中間件自己。
好比說這樣的場景:「Java 寫的消息端(新的前端)經過 Erlang 寫的消息中間件(基礎設施)與 C 寫的另一個消息端(遺留系統)進行消息交互」。

AMQP 是一個開放標準,目前還在 0.9 版本。還沒有成熟,但市場上已經出現了不少這個標準的實現產品。

在 AMQP 所描繪的美好前景下,咱們能夠這麼設想未來構建在成熟以後構建在 AMQP 之上的金融系統。
前端程序員用他們熟悉的「工業語言」來構建系統中新的應用模塊。後端程序員則繼續用「老舊語言」在「遺產系統」上慢慢改進。
固然,金融系統須要他們賴以溝通消息互相調用的「基礎設施」必須堅若磐石,爲業界提供「高併發,易擴容」的產品,這彷佛正是 Erlang 的強項。

以前據說「 Erlang 進入金融系統」,具體的事例,大概就是這件事了。

更具體一點(不甚懂):

主要由於erlang有七大優點,便於開發消息系統:
1. 分佈式
    在erlang中,集羣是內嵌能力
 
2. 熱代碼升級
   
3. 內嵌進程監控
    在任何一個節點均可以監控真個系統
 
4. 可預測的高速度
    不會受到GC的停頓影響(FP的功勞)
 
5. 點對點
 
6. 企業級
 
7. 可移植

 

下面是一些指標比較(參考 link

第一部分:ActiveMQ,RabbitMQ,ZeroMQ的比較

一、 TPS比較 

ZeroMq 最好,RabbitMq 次之, ActiveMq 最差。

 

2. 持久化消息比較

zeroMq不支持activeMq和rabbitMq都支持

持久化消息主要是指MQ down或者MQ所在的服務器down了,消息不會丟失的機制。

 

3. 技術點:可靠性、靈活的路由、集羣、事務、高可用的隊列、消息排序、問題追蹤、可視化管理工具、插件系統、社區 

RabbitMq最好,ActiveMq次之,ZeroMq最差。

固然ZeroMq也能夠作到,不過本身必須手動寫代碼實現,代碼量不小。尤爲是可靠性中的:持久性、投遞確認、發佈者證明和高可用性

因此在可靠性和可用性上,RabbitMQ是首選,雖然ActiveMQ也具有,可是它性能不及RabbitMQ。

 

四、高併發

從實現語言來看,RabbitMQ最高,緣由是它的實現語言是天生具有高併發高可用的erlang語言。

 

第二部分:kafka和RabbitMQ的比較

一、  RabbitMq比kafka成熟,在可用性上,穩定性上,可靠性上,RabbitMq超過kafka

二、  Kafka設計的初衷就是處理日誌的,能夠看作是一個日誌系統,針對性很強,因此它並無具有一個成熟MQ應該具有的特性

三、  Kafka的性能(吞吐量、tps)比RabbitMq要強,這篇文章的做者認爲,二者在這方面沒有可比性。

 

另外,有這篇PPT講了Rabbit的一些優勢和選型的考慮:link 

PPT已下載,位置:/Users/baidu/Documents/Data/Interview/存儲-Nosql-Redis-消息隊列/我爲何要選擇RabbitMQ.pptx

 

(完)

相關文章
相關標籤/搜索