背景
许多互联网电商行业客户当前已经基于阿里云云原生的大数据解决方案(DataWorks、MaxCompute、Flink、Hologres)构建起离线和实时数据一体化的数据中台,为各业务线提供BI报表及数据接口支持。电商行业客户在数仓的分析场景外,也面临业务系统中的风控需求。比如:每季度的营销费用中,不少的羊毛党薅走正常用户的利益。羊毛党一方面导致可能导致用户的口碑下降,另一方面原有的活动运营预算迅速攀升从而导致资损。阿里云实时计算Flink通过特有的实时风控能力帮助客户准确识别羊毛党,防止营销预算流失。
客户的预期“实时风控”系统设计中,希望选择一款合适的"规则引擎"做为整体技术架构提供能力支撑。通过规则的动态化,多维度的规则组合来实现业务目标。“实时风控”项目一期基于 Flink 的能力,底层通过 Flink SQL 实现,支持规则上指标阈值的动态化,在初期满足风控专员的一些固定场景。随着系统实际运行后,逐渐暴露出一些开源Flink的能力不满足点,最终客户成功基于阿里云实时计算 Flink 版的企业级CEP能力落地实时风控解决方案,更近一步基于阿里云Flink实现"精准营销"。
业务需求
业务业务需求,所采用的“规则引擎”必须包含如下能力:
"精准营销"主要业务逻辑:
- 多种触发形式
- 定时调度型
- 事件触发型
- 用户分析
需要支持多条件的且、或关系组合
- 用户自然属性 行为属性 统计分析
统计分析 年龄、性别、所属区域、累计,首次消费、未次消费等
- 用户行为序列分析
做了事件 A、做了事件 A 紧接着做了事件 B、做了事件 A 且 N 分钟之后做了事件 B、做了事件 A 且 N 分钟之后没有做事件 B、没做事件 A
- 多种触达方式
- 对接下游触达系统
- 支持退出计划(单规则只触达单用户1次或 N 次,多规则只触达单用户1次或 N 次,黑白名单机制)
其中 用户分析 为配置规则的重点环节,合理的技术引擎必须能支持:
- 规则的在线启、停
- 规则的以下维度的动态化配置:
- 聚合的字段
- 分组字段
- 聚合函数
- 窗口大小
- 阈值
- 计算符号
- 行为序列的组合
技术实践
通过剖析需求,实时规则和离线规则的本质上是批流场景的问题:
- 当规则时间选择为:T-1 ~ T-N,对应纯离线表
- 当规则时间选择为:T ~ T-N,对应离线表+实时表
- 当规则时间选择为:T ~ T+N,对应实时表+流式数据
客户的技术实施中还考虑了业务系统运行中的实际问题,并且将这些目标融入在平台设计中:
- 规则变化是常见的吗?是高频的吗?
是常见的,但不是高频的。规则的变化通常是由于业务策略发生变化,类似表结构的变化,业务中比较常见,但并不是高频的修改。
- 当规则个数为0时,直接丢弃数据,是否可以满足用户需求?
可以丢弃数据。基于业务需求,先有规则,再有规则的计算。
- 当规则被删除/更新之后,直接丢弃部分匹配事件,是否可以满足用户需求?
可以丢弃部分匹配事件
- 是否需要通知机制,知道当前规则生效/更新等状态变化?
不需要。但设计上应该将 执行引擎 和 规则描述 分开在两个系统中,以便能直接查看到现有的规则。可以通过一条特殊的规则如"Export All Rules"导致出有存量规则信息(含规则ID,规则内容,规则状态)。
- 是否需要多规则?
如果需要多规则、是否所有规则的 Key 是一样的
如果需要多规则、两层结构是否可以满足需求
如果需要多规则,是否有需求,某些数据只针对特定规则生效
需要多规则,且不同规则的 Key 可能不一致。即动态 KeyBy。例如:
规则 |
聚合字段 |
Rule1 |
{member_id: A} |
Rule2 |
{member_id: A; shop_id:E01} |
- 是否还有其他需求?
规则在定义时是否能指定 Flink 内置的特定累加器和需要累计的字段
- 统计型规则如何和 CEP 在同一个 Flink Job 内完成对接?
通过 CEP 动态规则(含累加器选择)将纯统计规则看作是特定的 CEP 场景
针对其中流式序列型数据,开源Apache Flink CEP 实现有两个困难点:
- Flink 社区现有的 CEP API 不支持动态改 Pattern(无法满足上层规则中台、风控中台的可集成性)
- Flink 社区现有的 CEP API 不支持时间驱动状态跳变
阿里云工程师和客户共同攻坚,使用阿里云 Flink 的方案顺利落地。其中特别是 Flink + Hologres 提供的动态CEP规则替换能力,完美弥补了开源Flink能力的局限。规则作业发布后线上持续运行期间修改规则条件和规则阈值,不需要进行任务发布和重启。
- 将 Flink作业逻辑开发 和 规则描述 两者完全解耦开
- 规则描述存储在Hologres中,便于查看规则状态和历史版本
- 规则变化时只修改Hologres中的规则,Flink自动加载完成规则更新
- 结合Flink生态,可以轻松扩展事件源组件和事件写出组件
- 结合Flink分布式能力,可以大规模扩展到上千并发度
该技术方案已经顺利在客户上线并在生产环境应用,在该方案中并不引入新的技术组件和编程语言,最大化复用Flink资源来实现新业务场景,降低了新组件可能引入的潜在运维风险。另一方面也极大降低了团队的学习成本,将实时计算的人力最高效的释放出来。
未来规划
关于阿里云实时计算Flink在风控方向的未来规划将围绕三个主要方向展开:
- Flink CEP能力的进一步增强
- Flink CEP SQL的动态能力
- Flink + DSL的Native支持(目前已提供 Flink + Drools 预览版能力)