规则引擎组内分享
发布日期:2021-06-29 05:35:06 浏览次数:2 分类:技术文章

本文共 2630 字,大约阅读时间需要 8 分钟。

前言

Nike 创始人 Phil Knight 曾经说过:“If you are not growing , then you are dying”,企业增长是一个永恒的话题。

背景

现在我们很多系统的规则处理都是Case By Case的解决方式,不能形成一个完整的系统。随着实时运营业务开展,相关运营活动数量激增,线上维护着多套相似代码,一方面破坏了(Don’t Repeat Yourself)原则,另一方面线上维护成本也呈线性增长,系统逐渐无法支撑当前的需求。

系统建设提出了以下挑战:

  • 硬编码活动规则的方式产生了大量重复代码,开发成本较高,需求响应时间较长。
  • 业务规则修改困难,调整运营活动条件需要修改代码并重新上线,对于复杂逻辑处理时间长。
  • 缺乏完善统一的日志机制,很难在客诉或者业务异常上直接定位问题,业务线多的话问题多就有的忙。

需求场景

在运营实时触达需求中,存在如下具有代表性的业务场景:

对于活动类需求满足某种情况下做 do action对于像规则系统的短信加挂,素材展示的when then 操作对于用户行为的积累,节点流转结果的仲裁。

技术调研

规则引擎的必要性

提高灵活度需要从业务规则和系统代码解耦和入手,规则和代码耦合直接导致了重复代码增多、业务规则修改困难等问题。那如何将业务规则和系统代码解耦和呢?我们想到使用规则引擎解决这一问题。

规则引擎是处理复杂规则集合的引擎。通过输入一些基础事件,以推演或者归纳等方式,得到最终的执行结果。规则引擎的核心作用在于将复杂、易变的规则从系统中抽离出来,由灵活可变的规则来描述业务需求。由于很多业务场景,包括酒旅运营实时触达场景,规则处理的输入或触发条件是事件,且事件间有依赖或时序的关系,所以规则引擎经常和(复合事件处理)结合起来使用。

CEP通过对多个简单事件进行组合分析、处理,利用事件的相互关系,找出有意义的事件,从而得出结论。文章最前面背景中提到的业务场景,通过多次规则处理,将单一事件组合成具有业务含义的复合事件,规则引擎及CEP可以满足业务场景的具体需求,将其引入可以提高系统面对需求变化的灵活度。

规则引擎是面向技术人员的工具。目前技术人员为什么会选择规则引擎来使用,主要是基于如下情形来考虑:

    1、业务逻辑从程序代码中脱离出来。通过配置来实现业务规则。

    2、业务规则的变更,可以直接由用户通过web界面来修改和变更。

    针对这一类需求情况,其实我们有一般由以下的几种可选方案:

    1、选择规则引擎来实现。

          现有的规则引擎产品一般都能满足以上这两种要求。可以不用代码,比如Java来实现业务逻辑,而采用规则语言通过规则配置器来完成。用户需要变更时,一般都会提供C/S或者B/S版本的规则配置器来实现。

    2、采用动态语言:

          直接采用JS或者其他的动态语言BeanShell,jruby,jython以及groovy等其他jvm语言,都会通过相应的编译器或是解释器转化为.class,然后再jvm上运行等,也可以实现不通过Java代码来实现业务逻辑。通过也可以提供一个编辑界面,让用户来进行修改。

    3、表格配置或者自定义公式

           通过定义一个表格或者加上一定的自定义公式语法来实现具体的逻辑。

规则引擎调研

在设计规则引擎前,我们对业界已有的规则引擎,主要包括和进行了调研。

1.Drools

Drools开始于规则引擎,后引入Drools Fusion模块提供CEP的功能。https://www.ibm.com/developerworks/cn/opensource/os-rulesengines/index.html优势    功能较为完善,具有如系统监控、操作平台等功能。劣势    学习曲线陡峭,其引入的DRL语言较复杂,独立的系统很难进行二次开发。https://juejin.im/post/5987c0345188256dd0199ec6

2.Avitor

 

是一个高性能、轻量级的java语言实现的表达式求值引擎,主要用于各种表达式的动态求值。优势    高性能、轻量级学习成本低,支持自定义函数。劣势    仅支持对于表达式的执行以及执行结果的输出,后续 action操作需要业务系统自己实现。drools&Avitor的练习demo:https://gitee.com/chuduwriter/rules.git

其他

IBM的ODM(商用)提供非常丰富的编译器插件,

OpenL Tablets:

是一个业务规则管理系统和一个基于Excel决策表的业务规则引擎

Easy Rules:

是一个简单的Java规则引擎,提供轻量级和基于POJO的框架来定义业务。它可以通过使用复合模式从原始规则创建复杂规则。

Esper:

Esper设计目标为CEP的轻量级解决方案,可以方便的嵌入服务中,提供CEP功能。https://blog.csdn.net/weixin_42488570/article/details/80748199

 

规则引擎核心组件

   在Java世界中,大多数规则引擎库都实现了称为的 JSR94标准,任何一个规则引擎都需要很好地解决规则的推理机制 和规则条件匹配的效率问题 。规则条件匹配的效率决定了引擎的性能,引擎需要迅速测试工作区中的数据对象,从加载的规则集中发现符合条件的规则,生成规则执行实例。1982 年美国卡耐基 • 梅隆大学的 Charles L. Forgy 发明了一种叫 Rete 算法,很好地解决了这方面的问题。目前世界顶尖的商用业务规则引擎产品基本上都使用 Rete 算法。

总结与展望

    当然以上对于规则引擎的介绍还是比较显浅的,适合对各个规则引擎的应用了解入门,选择适合业务需要的才是最好的。规则系统都是航母威力巨大,但是没有标签系统的巡航以及监控系统的续航来说的话,力气是使不出来的,配套来说要有监控,配置,标签画像,报警以及时间窗功能的支持。

    在人口红利消退的下半场,用户增长是公共难题。硅谷出现了“Growth Hacker”,中国出现了“精细化运营”,两岸不约而同的出现了以数据为基础,以人工智能为抓手的新增长模式。潜客发掘,流失召回,用户留存,状态跃迁,一批新的模型被定义出来,成为先进增长模式的关键词。流量为王的时代还没有过去,与君共勉。

 

注:有些技术细节不便在本文中展示体现,如有问题可以评论私信,必有回响。

转载地址:https://blog.csdn.net/zhizunmimi/article/details/96422044 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:NRF52832笔记(1) ADC使用
下一篇:几款开源的ETL工具及ELT初探

发表评论

最新留言

不错!
[***.144.177.141]2024年04月24日 03时59分34秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章