规则引擎的实现

规则引擎的技术创新说明

背景

         致力于为客户提供 客户忠诚度计划的科技,几年来为很多包括邮电、银行、航空等不同行业客户提供的 积分商城的 开发与运营工作,得到了客户的广大认可。但如何为客户提供 积分计划(即客户忠诚度计划)?而且,不同行业的积分计划输入要素(如航空关心不同座舱,银行可能关心不同的卡片等级),积分逻辑更是不同(按单笔奖励积分,按一定区间次数或合计额度奖励等)。势必涉及到不同行业积分计划的定制化,如何定制化后不必重启系统,而使业务人员能方便的管理积分计划?所有这些需求,都使得 有必要开发一套 积分计划引擎(规则引擎),使得可以面对不同行业的不同逻辑的积分计划。我在加入科技后,最初以xx积分需求为切入点,开发了 公司自主技术的 规则引擎组件。

规则引擎定义

         规则引擎是一套可以运行很多规则模板(以下简称模板)的引擎系统,被用来运行不同行业不同规则和逻辑的。不必对每个行业重新开发规则系统,只开发 发生变化的 模板部分即可,缩短了对不同规则的定制化开发时间,提高了实施效率。

 

 

结构以及设计思路

规则引擎就是一套计算框架,使得维护规则逻辑从代码中分离出来,方便的维护规则逻辑。

引擎结构如下:

引擎部分(整体部分):

模板自动加载(无需重启)

将模板编译后的class文件保存在共享文件系统中,而非java虚拟机的classpath中。这样可以动态加载类,而不需要重新启动系统。保存在共享文件系统中的好处,在于在集群环境中都可以访问到这个class

到文件系统加载类,需要用到动态类加载技术。

 

规则常驻内存

每当规则发送变化,更新内存中的规则。

整点(整日)扫描规则,对于 需要启动的规则进行加载

运行规则时,先从内存中读取,内存没有再到文件系统加载。

 

 

提供session数据框架

提供key-value结构的session数据,并提供管理功能。

 

模板部分(积分规则)

输入要素定制化

 

定义基本交易类型PiaolTrade ,要素含常用的用户id、交易码、交易时间、交易地点、交易送达终端类型、交易涉及商品的数量、名称、金额;其他行业可以继承这个对象并扩展。

 

引擎并不知道具体业务对象,模板中对应具体业务对象。

 

输出要素固定

输出要素为:

计算结果是否成功,

所获积分,

备注的文本信息

 

可以操作session数据

使用引擎提供的对session数据读取、保存操作。

积分中间数据,即上面提到的session数据。

 

待积分业务流水:送到规则引擎的外部业务系统的流水。

计算计算结果:即模板中的输出结果。

 

  规则参数自动生成

因为不同模板的参数不同,需要根据基于特征字模式匹配,自动识别出模板中的参数,供业务人员输入。

如对规则逻辑代码:

        

String 不积分商户=rule.parameters.get(“不积分商户”);//@参数说明@不积分的商户,用逗号隔开

将自动识别出 不积分商户这个参数,以及这个参数的解释“不积分的商户,用逗号隔开”.

 

 

好处

针对不同行业可以定义不同的业务对象。

定义不同的积分逻辑

模板在线上传,新建规则自动生效

积分计划逻辑常驻内存,无需访问硬盘,极速计算。经北京核心团队测试人员测试,处理500的并发游刃有余。

如何使用

业务人员根据市场需要,书写规则逻辑的文件。

>模板工程师根据市场提供的逻辑文件,编写 对应的模板(为java文件),测试并上传。

 

       1) 可用得到交易对象,规则参数值

       2)书写逻辑。包括数值、字符的比较判断,字符的包含判断,数值的四则运算等等。

       3)写返回的积分结果对象。

 

 

业务选择模板,确定模板中的参数(如积分比例,哪些pos要过滤等)建立一条规则。

引擎自动加载这条规则,并负责它的解释。

当业务系统的交易数据送到引擎时,引擎将该业务数据和模板结合并执行模板。

引擎输出的积分,可以外接账户系统(也可以不接),进行积分入账。

        

应用

积分奖励计划

其他 所有 基于 使用给定规则,做判断或计算的任何场所。

如抽奖(定义各等级奖品抽中概率、奖品数量、单用户抽中次数)。

商城各种活动规则等。

应用案例

         基于此引擎,

2015年,开发了xx规则模板:

连续签到奖励,下单奖励等。

2015年夏,在积分1.5版本中,开发了中心端奖励模板:

注册奖励、推荐奖励、积分转入转出奖励、积分消费奖励、积分充值奖励。

 

2016年,在积分商城中增加的抽奖互动活动中,开发的抽奖模板,也是靠此引擎运行。

                                                   

                                                                                             邢立军,2016.4

猜你喜欢

转载自xinglijun1973.iteye.com/blog/2289579