在传统的报告中,通常采用固定的模板和结构,无法满足在N品类中的灵活诉求。而轻质检报告的目标是提供一种自由组合和解析的方式,可以按照不同的诉求,自由选择和配置去不同的质检报告呈现出来,同时也需要确保报告的逻辑和数据的准确性,避免信息的混乱或错误的解读,为此转转轻质检报告可能需要建立灵活的数据解析和处理引擎。
N品类在官方验卖场的质检报告如图所示:
质检报告
1.2 组件式规则引擎及其应用潜力
组件式规则引擎是一种将规则拆分为独立组件并通过组合和配置来实现业务逻辑的规则引擎。它把规则表示为可重用和可配置的组件,每个组件负责处理一个特定的规则或规则集合。这些规则组件可以通过组合、连接和配置来构建复杂的业务规则,以满足不同的需求和场景。
在公司的系统中充斥着复杂且丰富多样的业务逻辑,承载的也是公司各种各样的核心业务功能,每个复杂的业务都涉及到RPC的调用,不同步骤不同的业务规则的处理,数据的运算等。随着时间的推移和版本的地迭代维护的成本会越来越高。代码的抽象,复用情况也会越来越差,各个模块耦合度变高。逻辑的变动,会影响到其他模块,也会带来一定的测试成本。
先看个在电商行业中简单的例子:
假设平台希望根据不同的用户类型和购买行为来发放优惠券。以下是一个组件式规则引擎的简单编排例子:
- 规则组件(A): 用户类型规则组件
条件:用户类型为新用户
动作:发放新用户专享优惠券
- 规则组件(B): 购买金额规则组件
条件:购买金额超过一定阈值
动作:发放满减优惠券
- 规则组件(C): 商品类别规则组件
条件:购买特定商品类别
动作:发放该商品类别相关的优惠券
- 规则组件(D): 优惠券叠加规则组件
条件:用户已经拥有一张优惠券
动作:根据叠加规则判断是否发放额外的优惠券
以上的A,B,C,D四个组件,按照顺序执行。
规则编排
在例子中,每个规则组件都是一个独立的组件,负责处理特定的规则。它们可以通过组合和配置来构建复杂的优惠券发放规则。
通过组件式规则引擎的编排,平台可以根据不同的条件和业务规则,灵活地发放不同类型的优惠券。同时,这种模块化的设计让规则的管理和维护更加方便,可以根据业务需求进行灵活的调整和扩展,比如实时的去增加一个E组件,或者去掉一个B组件,在或者C可依赖AB,AB并发执行等。
2 组件式规则引擎概述
2.1 LiteFlow的核心概念和特点
LiteFlow是一款组件式规则引擎,它通过将规则拆分为独立的组件,以灵活、可组合的方式进行规则编排和执行。以下是该规则引擎的核心概念和特点:
- LiteFlow的核心流程核心流程
- 组件(Component - A B C):每个组件独立处理特定的规则逻辑
- 条件(Condition):条件用于判断是否满足某个规则的触发条件。
- 动作(Action):动作是规则触发后执行的操作。
实际业务中可以理解为每个处理的Class类标记为一个LiteFlow中的一个组件规则,定义如下,满足了条件就执行相应动作。
@Slf4j
@LiteflowComponent(FlowNodeVar.DYNAMIC_APPOINT)
public class DynamicAppointCmp extends NodeComponent {
// 条件
isAccess();
// 动作
process();
}
- 编排(Orchestration):编排是指将多个组件按照特定的顺序和逻辑组合起来形成规则流程。
例如:
THEN (A,B,C,D) // 串行执行四个节点。
WHEN (A,B,C,D) // 并行执行四个节点。
SWITCH(A).to(B, C, D) // 利用A的结果去选择执行B,C,D任一节点。
THEN(IF(X, A),B) // 如果X=TRUE执行A, 否则执行B
....
能够非常灵活的去定义组件的执行流程, 如下图所示A, B, C, D四个规则节点,可以通过不同的Chain-1, Chain-2去编排,而Chain的内部就是各样的WHEN THEN 等条件去编排各个节点而设立的执行规则。
- 编排元数据信息
- 数据上下文(Data Context):LiteFlow使用数据上下文来共享和传递数据(多线程隔离)。
上下文
- 执行引擎(Execution Engine):执行引擎是LiteFlow的核心组件,负责解析规则流程,按照定义的顺序执行组件,并处理组件间的数据传递和上下文管理。执行引擎
总的来说,LiteFlow组件式规则引擎的核心概念是组件、编排、条件和动作。它具有灵活的规则组合和配置能力,支持数据上下文共享和传递,以及可扩展性。这些特点使得LiteFlow成为一个强大而灵活的规则引擎,适用于各种业务场景的规则编排和执行。
2.2 为什么选择该引擎处理轻质检报告
常用的规则引擎组件,例如:drools、easy-rules、liteFlow等。根据自己的业务场景选择合适的组件无疑是最好的。在转转寄卖中用户物品质检完成后卖法的判断(寄卖,回收...)选择了easy-rules,因为其业务逻辑中存在过多的if else 逻辑判断,它能够简练的把规则定义好按照规则执行。但在轻质检报告中选用liteflow 处理主要考虑几个方面:
- 实时的增加组件,移除组件,编配不同场景的规则执行链,这将带来的好处是我可以随时的调整报告所呈现的内容信息,各种各样的规则执行链也会对应各样的报告页面或业务数据的依赖场景。
- 各个组件之间具备并发处理能力且数据上下文线程隔离。
- 规则定义能够直接集成第三方比如Apollo,Nacos,Etcd,Zookeeper中,且具备热刷新机制,规则变化,无需重启应用,即时去改变报告的规则。高并发下不会因为刷新规则导致正在执行的规则有任何错乱所带来报告展示问题。
- 框架内自带一个监控,能够知道每个组件的运行耗时排行,可以感知某个规则出现的问题。
3 轻质检报告处理流程设计
3.1 规则和链路处理的简述
首先在初始化阶段,会将质检报告生成的规则存储插件(Apollo)中,规则通过解析器加载到规则引擎,然后通过构建器构建工程中定义的各个组件(A,B,C等)节点和规则执行链进行加载,执行器获得执行链路以及执行条件和规则节点,最终按照业务请求的执行链,进行节点执行和上下文的数据交换。如下图所示:
规则的定义和执行
3.2 在轻质检报告中配置和集成LiteFlow
- 集成数据源和服务:LiteFlow通常需要与外部数据源和服务进行集成。涉及连接配置中心、RPC等操作,以获取所需的数据和执行规则所需的规则。
图片
- 执行器初始化
- 设计规则组件:根据规则需求,设计和定义规则组件。每个规则组件负责处理特定的规则逻辑,具备条件判断、动作执行、数据转换等。规则组件具备独立性和可重用性。
报告规则划分
- 创建规则流程:在LiteFlow中创建规则流程,将规则组件按照需要的顺序进行编排。规则流程定义了规则的执行顺序和流程控制逻辑。
质检报告规则编排
这里只列举了两种报告的编排形式,在内部系统流程中还有其他场景的一些编排。
- 配置中心配置规则组件:对每个规则组件进行配置,设置条件、定义动作和指定数据上下文。
3.3 进一步提高轻质检报告配置能力
通过对一个质检组(外观检测)的icon和汇总描述文案进行配置化,通过两种存储在配置中心的规则,使得质检项的汇总提示信息进行自定义配置化处理。
报告细节处理
4 总结
本文介绍了转转寄卖业务下轻质检报告采用LiteFlow编排式规则引擎的实践。在N品类质检能力上线以来,多次的质检报告变更做到无需上线配置生效的目标,一定程度上降低了开发成本。
关于作者:
赵路通,转转C2C&寄卖业务研发工程师