产品定价 立即试用
社区版
入门 文档 指南 安装 架构 API 常见问题
目录

ThingsBoard架构

ThingsBoard被设计为将工作负载分布到多个节点,且无单点故障。每个ThingsBoard节点都相同,可处理来自设备和服务器端应用的请求。

高层概览

image

设备连接

ThingsBoard支持MQTTLwM2MCoAPHTTP作为设备连接协议。 可以通过插件方式支持不同协议或自定义现有实现。

Rule Engine

ThingsBoard规则引擎用于处理来自设备的消息并触发可配置的处理模块。

核心服务

ThingsBoard包含一套核心服务,可管理以下实体:

  • 设备及其凭据
  • RuleChain与RuleNode
  • 租户与客户
  • 部件与Dashboard
  • 告警与事件

规则可以调用这些API的特定子集。例如,规则可为某设备创建告警。

服务端API网关

每个ThingsBoard服务器为注册用户提供REST API。系统遥测服务可通过WebSocket和REST API管理属性和获取时序数据。系统RPC服务提供REST API向设备下发自定义命令。更多ThingsBoard REST API信息请参见此处

Actor模型

Actor模型支持高并发处理来自设备的消息以及服务端API调用。ThingsBoard使用自研的Actor系统实现(针对使用场景优化),具有以下Actor层级:

image

各Actor功能简述如下:

  • 应用Actor - 负责管理租户Actor。该Actor实例始终常驻内存。
  • 租户Actor - 负责管理租户设备及规则链Actor。该Actor实例始终常驻内存。
  • 设备Actor - 维护设备状态:活跃会话、订阅、待处理RPC命令等。出于性能考虑在内存中缓存当前设备属性。当处理到来自设备的首条消息时创建Actor;当一定时间内无设备消息时停止该Actor。
  • 规则链Actor - 处理收到的消息并分发给规则节点Actor。该Actor实例始终常驻内存。
  • 规则节点Actor - 处理收到的消息,并将结果回报给规则链Actor。该Actor实例始终常驻内存。

集群模式

ServiceDiscovery

ThingsBoard使用Zookeeper进行服务发现。所有ThingsBoard节点相同,并在Zookeeper中注册为临时节点。使用Apache Curator 路径缓存跟踪所有可用兄弟节点。

ConsistentHashing

ThingsBoard采用一致性哈希来保证可扩展性与高可用。设备A在某节点接收的消息可能根据设备ID的哈希被转发到其他节点。尽管这会带来一定网络开销,但能确保同一设备的所有消息在特定服务器上由对应的设备Actor处理,具有以下优势:

  • 提高缓存命中率。设备属性和其他设备相关数据由特定服务器上的设备Actor获取。
  • 避免竞态条件。特定设备的所有消息在确定的服务器上处理。
  • 可根据设备ID将服务端API调用路由到目标服务器。

下图演示ThingsBoard如何处理发往设备D1的RPC请求。在此场景中,请求到达服务器A,而D1通过MQTT连接到服务器C。在最坏情况下,D1的设备Actor可能位于另一台服务器B上,与A和C都不一致。

image

安全

传输加密

作为系统管理员,可配置ThingsBoard在HTTP(s)和MQTT传输上使用安全套接层。CoAP的DTLS暂不支持。

设备认证

ThingsBoard设计为支持多种设备凭据类型。当前版本为所有协议提供基于Token的凭据支持,并为MQTT协议提供基于X.509证书的凭据支持。详见MQTT over SSL指南。

第三方工具

ThingsBoard使用以下主要第三方项目:

  • Zookeeper - 用于服务协调
  • Cassandra - 作为可扩展且可靠的数据库
  • Kafka(或RabbitMQ、AWS SQS、Azure Event Hub、Google PubSub)- 作为可扩展消息队列