Mqtt是基于Tcp的发布/订阅模型的轻量级传输协议,由于Apache Active MQ 可以作为消息传输的中间件,就决定使用AMQ作为broker,但由于业务的需求,需要同时与大量的客户端进行同时通信,就不得不使用分布式的组织架构,采用集群的方式加大服务的承载能立,提高可用性。
经过研究发现AMQ的部署方式由多种,但每一种方式都各有利弊。
1. 主备模式:
一台服务器做master,当master 挂掉时slave住自动接管master的任务,对外提供服务。Master-slave 之间是数据互通的,但却不能做到负载均衡,对外提供服务的只有mater,虽然做到了高可用,但不能做到负载均衡,并且并不能提高节点的承载能力。
2. 使用zookeeper+keepalive实现伪集群
Zookeeper是一个第三方的调度软件,2N+1个节点下才能对外提供正常的服务。在这种部署模式下,多台broker组成一个集群,数据在三个节点之间进行备份,当正在提供服务的broker挂掉时,zookeeper会自动的推选出一个master,等之前的master恢复时会自动被zookeeper接管,接受调度。虽然做到了高可用,但是却不能提供负载均衡功能。
3. 使用文件目录共享或数据库共享的模式进行的集群
虽然实现了集群,但是也只是高可用,也不能实现负载。尤其时使用jdbc时,其性能受制于数据库的性能,并且数据库也要做高可用主备,不推荐使用。
4. 使用静态集群方式
在配置时可以很好的完成负载均衡,但是数据只是存储在一台broker上,当这台broker挂掉时,其消息就不会被消费,只能等这台broker重启,并且超过三台时,由于两两要进行数据的传输,所以配置就相当的麻烦,不推荐使用。
5. 使用动态发现的方式进行集群
与静态集群的原理类似,但配置简单。
6. 使用zookeeper +keepalive+Activemq 进行集群
Zookeeper