thingsboard/summary/01-项目总体架构分析.md

348 lines
9.7 KiB
Markdown
Raw Permalink Normal View History

2026-01-19 11:50:37 +08:00
# 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
下一步将深入分析各模块的交互机制和核心源码实现。