大数据技术栈MQTT协议:如何支持海量的在线IoT设备?( 三 )
前置 Proxy 的方式很容易解决海量连接的问题 , 由于 Proxy 是可以水平扩展的 , 只要用足够多数量的 Proxy 节点 , 就可以抗住海量客户端同时连接 。 每个 Proxy 和每个 Broker 只用一个连接通信就可以了 , 这样对于每个 Broker 来说 , 它的连接数量最多不会超过 Proxy 节点的数量 。
Proxy 对于会话的处理方式 , 可以借鉴 Tomcat 处理会话的方式 。 一种方式是 , 将会话保存在 Proxy 本地 , 每个 Proxy 节点都只维护连接到自己的这些客户端的会话 。 但是 , 这种方式需要配合负载均衡来使用 , 负载均衡设备需要支持 sticky session , 保证将相同会话的连接总是转发到同一个 Proxy 节点上 。 另一种方式是 , 将会话保存在一个外置的存储集群中 , 比如一个 Redis 集群或者 MySQL 集群 。 这样 Proxy 就可以设计成完全无状态的 , 对于负载均衡设备也没有特殊的要求 。 但这种方式要求外置存储集群具备存储千万级数据的能力 , 同时具有很好的性能 。
对于如何支持海量的主题 , 比较可行的解决方案是 , 在 Proxy 集群的后端 , 部署多组 Broker 小集群 , 比如说 , 可以是多组 Kafka 小集群 , 每个小集群只负责存储一部分主题 。 这样对于每个 Broker 小集群 , 主题的数量就可以控制在可接受的范围内 。 由于消息是通过 Proxy 来进行转发的 , 我们可以在 Proxy 中采用一些像一致性哈希等分片算法 , 根据主题名称找到对应的 Broker 小集群 。 这样就解决了支持海量主题的问题 。 总结
MQTT 是专门为物联网设备设计的一套标准的通信协议 。 这套协议在消息模型和功能上与普通的消息队列协议是差不多的 , 最大的区别在于应用场景不同 。 在物联网应用场景中 , IoT 设备性能差 , 网络连接不稳定 。 服务端面临的挑战主要是 , 需要支撑海量的客户端和主题 。
已有的开源的 MQTT 产品 , 对于协议的支持都不错 , 在客户端数量小于十万级别的情况下 , 可以选择 。 对于海量客户端的场景 , 服务端必须使用集群来支撑 , 可以选择收费的云服务和企业版产品 。 也可以选择自行来构建 MQTT 集群 。
自行构建集群 , 最关键的技术点就是 , 通过前置的 Proxy 集群来解决海量连接、会话管理和海量主题这三个问题 。 前置 Proxy 负责在 Broker 和客户端之间转发消息 , 通过这种方式 , 将海量客户端连接收敛为少量的 Proxy 与 Broker 之间的连接 , 解决了海量客户端连接数的问题 。 维护会话的实现原理 , 和 Tomcat 维护 HTTP 会话是一样的 。 对于海量主题 , 可以在后端部署多组 Broker 小集群 , 每个小集群分担一部分主题这样的方式来解决 。 思考题
课后请你针对我们这节课讲到的 Proxy , 做一个详细设计 , 不用写文档 , 只要画出如下三个 UML 图即可:
Proxy 的类图 (UML Class Diagram):粒度要包含到下面两个时序图用到的主要的类和方法;Proxy 收发消息的时序图 (UML Sequence Diagram):分别绘制出 Proxy 生产消息和消费消息这两个流程的时序图 。
欢迎你将绘制好的设计图上传到 GitHub 上 , 然后在评论区给出链接 。 在设计过程中 , 如果你有任何问题 , 也欢迎在评论区与我交流 。
感谢阅读 , 如果你觉得这篇文章对你有一些启发 , 也欢迎把它分享给你的朋友 。
推荐阅读
- |荷兰企业推出全新半导体技术,并承诺对华投资!中国光刻机获突破
- 辰宜科技|区块链技术与应用专题分享交流会
- 吴铭园|华为概念机设计图首次曝光,居然采用屏下摄像头技术
- 人群中国科学家通过古人基因组数据探寻中国文明源流
- 数码与拖拉机维修技术|经典性价比机型再升级:TS-453Dmini 2.5GbE NAS拆解体验
- |《5G技术助力国产机器人完成全球首场骨科实时远程手术》公示材料
- 联想|联想个人云存储Mac版上线 苹果电脑用户数据备份更便捷
- 兰州新闻网|创新驱动 情报先行——记兰州市科学技术情报研究所
- 最极客网|原创 中兴推5G视频手机,衰颓之后还能凭技术回归主流吗?
- 信息史上最全SpaceX火箭数据开源,核心、组员舱、起落架、发射信息全都有!
