规则引擎设计与实现(上) | 青训营笔记

110 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 4 天

1. 介绍

规则引擎是嵌入在应用程序服务中的组件,它将灵活的业务决策与服务代码分开。业务逻辑规则是使用预定义的语义模块编写的。接受数据输入,解释业务规则,并在执行时做出决策。规则引擎可以大大提高系统的灵活性和可扩展性。

在字节跳动,规则引擎已广泛应用于风控识别、活动操作、配置交付等场景。开发人员可以将业务逻辑与服务代码分离,从而支持灵活而高效的业务策略发布。目前,公司基于规则引擎的动态决策系统已经承担了数千万QPS的决策请求。

规则引擎的实现需要尽可能简单易用,同时满足大容量、高请求和低延迟。

2. 什么是编译

编译的过程就是 把某种语言的源程序,在不改变语义的条件下,转换成另一种语言程序(目标语言程序)

image.png

  • 如果源代码被编译为在操作系统上运行,则目标代码是汇编/机器代码。
  • 如果在虚拟机中编译和执行,目标代码可能不是汇编代码,而是解释器可以理解的一种中间形式的代码。

解释语言和编译语言

  • 有些语言会提前一次性转换所有代码。这就是编译语言。所使用的转换工具称为编译器,如C、c++、Go。编译是可重复的
    • 编译后的产品不能跨平台,不同的系统对可执行文件有不同的要求
    • 特别是c, c++,汇编,源代码不能跨平台
  • 有些语言可以一边转换一边执行,用到哪里了就转哪里,这就是解释性语言,使用的翻译工具叫做虚拟机或解释器,比如java、python、javascript

image.png

关于Java和Python

  • Java同时具有编译和解释。但是编译不会直接编译成机器代码,而是编译成字节码,然后将字节码放入虚拟机中执行。
  • Python执行过程还经历两个阶段,第一个阶段是编译成字节码。Pyc,然后将其放入虚拟机执行

3. 词法分析

把源代码字符串转换为词法单元(Token)的这个过程。

确定的有限自动机 DFA | Deterministic Finite Automaton

确定性有限自动机是具有有限数量状态的状态机。状态机可以根据输入字符在任何状态下进行确定的状态转换。