知识卡片
规则引擎应对海量组合规则的三个理由,及对微内核三设计点的映射
内容
规则引擎从结构上看也是[[微内核架构的三个设计关键点:插件管理、连接与通信]]的一种具体实现,执行引擎相当于微内核,负责解析配置好的业务流、执行其中的条件和规则。规则引擎在计费、保险、促销这类业务领域应用广泛,以电商促销为例,常见规则有”满100送50”“3件立减50”“3件8折”“第3件免费”“跨店满200减100”“新用户立减50”等,实际业务里完整列下来可能有几十上百种,再叠加各种排列组合,促销方案可能达到几百上千种——这种规模的业务如果完全靠写代码硬编码,开发效率根本跟不上业务变化的速度,而规则引擎能很好地应对这类需求,原因有三层:可扩展——引入规则引擎后业务逻辑和业务系统本身分离,扩展新业务功能不需要改动业务系统代码;易理解——规则用接近自然语言的方式描述,业务人员自己就能理解和操作,不像代码那样只有程序员才懂;高效率——规则引擎系统通常提供可视化的规则定制、审批、查询、管理界面,业务人员能自己快速配置新规则。规则引擎的运作流程是:开发人员把业务功能拆解提炼成多条规则、存入规则库;业务人员根据实际需要把这些规则排列组合、配置成业务流程、存入业务库;规则引擎读取执行这些业务流程来实现具体的业务功能。对照微内核架构的三个设计点:插件管理对应规则库——规则就是微内核架构里的插件、引擎就是内核,规则可以被引擎加载执行,规则通常存在数据库里;插件连接对应规则语言——就像程序员开发要用Java、C++这类语言,规则引擎也规定了专属的规则语言,业务人员基于这套语言编写规则文件,交由引擎加载执行,这套规则语言本身就是插件连接机制;插件通信对应数据流和事件流——因为单条规则不需要主动依赖其他规则,规则之间没有主动通信,每条规则只负责输出数据或事件,由引擎负责把这些数据/事件传递给下一条规则。目前最常用的开源规则引擎是JBoss Drools,用Java编写、基于Rete算法,社区活跃、执行速度快、兼容Java Rule Engine API(JSR-94),还提供基于Web的规则管理知识库Guvnor(支持版本控制和在线修改编译);但Drools号称简单易用,实际上其规则语言依然和编程语言比较接近,普通业务人员直接上手学习和理解成本仍然偏高,因此实践中通常需要在Drools基础上再做一层封装,把规则配置做成真正可视化的操作界面。
结构图:
flowchart TB
A["规则引擎为何能应对海量组合规则"]
A --> B["可扩展:业务逻辑与业务系统分离"]
A --> C["易理解:接近自然语言,业务人员可读"]
A --> D["高效率:可视化配置/审批/查询/管理"]
B --> E["规则引擎运作流程:<br/>开发拆解规则入规则库<br/>→业务人员组合配置成业务流程入业务库<br/>→引擎执行"]
C --> E
D --> E
E --> F["对照微内核三设计点"]
F --> F1["插件管理→规则库(规则=插件,引擎=内核)"]
F --> F2["插件连接→规则语言(专属DSL)"]
F --> F3["插件通信→数据流/事件流(引擎负责传递)"]