概述
规则引擎,全称 Business Rule Management System(BRMS)业务规则管理系统,主要思想是将业务决策|业务规则从应用程序中分离出来,使用预定义的语义模块编写业务决策|业务规则,在需要时进行配置、管理。
引入规则引擎后,业务规则不再以硬编码在业务处理代码中,而是完全独立于应用程序,存储在规则库|知识库(常见的比如drl文件、数据库)中。业务规则被加载到规则引擎中供应用系统调用,业务人员可以像管理数据一样对业务规则进行管理,可以对业务规则进行查询、添加、更新等操作。
优缺点
优点
- 将业务规则、业务处理代码分离开来,复杂的业务规则不用硬编码到应用代码中,降低了系统、业务处理的复杂度。
- 规则引擎只关心业务规则,相对独立,可以由业务分析人员来管理、维护,开发人员无需陷入到复杂业务规则的理解、实现中,分工合作、专人专事大大提升效率。
- 业务规则变更时无需修改业务处理代码,直接修改知识库中的业务规则即可,减少了硬编码业务规则带来的维护、扩展成本,可以快速实现需求。
- 将业务规则单独保存在知识库中,便于统一管理、维护,不重启业务服务就可以对业务规则进行扩展、修改,十分方便。
说明:更新规则时不需要重启业务服务|应用,但需要重启规则引擎或者使用事件通知、下发之类的机制让规则引擎重新加载修改过的规则。
规则引擎的缺点
- 接入成本高
应用场景
适用场景
- 规则复杂,规则可能会频繁变更,项目本身需要根据规则的变化完成快速、低成本的更新;
- 可用于数据校验、数据过滤、消息路由、业务规则运算等规则较多的场景,不局限于业务活动规则。
常见场景
- 风控:银行等金融机构的开户、贷款的风险评估,额度、信用评估;
- 运营活动:满减、打折、加购价的价格计算;
- 政策满足校验:积分落户等政策规则复杂的场景。
引入方式
通常是把规则引擎作为一个单独的服务,负责规则的维护、加载,对外提供规则运算的接口。
示例
- 规则引擎对外提供一个计算订单最终价格的rpc接口,用于计算订单在一系列满减、打折规则后的最终价格;
- 调用方通过rpc调用规则引擎的这个接口,传入包含订单信息的Order对象,规则引起的这个接口对Order对象进行规则运算,返回一个包含订单最终价格的Order对象给调用方。