iot - 集群中的 ThingsBoard 服务器如何相互通信?
问题描述
目前,我正在对 Thingsboard IOT 平台进行一些研发。我打算以集群模式部署它。
部署时,两个 Thingsboard 服务器如何相互通信?
我想到了这个问题,因为特定设备可以向一个 Thingsboard 服务器 (A) 发送消息,但实际上,由于 B 服务器中的一个节点正在处理该特定设备的消息,因此可能需要将消息传输到另一台服务器 (B)消息(据我所知,Thingsboard 节点使用设备哈希来处理消息)。
Kafka 在集群中如何相应地转发该消息?
我阅读了官方文档并进行了一些谷歌搜索。但是找不到确切的答案。
解决方案
Thingsboard 使用 Zookeeper 作为服务发现。
每个 Thingsboard 微服务都知道集群中某处运行的其他服务。所有通信都通过消息队列执行(Kafka 是一个不错的选择)。每个主题都有几个分区。每个分区将分配给相应的节点。
设备消息将由发起者 id 散列,并始终推送到恒定分区号。节点之间没有直接通信。
在某些节点崩溃或只是放大/缩小的情况下,Zookeeper 将在每个节点上触发重新分区事件。现有分区将根据线路节点数重新分配。设备服务将遵循相同的逻辑。
那都是魔法。简单有效。希望它对Thingsboard 集群架构有所帮助。
推荐阅读
- visual-studio - 如何在 Visual Studio Code 中的 HTML 预览中显示视频和音频
- javascript - 无法使用 Chrome 的选择器结果选择元素
- python - 使用 BeautifulSoup 从表格中的特定单元格中提取数据?
- c - 用 C 语言创建具有给定字符串的结构名称
- optimization - 删除样式表问题 (wp_dequeue_style)
- azure - 在 Azure Government 中列出函数应用密钥时出现内部服务器错误
- vb.net - 如何在 Windows 窗体中使用构造函数
- javascript - 关键道具在 React 中给出错误,即使它正在被传递
- mobx - `mobx-state-tree` 中的模型和道具有什么区别?
- python-3.x - 使用 FastCGI 在 IIS 上使用 flask-login 随机注销