之前寫了一篇文章關於Active以及消息隊列推拉模式的文章,可以參考:link
關於 Active 與 RabbitMQ以及其他的比較,有如下記錄:
這篇文章 link 提到:
基本介紹
RabbitMQ:基於AMQP協議(Advanced Message Queue Protocol)
ActiveMQ:基於STOMP協議(注:我只知道是基於JMS)
注:更多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中提供類似功能的兩種域模型:Exchange 和 Message 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的比較
1、 TPS比較
ZeroMq 最好,RabbitMq 次之, ActiveMq 最差。
2. 持久化消息比較
zeroMq不支持,activeMq和rabbitMq都支持。
持久化消息主要是指:MQ down或者MQ所在的服務器down了,消息不會丟失的機制。
3. 技術點:可靠性、靈活的路由、集群、事務、高可用的隊列、消息排序、問題追蹤、可視化管理工具、插件系統、社區
RabbitMq最好,ActiveMq次之,ZeroMq最差。
當然ZeroMq也可以做到,不過自己必須手動寫代碼實現,代碼量不小。尤其是可靠性中的:持久性、投遞確認、發布者證實和高可用性。
所以在可靠性和可用性上,RabbitMQ是首選,雖然ActiveMQ也具備,但是它性能不及RabbitMQ。
4、高並發
從實現語言來看,RabbitMQ最高,原因是它的實現語言是天生具備高並發高可用的erlang語言。
第二部分:kafka和RabbitMQ的比較
1、 RabbitMq比kafka成熟,在可用性上,穩定性上,可靠性上,RabbitMq超過kafka
2、 Kafka設計的初衷就是處理日志的,可以看做是一個日志系統,針對性很強,所以它並沒有具備一個成熟MQ應該具備的特性
3、 Kafka的性能(吞吐量、tps)比RabbitMq要強,這篇文章的作者認為,兩者在這方面沒有可比性。
另外,有這篇PPT講了Rabbit的一些優點和選型的考慮:link
PPT已下載,位置:/Users/baidu/Documents/Data/Interview/存儲-Nosql-Redis-消息隊列/我為什么要選擇RabbitMQ.pptx
(完)