1. 课程导论与性能基线:ThingsBoard 架构概览、性能瓶颈分析、高并发场景定义、性能调优目标设定

1.1 ThingsBoard 核心架构概览

ThingsBoard 采用微服务与 Actor 模型相结合的架构,核心组件围绕设备接入、消息路由、规则引擎和数据持久化展开。理解其架构是定位性能瓶颈的第一步。

架构核心分层:
  • 传输层(Transport Layer): 支持 MQTT、HTTP、CoAP、LwM2M 协议,负责设备认证与消息接收。
  • 核心服务层(Core Services): 包含规则引擎(Rule Engine)、实体服务(Entity Service)、租户服务(Tenant Service)。
  • 数据层(Data Layer): 使用 PostgreSQL / TimescaleDB 存储元数据与最新遥测,Cassandra / TimescaleDB 存储时序数据。
  • 队列层(Queue Layer): Kafka / RabbitMQ / AWS SQS 作为异步消息缓冲,解耦传输与处理。
ThingsBoard 核心架构分层 传输层 (Transport Layer) MQTT · HTTP · CoAP · LwM2M · 设备认证与连接管理 队列层 (Queue Layer) Kafka / RabbitMQ / AWS SQS · 异步消息缓冲与削峰 核心服务层 (Core Services) 规则引擎 · 实体服务 · 租户服务 · Actor 消息处理 数据层 (Data Layer) PostgreSQL / TimescaleDB · Cassandra · 时序与元数据存储

1.2 高并发场景定义与性能瓶颈分析

本课程聚焦的“高并发”并非单纯指设备数量多,而是指在单位时间内,系统需要处理大量并发连接、消息吞吐与规则计算。典型场景包括:

场景类型 并发特征 典型指标
海量设备接入 10万+ 设备同时在线,频繁心跳与重连 连接数 / 每秒新建连接数
高频遥测上报 每设备每秒上报 1~10 条数据点 消息吞吐量 (msg/s)
复杂规则链处理 每条消息经过 5~20 个规则节点过滤、转换、告警 规则节点执行延迟 (ms)
批量数据持久化 时序数据写入速率超过 50万 点/秒 写入延迟 / 磁盘 IOPS
常见性能瓶颈点:
  • 传输层线程模型: 默认 Netty 线程数不足,导致 MQTT 连接处理阻塞。
  • 规则引擎 Actor 调度: 单队列模式下规则节点处理成为串行瓶颈。
  • 数据库写入放大: 每条遥测触发多次索引更新与历史表插入。
  • JVM 堆内存与 GC: 大量短生命周期对象导致频繁 Young GC 甚至 Full GC。
  • 队列积压: Kafka 分区数不足或消费者 Lag 持续增长。
高并发场景性能瓶颈分析 传输层线程不足 规则引擎串行瓶颈 数据库写入放大 JVM GC 频繁 队列积压 Lag 网络带宽 / 连接数 瓶颈通常相互关联:传输阻塞 → 队列积压 → 规则处理延迟 → 数据库写入堆积 → GC 恶化

1.3 性能调优目标设定

调优必须有明确的量化目标,否则无法衡量效果。本课程围绕以下四个核心维度设定基线目标:

维度 基线指标 调优目标(单节点 8C16G) 测量工具
连接容量 最大并发 MQTT 连接数 ≥ 50,000 JMeter + MQTT 插件
消息吞吐 每秒处理遥测消息数 (msg/s) ≥ 30,000 msg/s 自定义压测客户端
端到端延迟 设备上报到规则链执行完成 P99 延迟 ≤ 500 ms ThingsBoard 内置统计 + Prometheus
数据持久化 时序数据库写入速率 (points/s) ≥ 200,000 points/s 数据库监控 + 写入延迟日志
调优原则: 先定位瓶颈,再针对性优化。不要盲目修改配置。每次只改变一个变量,用 A/B 测试验证效果。本课程后续章节将逐一深入每个瓶颈的根因分析与解决方案。

1.4 课程路线图与实验环境

本课程共 30 章,从架构原理出发,逐步深入到 JVM、操作系统、数据库、队列、规则引擎、传输层、监控告警等全链路调优。每章均提供可复现的压测脚本与配置示例。

  • 实验环境: 基于 Docker Compose 部署的 ThingsBoard 3.6+ 集群,包含 1 个传输节点、1 个规则引擎节点、1 个数据库节点。
  • 压测工具: 使用 TB Benchmark 模拟器与定制 JMeter 脚本,支持百万级设备模拟。
  • 监控栈: Prometheus + Grafana + 自定义 Dashboard,实时观察 JVM、队列、数据库指标。
# 快速启动实验环境(示例)
git clone https://github.com/thingsboard/thingsboard.git
cd thingsboard/docker
docker-compose -f docker-compose.yml up -d
# 验证服务状态
curl -s http://localhost:8080/api/health | jq .