传统 MES、甚至很多大型工厂的 MES,确实都不用 Redis 和消息队列
传统 MES、甚至很多大型工厂的 MES,确实都不用 Redis 和消息队列
这不是技术落后,而是工业软件的特点决定的。
一、为什么实际工厂的 MES 大多不用 Redis 和 MQ?
1. 传统 MES 的核心不是 "高并发采集",而是 "业务流程管理"
老牌 MES(西门子、SAP MES、罗克韦尔、国内的宝信、石化盈科等)的核心是:
- 工单管理、工艺路线、物料追溯
- 人工报工、质量检验、设备维保
- 计划排产、人员管理
这些都是低频操作:
- 一个工单几小时甚至几天才创建一次
- 报工是人工扫码,一分钟也就几十次
- 查询也是人在查,每秒几次了不起
这种并发量,Oracle/SQL Server 直接扛,根本不需要 Redis 和 MQ。
2. 工业软件追求 "稳",不追新技术
工厂的逻辑:
- 能用就行,别瞎折腾
- 越简单越可靠,越复杂越容易出问题
- 技术栈越老,坑越少,越多人会维护
- 7×24 不能停,出一次事故损失几十万
所以你会看到:
- 很多工厂还在用 Oracle 11g、SQL Server 2008
- 很多 MES 还是 C/S 架构,Delphi/VB 写的
- 不是没钱升级,是 "稳定压倒一切"
3. 设备采集不是传统 MES 的核心
传统 MES 里,设备数据采集是边缘功能:
- 要么靠人工录入
- 要么用 PLC 直接连,走 OPC/Modbus
- 数据量不大,直接写数据库就行
真正海量设备采集,是最近几年 "工业互联网"、"智能制造" 火了之后才有的需求。
二、那什么时候 MES 才会用到 Redis 和 MQ?
1. 设备自动采集量特别大的时候
比如:
- 几千上万台设备,秒级甚至毫秒级采集
- 每秒几万条数据写入
- 这时候数据库直接扛不住,需要 MQ 削峰
2. 系统特别复杂、模块特别多的时候
比如:
- MES + WMS + ERP + APS + 质量系统 + 设备管理
- 十几个系统之间要传数据
- 这时候用 MQ 做解耦,比直接互相调用靠谱
3. 实时性要求特别高的时候
比如:
- 实时看板,每秒刷新
- 设备状态实时监控,毫秒级响应
- 这时候用 Redis 做实时计算,比查数据库快
4. 互联网公司 / 云原生团队做的 MES
很多互联网公司跨界做工业,习惯了自己的技术栈:
- 上来就是微服务、Redis、Kafka、Elasticsearch 全套
- 不管需不需要,先把架构搞复杂再说
- 好不好用不一定,但技术名词听起来高级
三、你的 MES 场景,到底用不用?
回到你的情况:
- 4000 台设备 / 采集点
- 做 MES + OEE + 追溯
- 自己开发,团队不大
- 运维能力一般
结论:完全可以不用 Redis 和 MQ,直接数据库干
理由:
- ✅ 4000 采集点,数据量真不大
- 每秒几百条写入,OceanBase/TDengine 轻松扛
- 比很多互联网系统并发低多了
- ✅ 工业系统,稳定优先
- 少一个组件,少一个故障点
- 出问题好排查,不用猜是 Redis 挂了还是 MQ 堵了
- 运维简单,你自己就能搞定
- ✅ 传统 MES 都是这么做的
- 西门子、SAP 的 MES 也没说必须用 Redis
- 人家服务汽车、电子、半导体大厂,不比你规模小
- 实践证明,这条路走得通
- ✅ 真不够了再加也来得及
- 先跑起来,验证业务
- 数据量上来了、性能不够了,再加 MQ、Redis
- 架构演进,比一开始就搞复杂强
四、但有一个点要注意:数据采集的可靠性
不用 MQ 不代表不用考虑 "数据不丢" 的问题。
不用 MQ,怎么保证采集数据不丢?
应用层做兜底就行,不用上中间件:
- 本地文件缓存
- 采集到的数据先写本地文件
- 写数据库成功了再删
- 程序崩了、数据库挂了,重启继续写
- 简单可靠,比 MQ 好维护
- 批量写入 + 重试机制
- 攒一批再写,性能好
- 失败自动重试,重试多次还失败就存本地文件
- 人工或定时任务补写
- 设备端缓存
- 智能设备 / PLC 本身有缓存
- 网络断了,设备自己存着,通了再补传
- 很多工业设备自带这功能
五、一句话总结
你说得对,实际工厂的 MES 大多不用 Redis 和消息队列,传统架构跑了几十年了,稳得很。
你的规模,直接用 OceanBase + TDengine 干就行,不用纠结要不要加 Redis 和 MQ。
阅读剩余
THE END