业务代码分离:规则引擎(BRMS)

痛点

做业务开发的程序员经常会因为业务的频繁变动而变更业务代码。每一次的变动都要涉及开发、测试、发版,不仅效率低,而且容易产生Bug。特别是对于复杂度高的业务逻辑(比如电商平台的营销活动规则,风控业务规则等),直接编码业务规则会让代码中充斥着各种IF-ELSE,代码的维护性和扩展性非常差。有没有好的系统设计来将业务逻辑从代码中分离出来,让代码可以变得稳定易维护,且让业务规则可以灵活变更呢?

解法

解决上述痛点的答案便是业务规则引擎,全称是业务规则管理系统(Business Rule Management System,简称BRMS)。他的主要思想是:将应用程序中的业务决策部分分离出来,使用预定义的语义模块编写业务规则,由用户或开发在需要时进行配置、管理。简单说,就是把代码化业务规则,抽象成数据化的规则库加执行引擎。执行引擎固定不变,通过加载和解析业务规则,对输入数据执行规则条件,输出结果。如下图所示。
在这里插入图片描述

BRMS除了将业务规则和程序代码解耦外,更重要的是,数据化的规则库可以交由业务员而非程序员配置和管理,做到让最懂业务的人来定义业务规则。
需要注意的是,BRMS不是指某个具体的软件系统或技术框架,而是像OA、CRM、ERP一样代表解决某个领域问题的一类系统。作为这类系统的具体实现,市面上有多款开源或企业级BRMS可供选择。

开源BRMS

开源BRMS有很多,下面列举了几个Java技术栈中比较常用的BRMS。
在这里插入图片描述

简单业务场景可以使用表达式求值引擎,它的思想是把程序中的代码提取出来,抽象成表达式,然后解析和执行表达式求得结果。它能实现业务规则和程序代码的分离。但表达式本质上也是另一种形式的代码,对规则的表达、管理、执行等方面没有效率上的提升。
DROOLS是业界成熟的BRMS,功能强大,社区活跃,适用于复杂业务规则场景,比如风控系统、保险理赔、财务审计。对于相对简单的业务场景使用会感觉有杀鸡用牛刀的感觉。因为它太重了,配置和使用都有较大的学习成本,而且它本身是一款成熟的软件,虽然开源,但是想做改造和二次开发的成本并不低。

EasyRules是一款面向开发,简单轻量级的Java规则引擎框架库,可以帮助开发快速将业务代码分离出来,提高代码的扩张性和可维护性。

除了这几款BRMS还有其他一些选择以及商业BRMS。比如VisualRules ,iLog,URule, RuleBook等。当然,如果有能力也可以选择自研。

自研

自研一套BRMS系统并不难,核心解决两点:表达和执行。很容易想到可以借助表达式求值引擎实现,这个方案实现起来比较容易,但是缺点也很明显(如上所述)。如果想研发一套高性能,高效率的BRMS可以采用DROOLS的技术方案。它的核心是RETE算法。

Rete在拉丁语中是net,网络的意思。Rete 算法是卡内基梅隆大学的 Charles L.Forgy 博士在 1974 年发表的论文中所阐述的算法。该算法提供了专家系统的一个高效实现。RETE算法可以分为两部分:规则编译(rule compilation)和运行时执行(runtime execution)。

  • 规则编译,指根据规则集生成推理网络的过程
  • 运行时执行,指将数据送入推理网络进行筛选的过程

相关概念:

  • 事实(fact):对象之间及对象属性之间的关系
  • 规则(rule):是由条件和结论构成的推理语句,一般表示为if…Then。一个规则的if部分称为LHS(left-hand-side),then部分称为RHS(right
    hand side)。
  • 模式(module):就是指IF语句的条件。这里IF条件可能是几个更小的条件组成的大条件。模式就是指的不能在继续分割下去的最小的原子条件。

RETE推理网络的生成过程:从规则集{规则1,规则2………}中拿出一条来,根据一定算法,变成RETE推理网络的节点。不断循环将所有规则都处理完,RETE推理网络就生成了。RETE网络主要分为两个部分,alpha网络和beta网络。如下图所示。
在这里插入图片描述

在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值