和所有基于Broker总线一样,qpid本身架构是联邦制的总线集群,这意味着,一份数据需要在多个broker之间互相备份。这个架构是AMQP定义的,本身并没有什么问题,因为AMQP是为交易而生的,对数据准确可靠的要求远远超过对性能的要求。
我们看到在很多公有云中,也经常使用AMQP的另外一个实现RabbitMQ。和qpid一样,这两者之间基本可视为等价,知识每个供应商有所偏好,但各项指标不会有太大差别。我比较倾向于使用qpid,就像我现在要改造qpid,就没有什么难度。而RabbitMQ是Erlang实现的,开发者比较少,想定制的难度还是比较大。
qpid是集群,中心模式的总线,利用他构建分布式总线是否可行,在判断这个解决方案之前,我们来一一讨论下分布式总线的几个关键要素。
1、分布式总线必须在各个节点上,有能够独立运行的总线实例。毫无疑问,qpid没有问题。
2、实例之间必须能够互相通讯,这一点qpid是有缺陷的。首先qpid是client和broker分离的,而broker和broker之间是通过AMQP定义的联邦协议构建集群。当节点数量不断增加时,集群的数据同步复制机制,在性能上显然就要拖后腿,因此在这个方向上,需要做改变。
3、提供一致性服务的协调器,这个不在AMQP的定义范围内,qpid显然也不具备。那么就必须额外引入这块。
4、消息队列。分布式架构并不必然要求消息队列,但作为总线而言,基本都要基于消息队列。而qpid本身就是AMQP的一个实现,因此消息队列,以及其复杂的管理功能都具备。
5、服务注册,寻址。这块qpid已经具备大部