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

348 lines
9.7 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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