物联网数据中台设计思路
一、整体架构设计
┌─────────────────────────────────────────────────────┐
│ 应用层 │
│ 设备监控 │ 故障预警 │ 能耗分析 │ 业务决策 │
└─────────────────────────────────────────────────────┘
↑
┌─────────────────────────────────────────────────────┐
│ 数据服务层 │
│ API网关 │ 数据订阅 │ 报表服务 │ 可视化服务 │
└─────────────────────────────────────────────────────┘
↑
┌─────────────────────────────────────────────────────┐
│ 数据治理层 │
│ 元数据管理 │ 数据质量 │ 安全审计 │ 生命周期管理 │
└─────────────────────────────────────────────────────┘
↑
┌─────────────────────────────────────────────────────┐
│ 数据存储层 │
│ 时序DB │ 关系DB │ 图DB │ 缓存 │ 对象存储 │
└─────────────────────────────────────────────────────┘
↑
┌─────────────────────────────────────────────────────┐
│ 数据处理层 │
│ 实时计算 │ 离线计算 │ 规则引擎 │ 模型推理 │
└─────────────────────────────────────────────────────┘
↑
┌─────────────────────────────────────────────────────┐
│ 数据接入层 │
│ MQTT/CoAP │ HTTP │ 网关适配 │ 协议转换 │
└─────────────────────────────────────────────────────┘
↑
物联网设备
二、核心设计要点
1. 数据接入层
关键能力:
- 海量连接:支持百万级设备并发连接
- 协议适配:MQTT、CoAP、HTTP、Modbus、OPC UA等
- 多租户隔离:不同业务线/客户资源隔离
- 断网续传:边缘缓存与数据补传机制
推荐技术:EMQX、Mosquitto、Netty自研网关
2. 数据处理层
实时流处理:
yaml
数据处理流程:
数据清洗: 去重、格式标准化、异常值过滤
数据补全: 设备信息关联、地理位置注入
规则引擎: 阈值告警、联动控制、场景触发
复杂事件: 模式匹配、趋势检测
计算架构:
- 实时计算:Flink/Spark Streaming,毫秒级响应
- 批处理:Spark/Hive,日报、月报等离线分析
- 边缘计算:靠近设备侧做预处理,减少云端压力
3. 数据存储层(混合存储架构)
| 数据类型 | 存储方案 | 典型场景 |
|---|---|---|
| 时序数据 | InfluxDB/TDengine/TimescaleDB | 设备测点、传感器数据 |
| 设备元数据 | MySQL/PostgreSQL | 设备信息、产品模型 |
| 关系网络 | Neo4j/JanusGraph | 设备拓扑、空间关系 |
| 缓存数据 | Redis | 最新状态、实时告警 |
| 非结构化 | MinIO/HDFS | 日志、图片、升级包 |
时序数据设计关键点:
表/Measurement设计:
- tag: 设备ID、测点ID、位置、类型(不变属性)
- field: 数值、状态、质量戳(可变属性)
- timestamp: 毫秒级时间戳(主索引)
设计原则:
- 高基数tag放在单独关联表
- 按业务主题分库分表
- 合理设置数据保留策略
4. 数据治理体系
元数据管理:
- 物模型(产品模型):属性、事件、动作标准定义
- 数据字典:编码规范、单位转换映射
- 数据血缘:从采集到消费的全链路追踪
数据质量管理:
yaml
质量指标:
完整性: 缺失率监控、补录机制
准确性: 设备上报范围校验、异常值检测
及时性: 上报延迟监控、时延SLA
一致性: 多源设备数据冲突解决规则
数据安全:
- 传输加密:TLS/DTLS
- 存储加密:敏感数据字段级加密
- 权限控制:RBAC + 数据行级隔离
- 审计日志:所有数据访问记录
5. 数据服务层
服务化输出:
java
// API服务示例
- 设备影子服务: 获取设备最新状态
- 时序数据服务: 时间范围查询、聚合统计
- 事件订阅服务: Kafka/MQ消息分发
- 分析服务: 预测性维护、异常检测
统一查询API:
- 标准SQL + 时序扩展语法
- 跨源查询(存储异构透明化)
- 查询优化与缓存策略
三、关键设计决策
1. 实时与批处理融合(Lambda/Kappa架构)
数据流: 设备上报 → 消息队列(Kafka)
↓
实时链路(Flink) → 实时结果
↓
数据湖(离线存储) → 批处理 → 修正/补充
2. 设备影子机制
概念: 云端维护每个设备的期望状态和上报状态
作用:
- 设备离线时读取/设置设备属性
- 解耦应用和设备直接通信
- 实现设备状态同步
3. 物模型标准化
json
{
"productKey": "智能电表",
"properties": [
{"name": "电压", "identifier": "voltage", "type": "float", "unit": "V"},
{"name": "电流", "identifier": "current", "type": "float", "unit": "A"}
],
"events": [
{"name": "过压告警", "identifier": "overVoltage", "type": "alert"}
],
"services": [
{"name": "远程重启", "identifier": "reboot", "callType": "async"}
]
}
四、典型挑战与应对
| 挑战 | 解决方案 |
|---|---|
| 百万级TPS写入 | Kafka分区 + 时序数据库批量写入 + 读写分离 |
| 乱序/延迟数据 | 事件时间处理 + Watermark机制 + 数据校准 |
| 数据爆炸增长 | 冷热分离存储 + 聚合降采样 + 生命周期自动归档 |
| 设备断网恢复 | 边缘本地缓存 + 数据版本号 + 智能合并策略 |
| 多租户性能隔离 | 独立Topic/消费者组 + 配额限流 + 资源池化 |
五、实施路线建议
阶段一(2-3月): 基础能力建设
├── 消息接入层(MQTT集群)
├── 时序数据库部署
├── 核心物模型定义
└── 基础设备接入与展示
阶段二(2-3月): 数据服务化
├── 流式计算引擎
├── 规则引擎告警
├── 统一API网关
└── 数据质量监控
阶段三(2-3月): 数据智能化
├── 离线数仓建设
├── 数据湖探索
├── 机器学习模型集成
└── 数据可视化大屏
这个设计思路可以根据具体业务场景(设备规模、实时性要求、行业属性)进行裁剪和深化。