1 引言

1.1 简述轻质检陈述的布景

在去年,正式上线了对N品类的质检才能。质检中心也有一套标准能够来拓宽越来越多N品类,完成用户闭眼打包寄卖,在系统维度上能够认为转转官方验没有不能质检的品类

在传统的陈述中,一般选用固定的模板和结构,无法满意在N品类中的灵敏诉求。而轻质检陈述的方针是供给一种自由组合和解析的方法,能够依照不同的诉求自由挑选和装备去不同的质检陈述呈现出来,同时也需求保证陈述的逻辑和数据的准确性,避免信息的紊乱或错误的解读,为此转转轻质检陈述或许需求建立灵敏的数据解析和处理引擎

N品类在官方验卖场的质检陈述如图所示:

编排式规则引擎LiteFlow在转转轻质检报告的实践

1.2 组件式规矩引擎及其应用潜力

组件式规矩引擎是一种将规矩拆分为独立组件并经过组合和装备来完成事务逻辑的规矩引擎。它把规矩表明为可重用和可装备的组件,每个组件负责处理一个特定的规矩或规矩调集。这些规矩组件能够经过组合、衔接和装备来构建杂乱的事务规矩,以满意不同的需求和场景。

在公司的系统中充满着杂乱且丰厚多样的事务逻辑,承载的也是公司各式各样的中心事务功用,每个杂乱的事务都触及到RPC的调用,不同过程不同的事务规矩的处理,数据的运算等。跟着时间的推移和版别的地迭代保护的本钱会越来越高。代码的笼统,复用状况也会越来越差,各个模块耦合度变高。逻辑的改动,会影响到其他模块,也会带来必定的测验本钱。

先看个在电商行业中简略的比方:

假定渠道期望依据不同的用户类型和购买行为来发放优惠券。以下是一个组件式规矩引擎的简略编列比方:

  1. 规矩组件(A): 用户类型规矩组件

    • 条件:用户类型为新用户
    • 动作:发放新用户专享优惠券
  2. 规矩组件(B): 购买金额规矩组件

    • 条件:购买金额超越必定阈值
    • 动作:发放满减优惠券
  3. 规矩组件(C): 产品类别规矩组件

    • 条件:购买特定产品类别
    • 动作:发放该产品类别相关的优惠券
  4. 规矩组件(D): 优惠券叠加规矩组件

    • 条件:用户已经具有一张优惠券
    • 动作:依据叠加规矩判别是否发放额外的优惠券

以上的A,B,C,D四个组件,依照次序履行。

编排式规则引擎LiteFlow在转转轻质检报告的实践

在比方中,每个规矩组件都是一个独立的组件,负责处理特定的规矩。它们能够经过组合装备来构建杂乱的优惠券发放规矩。

经过组件式规矩引擎的编列,渠道能够依据不同的条件和事务规矩,灵敏地发放不同类型的优惠券。同时,这种模块化的规划让规矩的办理和保护愈加方便,能够依据事务需求进行灵敏的调整扩展,比方实时的去添加一个E组件,或者去掉一个B组件,在或者C可依靠AB,AB并发履行等

2 组件式规矩引擎概述

2.1 LiteFlow的中心概念和特点

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 等条件去编列各个节点而设立的履行规矩。

    编排式规则引擎LiteFlow在转转轻质检报告的实践

  • 数据上下文(Data Context):LiteFlow运用数据上下文来同享和传递数据(多线程阻隔)。

编排式规则引擎LiteFlow在转转轻质检报告的实践

  • 履行引擎(Execution Engine):履行引擎是LiteFlow的中心组件,负责解析规矩流程,依照界说的次序履行组件,并处理组件间的数据传递和上下文办理。

    编排式规则引擎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等)节点和规矩履行链进行加载,履行器取得履行链路以及履行条件和规矩节点,最终依照事务请求的履行链,进行节点履行和上下文的数据交换。如下图所示:

编排式规则引擎LiteFlow在转转轻质检报告的实践

3.2 在轻质检陈述中装备和集成LiteFlow

  • 集成数据源和服务:LiteFlow一般需求与外部数据源和服务进行集成。触及衔接装备中心、RPC等操作,以获取所需的数据和履行规矩所需的规矩。

    编排式规则引擎LiteFlow在转转轻质检报告的实践

  • 规划规矩组件:依据规矩需求,规划和界说规矩组件。每个规矩组件负责处理特定的规矩逻辑,具有条件判别、动作履行、数据转化等。规矩组件具有独立性和可重用性。

编排式规则引擎LiteFlow在转转轻质检报告的实践

  • 创立规矩流程:在LiteFlow中创立规矩流程,将规矩组件依照需求的次序进行编列。规矩流程界说了规矩的履行次序和流程操控逻辑。

编排式规则引擎LiteFlow在转转轻质检报告的实践

这儿只列举了两种陈述的编列形式,在内部系统流程中还有其他场景的一些编列。

  • 装备中心装备规矩组件:对每个规矩组件进行装备,设置条件、界说动作和指定数据上下文。

    3.3 进一步提高轻质检陈述装备才能

经过对一个质检组(外观检测)的icon和汇总描绘案牍进行装备化,经过两种存储在装备中心的规矩,使得质检项的汇总提示信息进行自界说装备化处理。

编排式规则引擎LiteFlow在转转轻质检报告的实践

4 总结

本文介绍了转转寄卖事务下轻质检陈述选用LiteFlow编列式规矩引擎的实践。在N品类质检才能上线以来,屡次的质检陈述改变做到无需上线装备收效的方针,必定程度上降低了开发本钱。

关于作者:

赵路通,转转C2C&寄卖事务研制工程师

> 转转研制中心及业界小伙伴们的技术学习交流渠道,定时分享一线的实战经验及业界前沿的技术话题。 关注公众号「转转技术」(综合性)、「大转转FE」(专注于FE)、「转转QA」(专注于QA),更多干货实践,欢迎交流分享~