讀古今文學網 > OpenStack系統架構設計實戰 > 8.3 OpenStack支持的消息總線類型 >

8.3 OpenStack支持的消息總線類型

(1)RabbitMQ

RabbitMQ是基於AMQP(高級消息隊列協議)的標準實現的一個消息中間件服務。RabbitMQ是目前流行的開源消息隊列系統,用Erlang語言開發,支持多種客戶端,如:Python、Ruby、.NET、Java、JMS、C、PHP、ActionScript、XMP、STOMP等,也支持AJAX。

RabbitMQ的一個優勢是支持消息的持久化,也就是將數據寫到磁盤上。為了數據安全考慮,大多數用戶都會選擇持久化。消息隊列持久化包括3個部分:

1)Exchange持久化,在聲明時指定durable=>1。

2)Queue持久化,在聲明時指定durable=>1。

3)消息持久化,在投遞時指定delivery_mode=>2(1是非持久化)。

如果Exchange和Queue都是持久化的,那麼它們之間的綁定也是持久化的。但如果Exchange和Queue兩者一個持久化,一個非持久化,就不允許建立綁定。

RabbitMQ也是OpenStack默認的消息總線類型。

(2)Qpid

Qpid是Apache基金會開發的一款面向對象的消息中間件,它也是基於AMQP協議實現的,可以和其他符合AMQP協議的系統進行通信。Qpid提供了C++、Python、Java、C#等主流編程語言的客戶端庫,安裝和使用非常方便。除了符合AMQP基本要求之外,Qpid提供了很多額外的HA特性,比如集群、負載均衡等,非常適合於集群環境下的消息通信。同時,Qpid也支持對消息的持久化存儲。

(3)ZeroMQ

ZeroMQ和上面的RabbitMQ及Qpid不同,它不是基於AMQP協議實現的,不是中間件類型的消息總線。ZeroMQ主要是為追求極致的高性能的需求而設計的,因此ZeroMQ放棄了消息服務器存儲轉發消息的模式,把側重點放到點對點傳輸消息的模式上。這樣的架構使ZeroMQ有著基於AMQP協議的中間件消息總線不能相比的低延遲和高性能。

ZeroMQ是一個輕量級消息內核。它可用於C、C++、Python、.NET、Mono、Fortran和Java語言。它運行在AIX、FreeBSD、HP-UX、Linux和MacOS下,OpenBSD系統,OpenVMS,QNX Neutrino,Solaris和Windows操作系統。

圖8-3是對幾種消息總線的性能測試結果的圖示。

圖8-3 幾種消息總線的性能測試