首页 » OpenStack系统架构设计实战 » OpenStack系统架构设计实战全文在线阅读

《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 几种消息总线的性能测试