做业务的系统都躲不开这类需求:满三百减五十,会员再打九折,新客首单立减;风控场景更夸张,几十条规则组合判断,业务方一周改三次。每次改规则都要改代码、走发布,开发排期排到下个月,业务方等得跳脚,技术改得心慌。
核心矛盾是:业务规则的变化频率和代码的发布频率根本不在一个节奏上,把易变的规则焊死在代码里,两边都受罪。 业界有三条主流路线:代码内规则抽象、嵌入式规则引擎、独立决策服务,灵活度和复杂度逐级上升。
原理: 不引入外部引擎,用设计模式把规则做成可插拔的策略类,规则参数(阈值、折扣率、生效时间)抽到数据库配置表,改参数不改代码,新规则才需要开发。
优点:
缺点:
适用场景: 规则数量少(几十条以内)、规则结构稳定、只是参数常变的场景。绝大多数促销、价格计算走到这一步就够了,别急着上引擎。
原理: 引入规则引擎类库嵌入应用内,规则用 DSL 或决策表描述,存在数据库或规则仓库里,运行时加载执行。改规则等于改数据,不用发版。Java 生态的 Drools、国产的 LiteFlow、QLExpress 都属于这类。
优点:
缺点:
适用场景: 规则上百条、组合复杂、变更频繁的风控、审批、计费类系统,有专职团队维护。这是"规则复杂度真的压不住了"之后的正解。
原理: 规则引擎独立部署成服务,多个业务系统远程调用;配套规则管理后台,业务人员可视化配置规则、灰度发布、版本管理。商业化产品或基于开源引擎自建平台都算。
优点:
缺点:
适用场景: 多业务线共用规则能力的大中型组织,规则变更诉求高频到"技术成为瓶颈"的程度。金融风控、电商营销中台是典型用户。
场景特征 | 推荐方案 |
|---|---|
规则几十条、结构稳定、参数常变 | 代码抽象 + 配置表 |
规则上百条、组合复杂、变更频繁 | 嵌入式规则引擎 |
多业务线复用、业务方自助配置 | 独立决策服务 |
一个常见的演进路径是三级跳:先配置表顶住,规则多到策略类写不动了再引入引擎,多团队抢规则管理权时再平台化。跳过中间阶段直接上平台,大概率是给自己找了个爹。
第一件:先盘清楚规则到底多复杂。 把现有规则列出来数一遍:多少条、几种条件组合模式、多久改一次。数据会告诉你需不需要引擎——很多团队盘完发现配置表就够了。
第二件:规则必须有版本和灰度。 不管哪种方案,规则变更要能记录版本、能灰度到部分流量、能一键回滚。促销规则配错多打了个折的的事故,几乎都死在"改完直接全量生效"上。
第三件:给规则配监控和审计。 每条规则的命中率、执行耗时、触发结果要可观测;谁改的、什么时候改的、改了什么要可审计。规则是业务逻辑,权限和留痕要求和改代码同级。
规则引擎解决的是"变化速度错配"的问题,不是炫技的道具。选型的标尺只有一条:当前规则的数量、复杂度和变更频率,配不配得上这个方案的重量。配置表能解决的别上引擎,引擎能解决的别建平台——过度设计的规则系统,比硬编码还难维护。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。