事先声明:小白开发学习的记录博客,博客的文章质量可能一般,望各位大佬见谅,也可以帮小弟给给建议,嘻嘻。
一、核心定义:是什么?
规则引擎是一种嵌入在应用程序中的组件,它实现了将业务决策(业务规则)从应用程序代码中分离出来,并使用预定义的语义模块来编写、管理和执行这些规则。 就像一个独立、专业的“决策大脑”。
二、核心思想:解耦
在传统开发过程中,业务规则(比如如果用户是vip并且订单金额大于100,那么就打折)会以if...else 的形式硬编码在程序代码里。
这种方式带来一定问题:
- 变更困难
- 难以维护:大量的条件判断嵌套使得代码冗长、复杂、可读性差,也就是屎山代码
- 业务人员无法参与:规则逻辑只有程序员能看懂和修改,业务人员无法直接管理他们熟悉的业务规则
规则引擎的解决方案: 将经常变化的业务规则抽离出来,变成一个个独立的、可视化的配置点。业务人员(经过简单的培训)可以使用类似自然语言的界面来管理和修改规则,而无需改动核心代码。规则引擎负责解析和执行这些规则。
三、核心组成部分:里面有什么?
一个典型的规则引擎包含三大核心部分:
- 事实:输入到规则引擎中的数据对象,即被规则所处理的对象。比如你的“用户对象” “订单对象” “商品对象”
- 规则:业务决策的逻辑本身
- 规则库:存储所有规则的集合
- 推理引擎:规则引擎的核心,负责匹配规则和执行规则。它通过模式匹配器将“事实”与规则库中的“规则”进行匹配,对于匹配成功的规则,调度其执行。
四、工作原理:它是怎么工作的?
- 应用程序将业务数据(Fact)传入规则引擎。
- 推理引擎根据匹配算法(如RETE算法,一种高效的模式匹配算法),将数据与规则库中的所有规则进行比对。
- 找到所有条件(LHS)被满足的规则,并将其激活,放入一个“议程(Agenda)”中。
- 根据冲突解决策略(如优先级、复杂度等)决定执行议程中规则的顺序。
- 按顺序执行被激活规则的RHS部分(
then后面的动作),从而改变Fact或触发外部操作。 - 将处理后的结果返回给应用程序。
五、常见应用场景
- 风控系统:
if(交易金额 > 阈值 && 交易地点异常)then(触发人工审核)。 - 促销与定价系统(与你项目高度相关):
if(商品参与活动 && 库存 > 0 && 用户有资格)then(应用折扣价)。你的“规则树模板”和“策略模式”就是简化版的规则引擎实践。 - 信用评估:根据用户的收入、负债、历史信用等数据,自动计算信用评分和贷款额度。
- 智能报警:
if(服务器CPU > 90% 持续5分钟)then(发送告警邮件并重启服务)。