我与规则引擎

我在字节跳动工作期间有一半时间在搞内容安全方向,内容安全工程上的核心之一是策略的管控。策略平台也是我的工作主内容,因此想单开一篇文章来回顾。

当谈到规则引擎的时候,往往可以由浅入深分成这么几个概念:

  1. 规则引擎库
  2. 规则引擎服务
  3. 策略平台
  4. 执行引擎

接下来,我会站在我的理解角度给出这几个概念的解读。另外,也会对比下业界知名的airflow。

在这之前,规则引擎是什么? 对于一个按约定语法表达的表达式文本和事实数据,可以解析文本并用事实数据执行,得到true/false的结果。如规则表达式是:”a+b>c” ,事实数据是:{“a”:2,”b”:3,”c”:8},那么规则引擎的返回结果应该是”false”


规则引擎库

顾名思义,它只是一个库,提供了执行表达式文本的功能。可以简单的类比成Python中的eval,其用法就是传入一串文本(使用了约定的语法的),并执行这段文本。实际上,eval要比规则引擎高级的多,它可以有各种IO,而朴素的规则引擎只能接收一串最终返回结果为bool类型的表达式文本。

作为规则引擎库,它的关注点是:1.规则可读性 2.规则执行效率

规则引擎服务

将”规则引擎库”的功能以一个服务形式提供出去。

作为规则引擎服务,它的关注点是:1.服务的稳定性 2.服务的健壮性。如果传入了不合法的文本,是否会影响服务运行

btw,有的规则引擎服务不仅限于进行true/false判断,还支持在条件为true的情况下进行kv set等基础操作

策略平台

这不是一个有严格定义的概念,只是我的朴素理解和分类。与面向开发人员的”规则引擎服务”相比,”策略平台”更像是面向普通用户的。它会额外提供一个前端页面,让用户能看到当前配置了哪些规则并添加、删除、修改规则。

实际上,在不同的业务场景下,策略平台可能会被赋予更多含义。以我在字节做的策略平台为例,相当长一段时间内,研发方向都聚焦于策略(规则及其之间关系)的表达形式。

关注点:1.平台用户友好性 2.服务稳定性

执行流引擎

以上所说的规则引擎和策略平台,都是纯计算函数,都是无外部副作用的。即不会产生对外部服务的调用,尤其是不会产生写操作。

但执行引擎与之大相径庭,执行流上每个节点都允许有外部调用。

Apache Airflow

其实这个是我后面才接触到的。之前做规则引擎产品调研时,更多的是Drools这种产品,对执行流引擎无接触。这里留个坑,之后来补。


说起来,规则引擎似乎是业界有非常成熟解决方案的领域了,那我在字节这一年半的时间都在干啥?

  1. 新规则引擎服务从零到一搭建(站在前人的肩膀上)- 3months
  2. 表达形式1.0 (tree based) 业务迁移 - 3months
  3. 表达形式2.0 (DAG based) 探索+落地+业务迁移 - 4months
  4. 功能完善(如测试、如灰度、如稳定性) - 3months
  5. 表达式3.0探索(未果) - 1month
  6. 其它乱七八糟的日常、修bug、扯皮 - 2months+