# 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 采用以下架构模式: 1. **Actor 模型**: 使用 Actor 模型处理并发和消息传递 - `AppActor`: 系统级 Actor,管理所有租户 - `TenantActor`: 租户级 Actor,管理租户下的所有设备 - `DeviceActor`: 设备级 Actor,处理单个设备的消息 2. **消息队列**: 使用消息队列实现模块间解耦 - 支持 Kafka、RabbitMQ、AWS SQS、Google Pub/Sub、Azure Service Bus - 使用 Protobuf 进行消息序列化 3. **分层架构**: - **传输层**: 处理设备连接(MQTT、CoAP、HTTP、LWM2M、SNMP) - **核心层**: 处理业务逻辑(设备管理、规则引擎、RPC) - **数据层**: 数据持久化(PostgreSQL、Cassandra、TimescaleDB) ### 2.2 数据流 ``` 设备 -> 传输层 -> 消息队列 -> 核心服务 -> 规则引擎 -> 数据存储 -> WebSocket -> 前端UI ``` ### 2.3 部署模式 ThingsBoard 支持两种部署模式: 1. **单体模式(Monolith)**: 所有服务运行在一个进程中 - 适用场景: 小型部署、开发测试 - 配置: `service.type=monolith` 2. **微服务模式(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`: 系统级 Actor - `TenantActor`: 租户级 Actor - `DeviceActor`: 设备级 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 **配置示例**: ```yaml # 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 通过消息队列实现模块间通信,支持以下队列系统: 1. **Kafka**: 高吞吐量分布式消息队列 2. **RabbitMQ**: 企业级消息队列 3. **AWS SQS**: Amazon 云消息队列 4. **Google Pub/Sub**: Google 云消息队列 5. **Azure Service Bus**: Azure 云消息队列 **配置示例** (Kafka): ```yaml 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 是一个功能完整的物联网平台,采用模块化设计,支持单体和平务两种部署模式。核心特点包括: 1. **灵活的架构**: 支持单体和平务部署 2. **多种传输协议**: MQTT、CoAP、HTTP、LWM2M、SNMP 3. **强大的规则引擎**: 可视化规则链,支持复杂的数据处理流程 4. **可扩展性**: 支持水平扩展,通过消息队列实现解耦 5. **丰富的数据库支持**: PostgreSQL、Cassandra、TimescaleDB 下一步将深入分析各模块的交互机制和核心源码实现。