day15 规则引擎的设计与实现 | 青训营笔记

182 阅读4分钟

题记

这是我参与「第五届青训营 」伴学笔记创作活动的第 15天,本文用于记录在青训营的学习笔记和一些心得。

day15 2月1日

课程目标

  • 理解规则引擎的组成部分及应用场景
  • 理解规则引擎的核心原理–编译原理的相关概念
  • 设计并实现一个规则引擎一 YoungEngine
  • 结合之前所学课程,实现一个Web版规则引擎(自行实现)

1.认识规则引擎

规则引擎是一种嵌入在应用服务中的组件,可以将灵活多变的业务决策从服务代码中分离出来。通过使用预定义的语义模块来编写业务逻辑规则。在执行时接受数据输入、解释业务规则,并做出决策。规则引擎能大大提高系统的灵活性和扩展性。

在字节跳动,规则引擎已经在风控识别、活动运营、配置下发等场景得到了广泛的应用。开发人员可以将业务逻辑与服务代码解耦,实现灵活、高效的业务策略发布。目前公司内部基于规则引擎的动态决策系统已经承接了千万级别QPS的决策请求。

image-20230202104605794

image-20230202104613393

优点

  • 解决开发人员重复编码的问题
  • 业务决策与服务本身解耦,提高服务的可维护性
  • 缩短开发路径,提高效率

image-20230202105627657

应用场景

  • 风控对抗:与黑灰产的对抗过程中,策略研发和产品需要能够根据黑灰产特征进行快速识别和对抗。规则引擎作为风控系统的核心,使产研人员能够不断的调整和优化对抗策略,以实现最好的风控识别效果。
  • 活动策略运营:业务活动的运营需要及时根据用户效果反馈进行运营策略的优化和调整。引入规则引擎后,可以将服务代码与业务运营逻辑解耦,提高运营策略的迭代效率。方便新玩法的探索和效果验证。
  • 数据分析和清洗:在数据分析系统中使用规则引擎可以便捷的实现对数据进行整理、清洗和转换。数据分析师可以根据不同的需求来自定义数据处理的规则,方便快捷的产出所需要的数据。

2.编译原理基本概念

image-20230202122452262

词法分析是识别一个个的单词,而语法分析就是在词法分析的基础上识别出程序的语法结构。这个结构是一个树状结构。这棵树叫做抽象语法树(Abstract Syntax Tree,AST)。树的每个节点(子树)是一个语法单元,这个单元的构成规则就叫“语法”。每个节点还可以有下级节点。

image-20230202123943178

image-20230202124511767

image-20230202134708593

编程语言为什么不用人类的语言(自然语言),而是用上下文无关的文法呢? 因为

  1. 便于设计编译器。 客观上技术目前无法实现,如果使用了上下文相关文法,那就是真正实现了人工智能,NLP领域将会有重大突破。
  2. 便于代码开发维护。 如果开发出来的代码像高考的语文阅读理解一样,每个人都有不同的理解,那么,到底哪个才是作者真正想要表达的?如果人类都确定不了含义,那计算机同样也确定不了,最终结果就是错误执行或无法执行。
  3. 汇编语言/机器语言是上下文无关的。CPU执行指令时,读到哪条执行哪条。如果CPU需要考虑上下文,来决定一个语句到底要做什么,那么CPU执行一条语句会比现在慢千倍万倍。考虑上下文的事情,完全可以用户在编程的时候用算法实现。既然机器语言是上下文无关的,那高级语言也基本上是上下文无关的,可能有某些个别语法为了方便使用,设计成了上下文相关的,比如脚本语言的弱类型。在便于使用的同时,增加了解析器的复杂度。

image-20230202150242067

image-20230202141728827

3.设计规则引擎

image-20230202152355736

image-20230202152404666

image-20230202152413887

image-20230202152425534

4.项目young_engine

github.com/qimengxingy…