9.7 KiB
ThingsBoard 项目总体架构分析
1. 项目概述
ThingsBoard 是一个开源的物联网平台,用于数据收集、处理、可视化和设备管理。项目采用 Java 17 和 Spring Boot 3.4.10 构建,支持多种数据库和消息队列系统。
1.1 项目基本信息
- 项目名称: ThingsBoard
- 版本: 4.2.1
- 编程语言: Java 17
- 构建工具: Maven
- 框架: Spring Boot 3.4.10
- 许可证: Apache 2.0
1.2 项目模块结构
ThingsBoard 采用 Maven 多模块项目结构,主要模块如下:
thingsboard/
├── application/ # 主应用模块(单体部署)
├── common/ # 公共模块
│ ├── actor/ # Actor 模型实现
│ ├── cache/ # 缓存抽象
│ ├── cluster-api/ # 集群 API
│ ├── coap-server/ # CoAP 服务器
│ ├── dao-api/ # 数据访问层 API
│ ├── data/ # 数据模型
│ ├── discovery-api/ # 服务发现 API
│ ├── edge-api/ # Edge 设备 API
│ ├── edqs/ # 事件驱动查询服务
│ ├── message/ # 消息协议
│ ├── proto/ # Protobuf 定义
│ ├── queue/ # 消息队列抽象
│ ├── script/ # 脚本执行引擎
│ ├── stats/ # 统计模块
│ ├── transport/ # 传输层实现
│ │ ├── coap/ # CoAP 传输
│ │ ├── http/ # HTTP 传输
│ │ ├── lwm2m/ # LWM2M 传输
│ │ ├── mqtt/ # MQTT 传输
│ │ ├── snmp/ # SNMP 传输
│ │ └── transport-api/ # 传输层 API
│ ├── util/ # 工具类
│ └── version-control/ # 版本控制
├── dao/ # 数据访问层实现
├── edqs/ # 事件驱动查询服务(独立部署)
├── monitoring/ # 监控模块
├── msa/ # 微服务架构相关
│ ├── tb/ # ThingsBoard 核心服务 Docker 镜像
│ ├── tb-node/ # ThingsBoard 节点服务
│ ├── transport/ # 传输服务(独立部署)
│ ├── js-executor/ # JavaScript 执行器
│ ├── web-ui/ # Web UI 服务
│ └── vc-executor/ # 版本控制执行器
├── netty-mqtt/ # Netty MQTT 实现
├── rule-engine/ # 规则引擎
│ ├── rule-engine-api/ # 规则引擎 API
│ └── rule-engine-components/ # 规则引擎组件
├── transport/ # 传输层(独立部署)
│ ├── coap/
│ ├── http/
│ ├── lwm2m/
│ ├── mqtt/
│ └── snmp/
├── ui-ngx/ # Angular 前端 UI
└── docker/ # Docker 部署配置
2. 核心架构设计
2.1 架构模式
ThingsBoard 采用以下架构模式:
-
Actor 模型: 使用 Actor 模型处理并发和消息传递
AppActor: 系统级 Actor,管理所有租户TenantActor: 租户级 Actor,管理租户下的所有设备DeviceActor: 设备级 Actor,处理单个设备的消息
-
消息队列: 使用消息队列实现模块间解耦
- 支持 Kafka、RabbitMQ、AWS SQS、Google Pub/Sub、Azure Service Bus
- 使用 Protobuf 进行消息序列化
-
分层架构:
- 传输层: 处理设备连接(MQTT、CoAP、HTTP、LWM2M、SNMP)
- 核心层: 处理业务逻辑(设备管理、规则引擎、RPC)
- 数据层: 数据持久化(PostgreSQL、Cassandra、TimescaleDB)
2.2 数据流
设备 -> 传输层 -> 消息队列 -> 核心服务 -> 规则引擎 -> 数据存储
-> WebSocket -> 前端UI
2.3 部署模式
ThingsBoard 支持两种部署模式:
-
单体模式(Monolith): 所有服务运行在一个进程中
- 适用场景: 小型部署、开发测试
- 配置:
service.type=monolith
-
微服务模式(Microservices): 服务拆分独立部署
- tb-core: 核心服务(设备管理、用户管理、API)
- tb-rule-engine: 规则引擎服务
- tb-transport-*: 各种传输服务(MQTT、HTTP、CoAP等)
- tb-js-executor: JavaScript 执行器
- tb-web-ui: Web UI 服务
- tb-vc-executor: 版本控制执行器
- 配置:
service.type=tb-core或tb-rule-engine等
3. 主要模块说明
3.1 Application 模块
位置: application/
作用: ThingsBoard 的主应用模块,包含所有核心业务逻辑。
主要功能:
- REST API 服务
- Actor 系统管理
- 设备生命周期管理
- 租户和用户管理
- 规则引擎集成
- WebSocket 服务
关键类:
ThingsboardServerApplication: 应用启动入口AppActor: 系统级 ActorTenantActor: 租户级 ActorDeviceActor: 设备级 Actor
3.2 Common 模块
位置: common/
作用: 提供公共功能和抽象接口。
3.2.1 Actor 模块
位置: common/actor/
作用: 实现 Actor 模型,用于并发处理和消息传递。
关键接口:
TbActor: Actor 接口TbActorRef: Actor 引用TbActorMsg: Actor 消息基类
3.2.2 Queue 模块
位置: common/queue/
作用: 消息队列抽象层,支持多种消息队列实现。
支持的队列类型:
- Kafka
- RabbitMQ
- AWS SQS
- Google Pub/Sub
- Azure Service Bus
- In-Memory (测试用)
关键接口:
TbQueueProducer: 消息生产者TbQueueConsumer: 消息消费者TbQueueFactory: 队列工厂
3.2.3 Transport 模块
位置: common/transport/
作用: 提供各种传输协议的实现。
支持的协议:
- MQTT: 消息队列遥测传输协议
- CoAP: 受限应用协议
- HTTP: 超文本传输协议
- LWM2M: 轻量级 M2M 协议
- SNMP: 简单网络管理协议
关键类:
TransportService: 传输服务接口DefaultTransportService: 默认传输服务实现
3.3 DAO 模块
位置: dao/
作用: 数据访问层,提供数据库操作抽象。
支持的数据库:
- PostgreSQL: 关系型数据库,用于存储实体数据
- Cassandra: NoSQL 数据库,用于存储时序数据
- TimescaleDB: PostgreSQL 扩展,用于时序数据(可选)
关键接口:
TenantDao: 租户数据访问DeviceDao: 设备数据访问TelemetryDao: 遥测数据访问
3.4 Rule Engine 模块
位置: rule-engine/
作用: 规则引擎,用于处理设备数据和触发动作。
主要组件:
- 规则链(Rule Chain): 定义数据处理流程
- 规则节点(Rule Node): 规则链中的处理节点
- 过滤节点
- 转换节点
- 动作节点(发送邮件、HTTP 请求等)
关键类:
RuleChain: 规则链RuleNode: 规则节点TbMsg: 规则引擎消息
3.5 Transport 独立部署模块
位置: transport/
作用: 传输层服务的独立部署版本,用于微服务架构。
部署方式: 每个传输协议可以作为独立服务部署,通过消息队列与核心服务通信。
3.6 UI 模块
位置: ui-ngx/
作用: Angular 前端用户界面。
技术栈:
- Angular
- TypeScript
- Material Design
4. 数据库支持
4.1 实体数据库(Entities)
用于存储租户、用户、设备等实体信息。
支持选项:
- PostgreSQL(推荐)
- HSQLDB(仅用于开发/测试)
4.2 时序数据库(Timeseries)
用于存储设备的遥测数据。
支持选项:
- SQL: PostgreSQL 或 TimescaleDB
- NoSQL: Cassandra
配置示例:
# PostgreSQL 模式
DATABASE_TS_TYPE=sql
SPRING_DATASOURCE_URL=jdbc:postgresql://localhost:5432/thingsboard
# Cassandra 模式(混合模式)
DATABASE_TS_TYPE=cassandra
CASSANDRA_CLUSTER_NAME=ThingsBoard Cluster
CASSANDRA_URL=127.0.0.1:9042
4.3 缓存
用于提高性能和减少数据库负载。
支持选项:
- Valkey: Redis 分支(推荐)
- Standalone: 单节点
- Cluster: 集群模式
- Sentinel: 哨兵模式
5. 消息队列支持
ThingsBoard 通过消息队列实现模块间通信,支持以下队列系统:
- Kafka: 高吞吐量分布式消息队列
- RabbitMQ: 企业级消息队列
- AWS SQS: Amazon 云消息队列
- Google Pub/Sub: Google 云消息队列
- Azure Service Bus: Azure 云消息队列
配置示例 (Kafka):
queue:
type: kafka
kafka:
servers: localhost:9092
6. 服务发现
在微服务模式下,ThingsBoard 使用 ZooKeeper 进行服务发现。
作用:
- 服务注册与发现
- 负载均衡
- 服务健康检查
7. 核心特性
7.1 设备管理
- 设备注册与认证
- 设备连接状态管理
- 设备属性管理
- 设备遥测数据收集
7.2 规则引擎
- 可视化规则链编辑
- 数据过滤与转换
- 动作触发(邮件、HTTP、RPC等)
- 脚本执行(JavaScript)
7.3 可视化
- 仪表板(Dashboard)
- 小部件(Widget)
- 实时数据展示
- 历史数据查询
7.4 安全
- JWT 认证
- OAuth2 支持
- 设备凭证管理
- 权限控制
8. 总结
ThingsBoard 是一个功能完整的物联网平台,采用模块化设计,支持单体和平务两种部署模式。核心特点包括:
- 灵活的架构: 支持单体和平务部署
- 多种传输协议: MQTT、CoAP、HTTP、LWM2M、SNMP
- 强大的规则引擎: 可视化规则链,支持复杂的数据处理流程
- 可扩展性: 支持水平扩展,通过消息队列实现解耦
- 丰富的数据库支持: PostgreSQL、Cassandra、TimescaleDB
下一步将深入分析各模块的交互机制和核心源码实现。