阿里巴巴是个快乐的青年
分类: 高性能计算
2013-01-15 15:12:16
RabbitMQ通过插件(例如:STOMP)支持AMQP和其它协议,这些协议本身就支持分布式。有三种方式可以可以让RabbitMQ broker实现分布式,分别是Clustering、Federation和The Shovel,下面会介绍每种方式的作用。需要注意的是你不必只选择其中一种方式,而是可以根据需要选择其中一种或者几种方式的组合来达到自己分布式的目的。
一、
集群可以通过单逻辑broker的方式来连接多个机器。各机器间通过Erlang消息传递来通信,因此,集群内所有节点都必须有相同的Erlang cookie。集群内机器间的网络连接必须是可信的,且所有机器必须运行相同版本的Erlang和RabbitMQ。
虚拟机、交换机、用户和权限会自动镜像到集群内所有节点。队列可能位于单节点上,或者到多个节点上。客户端连接到集群内任何节点都能看到集群内所有队列。
你可以通过集群来实现高可用和增加吞吐量。
二、
Federation允许一个broker上的交换机接收发布到另一个broker(这个broker可能是单独的机器或者集群)上的交换机的消息。为了节点间能够通过AMQP(带上SSL选项)通信,组成federation的两个交换机之间必须授予适当的用户和权限。
组成federation的交换机之间通过单向点对点连接。缺省情况下,在federation连接上,消息仅仅被转发一次,但是这样可增加更多、更复杂的路由拓扑。
在federation连接上,有些消息可能不会被转发;如果一条消息到达federated交换机后不能被路由到某个队列,则它不会被转发。
你可以在Internet上通过federation连接各个broker来pub/sub消息。
三、
通过The Shovel来连接各个broker类似于Federation。然而,The Shovel工作在更低一层。
鉴于federation从一个交换机镜像消息到另一个交换机(如果必要可以确认消息是否被转发),The Shovel简单从一个broker的一个队列中消费消息,且转发该消息到另一个broker的交换机。
如果你想获得比federation更多的控制,你可以在Internet上使用The Shovel连接各个broker来发布消息。
通过以上分析,你会发现这三种方式之间有着一定的区别与联系,具体请看下表:
Federation / Shovel
Clustering
Brokers从逻辑上被分开,可能有不同的所有
单逻辑Brokers
Brokers可以运行不同版本的Erlang和RabbitM
节点必须运行相同版本的Erlang和RabbitMQ
Brokers之间可以通过不可信的WAN连接(SSL),必须要授予适当的用户和权限
Brokers必须通过可信的LAN连接,通过Erlang内部节点传递消息,但节点间需要有相同的Erlang Cookie
Brokers能以任何拓扑部署,连接可以是单向或双向的
所有节点都双向连接所有其它节点
从CAP中选择可用性和分区容忍即AP
选择一致性和可用性即CA
Broker中的有些交换机是federated,有些是本地的
要么全部Clustering,要么都不
客户端仅仅能看到它所连接的Broker上的队列
客户端连接到任何节点都能看到集群内所有节点的队列
表1 区别与联系
打完收工了,请期待下期的集群吧。。。调下口味。。。