348 lines
9.7 KiB
Markdown
348 lines
9.7 KiB
Markdown
# 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
|
||
|
||
下一步将深入分析各模块的交互机制和核心源码实现。
|
||
|