三亩地 三亩地SAN MU DI · CODE DIARY
ARTICLE DETAIL

日记详情

真实记录编程学习的某一天,欢迎挑你感兴趣的翻一翻。

JVS-Rules规则引擎视角:制造业的业务规则,为什么不该走“编译→发版“这条路

JVS-Rules规则引擎视角:制造业的业务规则,为什么不该走“编译→发版“这条路

跟一个做MES开发的朋友聊天,他讲了一件让他很崩溃的事。

他们给一家电子厂做质检系统,质检判定规则写在代码里。客户每个月至少改两次判定标准——有时候是放宽一个参数,有时候是加一个新的缺陷类别。

每次改规则,流程是这样的:

  1. 客户邮件通知→品质部确认→提需求给IT
  2. IT评估影响范围→修改代码→本地测试
  3. 测试通过→发版到测试环境→品质部验收
  4. 验收通过→发版到生产环境→上线

一个参数修改,最快一周,慢了两周。

他跟我说:"最讽刺的是,改的内容可能就是决策表里的一个数字,从0.8改成1.0。但这个数字被编译在代码里,就得走完整的软件发布流程。"

一、规则编译进代码,技术上是"对"的

先说公平话。

把业务规则写成代码,在技术上是完全正确的做法。代码可以编译、可以优化、可以跟系统深度集成。对于变化不频繁的规则,硬编码是最简单、最高效的实现方式。

问题在于:制造业的业务规则,变化频率远超大多数人的预期。

前面说了,质检标准每个月改、报价逻辑每个季度调、预警阈值随着设备老化要动态更新、排产约束随着订单结构变化要重新配置。

这些规则的变化频率,跟软件发版的频率完全不在一个量级。

规则可能每天变一次,但发版可能每两周一次。中间的时间差,就是"系统规则跟实际业务脱节"的时间窗口。

二、编译架构的根本矛盾

从技术架构的角度看,"规则编译进代码"的根本矛盾是:规则的变更周期和系统的发布周期不匹配。

编译型架构的特点是什么?代码写完→编译器翻译成机器码→打包部署→运行。这个过程保证了执行效率和系统稳定性,但也意味着:每一次逻辑变更,都需要重新走一遍"编译→部署"的流程。

对于核心系统逻辑(比如数据模型、接口协议、权限框架),这种架构完全没问题。这些东西本来就不该频繁变动。

但对于业务规则(比如"这个缺陷在A级客户那里算致命缺陷,在C级客户那里算轻微缺陷"),编译型架构就太重了。这条规则可能下周就变了——因为客户更新了标准。

本质上,业务规则和系统逻辑是两种不同性质的东西,不该用同一种技术架构来管理。

系统逻辑是"基础设施",变化频率低,稳定性优先,适合编译型架构。

业务规则是"上层应用",变化频率高,灵活性优先,适合配置化架构。

三、"配置即生效"的技术实现

规则引擎要解决的核心技术问题,就是让业务规则从"编译型"变成"配置型"。

具体来说,就是实现一件事:规则的变更不经过编译环节,直接生效。

技术上怎么做到?

1. 规则和数据分离

传统的代码架构里,规则和数据混在一起。改规则就要改代码。

规则引擎的核心设计原则是:规则以"数据"的形式存在,而不是以"代码"的形式存在。规则存储在数据库或配置文件中,系统运行时动态加载规则,而不是在编译时把规则写死。

2. 规则的解释执行

规则不以编译后的机器码形式存在,而是以"可被解释执行"的结构化形式存在——决策表、决策树、评分卡。

系统在运行时读取这些结构化的规则定义,通过规则解释器来执行。规则变了,只需要更新规则定义,不需要重新编译。

3. 规则版本的热切换

规则引擎支持多版本规则并存。新版本规则配置好后,可以立即切换生效,也可以定时切换。切换过程不需要重启系统,不需要重新部署。

这就是所谓的"热部署"——规则变更实时生效,零停机。

4. 规则执行的审计追踪

每次规则执行时,引擎自动记录:输入了什么数据、命中了哪条规则、为什么得出这个结果。这些记录本身就是"规则执行日志",可以用于审计追溯和问题排查。

四、对制造业意味着什么

技术架构的选择,最终影响的是业务层面的能力。

响应速度——规则变更从"两周发一次版"变成"配置完即时生效"。业务变化多快,规则响应就有多快。

维护成本——规则不再是代码的一部分,不需要开发人员介入。业务人员自己就能配置和维护规则。

风险控制——规则配置完可以先模拟测试,用历史数据跑一遍验证没问题再上线。避免了"改一行代码,出了一个大Bug"的风险。

知识沉淀——规则以结构化的形式存在,而不是散落在代码注释和开发人员的脑子里。人可以走,规则还在。

五、结语

把业务规则编译进代码,技术上没有错。但对于变化频繁的制造业业务规则来说,这个技术架构太重了。

制造业需要的是一种"配置即生效"的技术架构——规则以数据形式存在,通过解释执行而非编译执行,变更即时生效,不经过软件发布流程。

这不是一个"功能"层面的需求,而是一个"技术架构"层面的选择。

选对了架构,业务灵活性是自然的结果。选错了架构,再多的功能也跟不上业务变化的节奏。

← 返回列表