产品定价 立即试用
专业版
架构 > 单体架构
入门 文档 指南 安装
API 常见问题
目录

ThingsBoard 单体架构

简介

本文介绍单体架构,包括高层架构图、各组件间的数据流说明及部分架构选型说明。

请注意,自ThingsBoard v2.2起,平台支持微服务部署模式。尽管微服务更适合高可用、可水平扩展的场景,不少ThingsBoard用户仍倾向于先以单实例起步,后续再扩展。

我们也推荐在开发与原型验证阶段使用单体模式。

在单体模式下,所有ThingsBoard组件运行于同一Java虚拟机(JVM)中,共享同一操作系统资源。由于ThingsBoard采用Java编写,单体架构的明显优势是可最小化运行ThingsBoard所需内存。在资源受限环境中,可用256或512MB RAM启动并运行ThingsBoard进程。明显劣势是,若某个组件(如MQTT传输)负载过高,可能影响其他组件。例如,若ThingsBoard进程的OS文件描述符上限为4096,则无法并行打开超过4096个MQTT会话及WebSocket用户会话。

架构图

传输组件

ThingsBoard提供基于MQTT、HTTP和CoAP的API,供设备应用或固件使用。各协议API由独立的服务器组件提供,属于ThingsBoard”传输层”。完整组件列表及对应文档页如下:

  • HTTP传输组件提供设备API,见此处
  • MQTT传输组件提供设备API,见此处, 并启用网关API,见此处
  • CoAP传输组件提供设备API,见此处
  • LwM2M传输组件提供设备API,见此处

各传输组件将数据推送给Rule Engine,并可能调用核心服务向数据库发起请求,以校验设备凭据等。

由于ThingsBoard在传输层与核心服务之间采用非常简单的通信协议,实现自定义传输协议支持(如纯TCP上的CSV、UDP上的二进制负载等)较为容易。建议查看现有传输实现入手,或联系我们获取帮助。

Rule Engine组件

ThingsBoard Rule Engine负责按用户定义的逻辑和流程处理到达的消息。更多信息请参见对应文档页

核心服务

核心服务负责处理:

ThingsBoard节点使用Actor System实现租户、设备、Rule Chain与Rule Node Actor。平台节点可加入集群,各节点地位平等。服务发现通过Zookeeper完成。ThingsBoard节点之间使用基于实体ID的consistent hashing算法路由消息。因此,同一实体的消息在同一ThingsBoard节点上处理。平台使用gRPC在ThingsBoard节点间发送消息。

注意:ThingsBoard作者计划在未来版本中使用Kafka替代gRPC进行节点间消息交换。主要考虑是在性能与延迟上做出小幅牺牲,换取Kafka consumer groups带来的持久可靠投递与自动负载均衡。

外部系统

可通过Rule Engine将消息从ThingsBoard推送到外部系统。可将数据推送到外部系统、进行处理,并将处理结果回传至ThingsBoard进行可视化。详见Rule Engine文档与指南。