
前言:我上家公司是做物联网的,任职在IOT部门,业务上针对不同类型的燃气表,水表,报警器等有不同协议,其中又包含不同厂家的表和自己公司的表。针对不同的协议,如何解析不同的协议头帧,根据头帧进行不同的复杂业务处理,后来引入了Drools规则引擎,通过规则的逻辑和数据的分离以及可扩展解决问题。
目前所处为淘系技术部负责天猫奢品的业务,业务背景如下:业务包含天猫奢品频道,奢品折扣频道,天猫奢品官方直营旗舰店,魅力惠旗舰店,魅力惠APP等。基于业务场景下会员分为店铺会员,APP会员,天猫奢品行业会员等,而业务需要进行会员精细化的运营,通过不同的会员等级享受不同的权益,而相同的等级还需要做到根据偏好做到千人多权,如何根据复杂的业务需求变化更加精准的进行匹配,考虑Drools规则的逻辑数据的分离和可扩展性,接下来也会在天猫奢品的相关的会员模块中和组内成员探讨是否适合引入。下面是一些基于业务场景的总结和分享。
引入
▐ 问题引入
天猫奢品业务方为了吸引更多的新客,和提高会员的活跃度,做了一期活动,通过购买天猫奢品频道内的任意商品就赠送特殊积分,积分可以直接兑换限量的奢品商品。假如业务方给的规则如下:

主刃同学一看,这需求果然简单呀,作为团队的核心开发,这不就是小case,5分钟搞定,送赠品的简单代码如下:
public void exchangeGift(Integer points) {
if (points < 100) {
System.out.println("无商品");
} else if (points > 100 && points <= 200) {
System.out.println("Dior限量口红");
} else if (points > 200 && points <= 300) {
System.out.println("TF限量口红");
} else if (points > 300 && points <= 400) {
System.out.println("SK-II套装");
} else if (points > 400 && points <= 500) {
System.out.println("MCM双肩包");
} else if (points > 500) {
System.out.println("RADO雷达限量表");
}
}
活动进行了一天,运营发现Dior限量版口红被兑换的很多,即将超出预期,业务方根据实际情况想改变规则,规则要求在各个层级上各加200分从而促进更多的消费。

主刃一看改动不大,于是五分钟后修改完代码并经测试后发布上线。活动又进行了一天,运营人员通过后台监控发现提到200分后,用户达成比较少,想再现有基础上再降100分。没办法还的改不是,主刃同学这次把配置数据放入到了阿里集团的配置中心diamond中,当运营改策略的,只要改一下Diamond的值就可以了。
核心代码编程了这样:
public void exchangeGift(Integer points) {
if (points < CommDiamondProperty.getInstance().getLevelOne()) {
System.out.println("无商品");
} else if (points > CommDiamondProperty.getInstance().getLevelOne() && points <= CommDiamondProperty.getInstance().getLevelTwo()) {
System.out.println("Dior限量口红");
} else if (points > CommDiamondProperty.getInstance().getLevelTwo() && points <= CommDiamondProperty.getInstance().getLevelThree()) {
System.out.println("TF限量口红");
} else if (points > CommDiamondProperty.getInstance().getLevelThree() && points <= CommDiamondProperty.getInstance().getLevelFour()) {
System.out.println("SK-II套装");
} else if (points > CommDiamondProperty.getInstance().getLevelFour() && points <= CommDiamondProperty.getInstance().getLevelFive()) {
System.out.println("MCM双肩包");
} else if (points > CommDiamondProperty.getInstance().getLevelFive()) {
System.out.println("RADO雷达限量表");
}
}
新功能上线后,运营侧提出这次的分层太少了,BD到了更多的好的赠品,需要更加精细化的运营,由以前的5组变成10组,主刃此刻的心情:kao ...
那么是否有什么技术可以将活动规则和代码解耦,不管规则如何变化,执行端不用动。那就是规则引擎,那么规则引擎到底是什么东西呢?我们来看看。
规则引擎
▐ 相关介绍
目前对领域模型的常见抽象方式是面向对象思想,即简单的来说把业务逻辑抽象为对象、对象的属性和对象的方法。这样规则跟整个系统耦合,修改规则需要走全Case的开发测试流程发布流程,对于频繁修改的规则效率比较低,为了解决这个问题就出现了规则引擎。
今天分享的Drools,最早由Jboss开发,目前由Redhat开源的规则引擎,选择分享Drools的原因是它是Redhat的KIE Group中的组件之一,可以比较方便的跟另一个组件JBPM工作流配合用于管理复杂的规则流;同时Drools的推理策略算法在经典Rete算法以及其它算法的基础上做了多个版本的增强,目前支持结合正向推理和反向推理优点的混合推理。
规则引擎主要完成的就是将业务规则从代码中分离出来。在规则
使用Drools规则引擎实现业务规则灵活管理

本文介绍了如何利用Drools规则引擎解决复杂业务场景中的规则管理问题,通过实例展示了在天猫奢品业务中,如何利用Drools将活动规则与代码解耦,实现规则的动态调整,从而提高系统的灵活性和可维护性。文章详细讲解了Drools的工作原理,包括Rete算法,以及Drools的核心优势和使用方法。
最低0.47元/天 解锁文章
714

被折叠的 条评论
为什么被折叠?



