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

9.7 KiB
Raw Permalink Blame History

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-coretb-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

配置示例:

# 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):

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

下一步将深入分析各模块的交互机制和核心源码实现。