风控系统建设,指标策略规则流程设计,LiteFlow 隐式子流程,构造 EL 和 Chain
个人博客:无奈何杨(wnhyang)
个人语雀:wnhyang
共享语雀:在线知识共享
Github:wnhyang - Overview
简介
前面有很多文章已经说了,我要利用 LiteFlow
做风控系统。至于进度嘛,只能尽力而为,毕竟我的惰性也很强。
下面是目前 Git
的提交记录,代码托管在 Github
和 Gitee
,但是是私有仓库,因为还不是开放的时候,还有很多要做的。

其中能梳理的仅是主流程的 TODO
都有下面这么多,更何况还有管理应用,es
存储和检索设计开发还都没开始,更有前端规则 / 策略配置也还没做,还有在涉及画布的排版、数据的反显都还没有明确的解决方案。所以连个半成品都不算,不是开放的时候。
另外,也不知道我会不会中途放弃😝

最近刚好做一点值得说的,就讲一下吧!
主流程
顺带一提,不谈系统设计及目的直接摆出一堆东西都是耍流氓,但是这个扯起来又是一大堆,这次只能耍流氓了!
说明:只是现状,之后也许有可能推翻 - 重做 - 推翻 - 重做。
1、数据接入
所有数据通过此接入,接入服务配置服务名,输入参数,输出参数,运行的 Chain
。
1 | @RestController |
当前有 Chain
:THEN(a_icn,nf_cn,df_cn,i_rcn,ps_rcn,a_ocn);
。
分别表示
子流程 / 组件 | 说明 |
---|---|
a_icn | 接入服务输入处理 node |
nf_cn | 系统字段处理 node |
df_cn | 动态字段处理 node |
i_rcn | 指标计算流程 |
ps_rcn | 策略集流程 |
a_ocn | 接入服务输出处理 node |
通过 Apifox
模拟的请求如下。

2、输入参数校验、系统字段 / 动态字段处理
接入服务是可配置输入输出和映射系统的。
通常,需要先创建系统字段和动态字段,动态字段是系统字段的补充,可以加入自定义的处理逻辑。配置了系统字段和动态字段后就可以将其配置在接入服务的输入和输出中,在这一步骤中就会进行映射转换,IP
、身份证、GPS
解析等。这样设计是为了适应风控多变的规则配置,随时可以在不更改代码的情况下,新增规则和数据的接入。而且后面会使用 ES
存储数据,这样也是可行的。

3、指标计算
所有符合本次请求的指标都要进行计算,所有指标计算可以并行。如何计算前面也有文章说明了使用 Redis
做时间窗口的方法。
指标有应用和策略集场景的区分,这里暂时使用代码构造 EL
和 Chian
,并同时使用隐式子流程运行。
以下仅供参考,大致思路是在创建指标时已经将指标按场景区分加入到对应的 Chain
中了,每次请求只会运行当次请求的应用和策略集场景下的指标。
1 | @LiteflowMethod(value = LiteFlowMethodEnum.PROCESS, nodeId = LFUtil.INDICATOR_ROUTE_COMMON_NODE, nodeType = NodeTypeEnum.COMMON) |
最终的指标 Chain
是类似于 IF(c_cn.tag("3"),i_tcn.tag("2"),i_fcn);
这样的 IF
编排 Chain
。
c_cn.tag("3")
为条件组件,目前是数据库存储的,未来有可能使用组件参数将其替换掉;i_tcn.tag("2")
为条件通过后指标计算组件;i_fcn
为指标条件失败组件。
4、策略集 - 策略 - 规则
关于策略集 / 策略 / 规则的关系,前面也有文章说明了。
再讲一下就是,每次请求只能对应一个策略集,策略集下有多个策略(有权重、最坏、首次的模式之分),策略有多条规则(有运行、模拟、关闭的状态区别)。策略集可以编排策略与其他组件的运行流程。
首先通过应用名和策略集确定要运行策略集,然后执行策略集的决策流(当前还没做,默认所有策略并行),策略会因为模式(权重、首次、最坏)的不同采取命中规则处置方式也不同,最终将结果转换返回。
与指标类似在创建策略、规则时就已经将其 EL
和 Chain
创建了。
策略 node
加了 isAccess
方法,用于判断是否执行当前 node
,因为 node
设置了开启、关闭、模拟之类的状态。
1 | @LiteflowMethod(value = LiteFlowMethodEnum.IS_ACCESS, nodeId = LFUtil.POLICY_COMMON_NODE, nodeType = NodeTypeEnum.COMMON) |
规则 Chain
与指标 Chian
类似 IF(AND(c_cn.tag("4"),c_cn.tag("5")),r_tcn.tag("2"),r_fcn);
,也是 IF
编排的 Chain
,目前只做了决策,未来可以加入打 tag
、加入名单等等。
5、存储 ES
数据是非常重要的,对于未来的管理应用十分关键。但现在还不涉及,所以目前是单独创建一份日志文件存储了。还使用了 Kafka
,模拟了生产和消费。
格式化 JSON
后如下。
1 | { |
6、输出
请求完成后返回命中结果,大致如下。

小结
大致就介绍这么多了,因为这一片文章根本讲不完。
自己做项目确实不容易,尤其是我毅力 / 能力都没那么强,经常遇到问题,就卡一周的。
但同时也会因为解决了某些问题开心很久的!
写在最后
拙作艰辛,字句心血,望诸君垂青,多予支持,不胜感激。
个人博客:无奈何杨(wnhyang)
个人语雀:wnhyang
共享语雀:在线知识共享
Github:wnhyang - Overview