3. 平台总体架构设计

实验设备实时数据平台面对的是“多品牌仪器、多协议接口、多采样频率、多消费场景”的复杂环境。若把所有逻辑堆在一个服务里,任何一次设备接入变更都可能牵动存储与服务,最终导致系统难以演进。分层架构的核心价值,是把“变化频率不同、技术栈不同、可靠性要求不同”的职责切开,让每一层只解决一类问题,并通过稳定接口向上提供服务。

本节采用七层划分:边缘层、接入层、消息层、存储层、服务层、应用层,以及贯穿全局的运维与安全能力。下面先给出整体数据流与职责边界,再逐层说明职责、关键选型参数与选型原则。

实验设备实时数据平台七层架构与数据流 数据上行(采集→消费) 控制/配置下行 应用层 实时监控大屏 · 实验过程回放 · 报警推送 · 数据导出与报表 · 第三方系统对接 面向用户场景 服务层 实时查询API · 历史查询API · 订阅推送 · 设备元数据服务 · 权限与审计 · 计算任务调度 统一接口与业务逻辑 存储层 时序库(原始/聚合) · 关系库(设备台账/配置) · 对象存储(文件/波形) · 缓存(最新值/热点) 分级持久化 消息层 主题分区 · 消费组 · 位点管理 · 死信队列 · 背压与限流 · 消息保留策略 削峰与解耦 接入层 协议适配(Modbus/OPC UA/SCPI/MQTT) · 会话管理 · 时间戳对齐 · 数据校验 · 设备认证 协议归一化 边缘层 设备驱动 · 本地采集 · 断网缓存 · 边缘预处理(滤波/降采样/阈值判断) · 时钟同步 贴近设备侧 实验仪器:示波器 · 电源 · 温控箱 · 数据采集卡 · 传感器 运维监控 · 安全审计 · 配置管理

边缘层:把“最后一米”的不确定性收住

边缘层直接面对仪器,职责是稳定采集、就地处理、断网续传。它需要处理三类现实问题:一是协议差异,例如某台温控箱走 Modbus RTU,某台示波器走 SCPI over TCP,某台采集卡走厂商私有 DLL;二是时钟差异,设备本地时间可能漂移,必须统一到平台时间基准;三是网络不可靠,实验室网络可能被大文件传输占满。

选型上,边缘节点优先选择支持容器化部署的轻量运行时,单节点资源建议预留 2 核 CPU、2 GB 内存以上,用于本地缓存与预处理。采集周期按设备能力设定:温度类 1 s、电压电流类 100 ms、振动类 1 ms 或更高。边缘预处理应至少包含“无效值剔除、量程判断、时间戳打标”三步,避免脏数据直接进入消息层。断网缓存建议按“本地磁盘队列 + 最大保留时长”设计,例如保留 24 小时或 500 MB,先到者触发覆盖。

接入层:协议归一化与设备身份

接入层是平台与设备之间的“翻译官”。它把不同协议、不同报文格式统一为内部数据模型,典型字段包括:设备ID、测点ID、时间戳、数值、质量码、单位。质量码用于标记数据可信度,例如 0 表示正常、1 表示超量程、2 表示通信超时、3 表示人工置数。

接入层还需完成设备认证与会话管理。建议每台设备或每个边缘网关分配唯一凭证,接入时校验设备证书或令牌,避免非法设备写入。对于高频数据,接入层应支持批量打包,例如每 200 ms 或每 500 条打包一次,降低消息层压力。若某设备连续 3 个周期无响应,接入层应产生通信中断事件,而不是静默丢弃。

消息层:削峰、解耦与可回放

消息层是平台的“缓冲带”。实验设备数据具有明显的突发性:某次实验启动瞬间,几十台设备同时上传,若直接写库会造成存储抖动。消息层通过主题分区把不同设备或不同实验分组,消费组按需订阅。关键参数包括:分区数、副本数、消息保留时长、消费位点提交方式。

选型原则是:分区数按“峰值吞吐 ÷ 单分区吞吐”估算,并预留 2 倍余量;副本数至少 2,保证单节点故障不丢数据;保留时长按业务回放需求设定,例如 7 天用于排障,30 天用于实验复盘。消费端必须实现幂等写入,避免重复消费导致数据重复。对于无法处理的消息,应进入死信队列并记录原因,而不是无限重试阻塞主链路。

存储层:按数据特征分级

存储层不能只用一种数据库。原始高频时序数据写入量大、查询以时间范围为主,适合时序数据库;设备台账、实验配置、用户权限等结构化数据适合关系库;波形文件、图片、日志附件适合对象存储;最新值查询和热点数据适合缓存。

以某实验台为例:20 个测点、采样周期 100 ms,则每秒产生 200 条记录,一天约 1728 万条。若保留 90 天原始数据,约 15.5 亿条。此时必须设计降采样与冷热分层:原始数据保留 7 天,1 分钟聚合数据保留 90 天,1 小时聚合数据保留 3 年。聚合任务由服务层调度,写入独立的聚合表,避免查询时实时计算。

服务层:统一接口与业务逻辑

服务层向上提供稳定 API,向下屏蔽存储差异。核心服务包括:实时查询服务、历史查询服务、订阅推送服务、设备元数据服务、权限与审计服务。实时查询建议走缓存,历史查询走时序库,订阅推送走消息层或 WebSocket。

服务层的关键设计是“接口契约稳定”。例如历史查询接口统一为:设备ID、测点ID、起始时间、结束时间、聚合粒度、返回条数上限。无论底层是时序库还是关系库,调用方不需要感知。对于跨设备计算,例如“温度超过 80 ℃ 且持续 10 s 触发报警”,应由服务层的规则引擎完成,而不是让应用层各自实现。

应用层:面向场景,不碰底层细节

应用层只消费服务层接口,不直接访问数据库或消息队列。典型应用包括:实时监控大屏、实验过程回放、报警推送、数据导出与报表、第三方系统对接。应用层的选型原则是“快速迭代、按需组合”,同一份数据可以同时支撑大屏、移动端和报表,而不需要重复采集。

分层不是越多越好,而是让每层的变化原因单一。边缘层因设备变化,接入层因协议变化,消息层因流量变化,存储层因数据量变化,服务层因业务规则变化,应用层因用户场景变化。变化被隔离,平台才能持续演进。

选型原则汇总

层级核心职责关键选型参数选型原则
边缘层采集、预处理、断网缓存采集周期、缓存容量、时钟同步精度贴近设备,优先保证不丢数
接入层协议适配、身份认证、数据校验协议类型、批量大小、质量码规则归一化输出,异常可观测
消息层削峰、解耦、回放分区数、副本数、保留时长按峰值吞吐估算,预留余量
存储层分级持久化写入速率、保留周期、聚合粒度按数据特征选库,冷热分层
服务层统一API、业务规则接口契约、并发量、缓存策略接口稳定,屏蔽底层差异
应用层场景化展示与交互刷新频率、用户规模、导出格式只依赖服务层,快速迭代

实际落地时,建议先用一张“数据流与职责边界图”对齐团队认知,再逐层确定技术选型。每层之间只通过明确接口通信,禁止跨层直连。这样,当设备数量从 20 台扩展到 200 台、采样频率从 100 ms 提升到 10 ms 时,平台只需在对应层扩容或替换组件,而不必推倒重来。