go语言MQTT服务器(四)集群设计思考

go语言MQTT服务器(四)集群设计思考

以下是我自己的想法,本人学生一枚,思考的较浅,,如有什么错误或者遗落的,望多多指导一下,谢谢。

一、集群中客户端会话session处理
当一个客户端通过nginx负载后连接到broker1时,会产生一条session,保存会话信息(相应的主题与路由表改变,这里不先谈)。当客户端断线重连时,可能会连接到其它broker,如broker2,如果断线前的那个连接没有选择清理会话信息,那个broker1将会保留session一段时间,在客户端连接上来后会在集群中找寻是否存在该session,如果存在则复制到当前broker2中来,否则重新创建session。
二、节点发现服务器
通过一个专门的节点发现服务器,负责集群中各节点之间的发现。主要有一下几个功能:

  • 节点注册
  • 提供节点发现表
  • 路由表备份
  • 心跳维持

三、集群节点相互发现
节点启动首先和节点发现服务器连接,等待通知去获取节点发现表。
当获取到节点发现表后,初始化节点间的连接。

四、节点间主题同步
当节点1上有新的主题订阅或者取消订阅时,会通知其它节点包括发现服务器,更新主题路由表。
当节点宕机重启后,重新连接节点发现服务器,发现服务器会通知其它节点也建立与当前重启节点的连接,当前重启的节点会从节点发现服务器获取发现表初始化与其它节点间的连接,然后从发现服务器获取主题路由表,然后更新本地的路由表,完成重启的初始化。

五、节点间推送消息的同步
节点1上的客户端推送数据到主题topic/x上时,会根据主题路由表查找其它节点上是否有相关订阅,如果有则转发至其它节点上,消息到达其它节点后,由其自己完成转发到相应的客户端的工作。

猜你喜欢

转载自blog.csdn.net/qq_41257365/article/details/104747669