技术解读
json-scada:把 MongoDB 当作 SCADA 数据总线的工程实践
项目背景与痛点
传统 SCADA 的架构范式几十年来没有本质变化:一套专有的实时数据库,配一条专有的数据总线,再加上绑定 Windows 的组态软件。这套模式在单一厂区内足够稳定,但在 IIoT / 工业 4.0 场景下暴露出三个硬伤:其一,数据被困在 OT 孤岛里,与上层 MES、云平台对接要额外写一堆网关代码;其二,点位规模从几千涨到几十万时,专有实时库的授权费用和扩容成本陡增;其三,协议适配、看板开发、运维部署全部依赖厂商生态,二次开发门槛高。
riclolsen/json-scada 的核心赌注很直接:用 MongoDB 同时承担配置中心、实时数据总线与历史存储三重角色,把 SCADA 从"专有实时库 + 专有总线"重构成"通用数据库 + 无状态进程"。这个选择激进,但方向清晰——它要解决的不是"再做一个组态软件",而是"让工业数据以 IT 世界熟悉的形态流动"。
核心技术揭秘
理解这个项目,关键是放弃"消息中间件"的思维定式。它没有 Kafka,没有 RabbitMQ,进程之间也不直接 RPC 通信。所有协作都通过 MongoDB 集合完成:配置写在 protocolConnections / protocolTags 里,实时值落在 realtimeData 集合,每个点位一个文档;事件走 SOE 集合;历史由独立的归档进程搬运。
数据流大致如下:
这里的实现要点在于驱动的无状态化:驱动进程启动后从库里拉取连接参数与标签表,建立协议会话,按周期把采集值 upsert 回 realtimeData,同时带上数据源标识与时间戳。进程本身不持有业务配置,因此可以随时重启、可以多实例并行。变更通知则依赖 MongoDB 的 change stream(或 tailable cursor),HMI 与 API 层据此获得近实时的推送能力——这也解释了为什么项目强烈依赖副本集部署,单机 MongoDB 根本撑不起这个模型。
冗余设计同样围绕数据库展开。同一个协议驱动可以部署两套实例,通过文档中的活动标识字段做仲裁,主实例写值、备实例待命,切换时靠库里的状态而非心跳协议。这种做法省掉了专用仲裁服务,但也把"脑裂"风险转移给了运维——两套实例的时钟偏差和仲裁字段的写入时序,是这套架构最需要盯住的地方。
个人判断,真正的技术难点不在协议适配(那部分是体力活),而在写入吞吐与数据模型:几十万点位的秒级刷新意味着 realtimeData 的高频写放大,索引设计与集合拆分直接决定系统上限;SOE 事件的毫秒级顺序在分布式部署下很难严格保证,只能靠统一时钟源(NTP/PTP)加时间戳字段来逼近。
功能亮点与差异
第一,协议覆盖面是它的护城河。Modbus、DNP3、IEC 60870-5-104、OPC UA、MQTT 等主流工业协议基本齐备,且驱动可以按需启停,天然适配异构现场。
第二,可视化不自造轮子。它没有强推自家组态画布,而是把 Grafana 和标准 Web 技术栈拉进来做看板。对熟悉前端和 BI 工具的团队,这比学一套私有组态脚本划算得多。
第三,横向扩展路径干净。因为驱动无状态、数据在库,加机器就是加驱动实例,容量瓶颈集中在 MongoDB 一侧,扩容手段(副本集、分片、时序集合)都是成熟方案。
第四,云端对接成本低。MQTT 网关把数据推向上层平台,配合 JSON 文档模型,IT 团队无需理解工业协议就能消费数据。
应用场景与落地建议
它适合中大型工业监控、跨厂区数据汇聚、需要与云平台/数据中台打通的 IIoT 采集项目,以及希望用开源栈替代昂贵组态授权的团队。不适合硬实时控制回路与 SIL 等级安全联锁场景——那类需求需要确定性时延和认证级可靠性,数据库总线模型并不匹配。
生产落地有几条硬性提醒:务必以副本集方式部署 MongoDB,否则 change stream 与冗余机制都无从谈起;两套冗余驱动要严格对时,并明确仲裁字段的写入规则;realtimeData 必须做索引治理和历史数据的分层归档,避免单集合无限膨胀;安全上要做 MongoDB 认证、网络分段与传输加密,切勿把 27017 直接暴露在厂区网;控制指令通道的权限校验和安全联锁需自行补齐,不能指望框架兜底。
综合评价
优点:架构思路清爽,"数据库即总线"大幅降低了系统组件数量与运维复杂度;协议覆盖面广、跨平台、Docker 部署友好;无状态驱动带来的扩展性和冗余能力是实打实的工程优势;与 Grafana、MQTT 的集成让 OT/IT 融合路径变短。
缺点:MongoDB 成为事实上的单点依赖,其性能与稳定性直接决定整个系统;高频写入下的数据模型调优门槛不低,需要团队具备数据库功底;冗余仲裁与 SOE 时序在分布式场景下仍有工程缝隙;社区规模与商业支持远不及主流 SCADA 厂商,关键项目需自建支持能力。
一句话总结:它不是传统 SCADA 的替代品,而是"以数据为中心"重构工业监控的一次严肃尝试——选它,意味着你接受用数据库工程能力换架构简洁性。

评论