IoT,物联网的协议交互,采用的是MQTT协议,因为交互信息小,所有MQTT涉及的也极其的精简,基本上的功能就是发布订阅主题和收发消息,不过还有着心跳和会话的机制
心跳机制来检测设备是否断线,会话机制则保存在了服务端,将复杂度转移到了服务端,简化客户端的实现
MQTT面临的场景,就是服务端的要支持海量的LoT设备同时在线,对于普通的消息队列集群,数量十分庞大
常见的消息队列可以变为MQTT Server,并不是很好的支持海量的设备,而且保存大量的数据也不是很好,对于如此多的客户端和主题也不是很好的支持
另外的MQTT Server,对于集群的支持并不好,集群做的好的,则是在收费版本中开放
但是我们可以考虑自己去设计一个MQTT Server
常见的消息队列集群,可以考虑如下的设计
从左往右,接入的地址可以是一个域名,或者是一个负责均衡器,负载均衡器可以是F5这样的负载均衡硬件,或者Nginx这样的软件,只要是支持MQTT协议即可
负责均衡器后面,是一个Proxy集群,承担了三个作用,负责和IOT的交互,维护客户端会话,将消息转发给Broker
或者直接砍掉Proxy,将Proxy和Broker的功能集成到一个进程中
前置Proxy可以解决海量的连接,因为Borker和Proxy进行通信,这样对于Broker来说,只需要连接一定数量的Proxy
但是Proxy的压力很高,还需要保存会话,每个Proxy都只维护连接到自己的客户端的会话.但是需要配合负载均衡使用,利用负载均衡将相同的连接转发给同一个Proxyjieidan
然后是对于海量主题的支持,我们可以再Proxy集群后面,部署多组Broker小集群,每个集群负责部分的主题,这样就可以将分散主题的压力