Skip to main content

moregeek program

风控规则引擎构建及挑战-多极客编程

引言


如果决策引擎是风控的大脑,那么规则引擎则是大脑内的重要构成,其编排了各种对抗黑产的规则,是多年对抗黑产的专家经验的累计,本文将向你介绍规则引擎的构成及实现。


背景


什么是规则引擎?


规则引擎可以帮助企业将业务决策从应用程序代码中分离出来,并使用预定义的语义模块编写业务规则。这使得企业可以更灵活地管理和修改业务规则,而无需修改应用程序代码。


规则引擎可以接受数据输入,并根据业务规则解释数据,做出业务决策。这些业务决策可以是自动的,也可以是人工干预的。


规则引擎通常包含如下几个部分:



  • 规则库:规则库包含了所有可用的规则。这些规则可以是预先定义好的,也可以是动态生成的。
  • 策略:用于管理规则,是对规则的条件组装,如评分卡策略、最坏匹配策略等。
  • 规则执行引擎:负责规则的执行。读取规则库中所有可用规则,根据规则的条件执行规则。

为什么需要规则引擎?


规则引擎可以帮助企业更有效的管理和执行业务规则,提高决策的质量、效率和可靠性。


特点如下:



  • 将业务决策从代码中剥离出来:运营人员可以更灵活有效的管理和修改业务规则,而无需修改业务代码,节省对抗时间
  • 提高决策质量:规则引擎按照业务规则自动做出决策,无需依赖人为干预
  • 提效:规则配置好后,可永久自动执行,减少人力消耗
  • 稳定性:减少发版,减少测试,减少人为错误

设计实现


技术选型


在选择规则引擎时,需要考虑如下几点:



  • 业务需求:应该根据企业的业务需求来选择规则引擎。如果企业需要快速执行大量规则,则应选择性能较高的规则引擎。
  • 技术平台:选择与企业现有技术平台相兼容的规则引擎。如果企业使用的是 Java 技术平台,则应选择支持 Java 的规则引擎。
  • 成本:考虑规则引擎的购买成本、实施成本和运行成本。是否开源也是很多技术团队的选择因素。
  • 可维护性:选择易于维护的规则引擎,在需要时能够快速修改和更新规则。
  • 市场占有率:选择市场占有率较高的规则引擎,在需要时能够获得较好的技术支持和培训。
  • 技术支持:选择提供较好技术支持的规则引擎,以便在使用过程中能够得到及时的帮助。

当然,如果人力足够,可以考虑自己实现规则引擎亦可,自实现版本的规则引擎肯定灵活性更高,但是在性能和稳定性上需要较长时间的验证和考验。


如下是市场上热门的开源规则引擎:


规则引擎 简介
JBoss Drools JBoss Drools 是一款开源的规则引擎,支持 Java 和其他语言。
OpenRules OpenRules 是一款开源的规则引擎,支持 Java 和其他语言。
Hippo Rules Engine Hippo Rules Engine 是一款开源的规则引擎,支持 Java 和其他语言
Apache Flink Apache Flink 是一款开源的流处理框架,也可以用作规则引擎
Easy Rules Easy Rules 是一个基于 Java 的开源规则引擎框架,它提供了简单易用的 API,使得开发人员可以轻松地使用规则引擎。
基于 Groovy 实现规则引擎 Groovy 是一种动态语言,可以运行在 Java 平台上。由于 Groovy 的语法简单,因此可以通过使用 Groovy 来实现规则引擎。

规则引擎术语



  • 规则(Rule):规则是描述业务决策的规则或条件的语句。规则通常由两部分组成:条件和动作。条件是描述规则被触发的判断,动作是描述规则执行的操作。
  • 事实(Fact):事实是描述业务场景的数据。事实可以是一个单独的数据项,也可以是一组数据。规则引擎会根据事实来触发规则。
  • 决策表:决策表是一种以表格形式表示规则的数据结构。决策表通常由多个条件列和一个结果列组成。当条件列的值都满足时,决策表就会触发结果列的规则。
  • 规则集合:规则集合是一种由规则组成的数据结构。规则集合通常以树形结构存储,每个规则都有一个条件和一个动作。当条件满足时,规则集合就会执行规则的动作。

规则配置解析


规则引擎最终是需要交付给运营人员去配置使用的,所以必须能满足灵活的配置编排,且易懂,才能最大发挥它的威力。


规则配置



说明:



  • 触发条件:任意一个、满足所有、自定义。其中自定义最灵活,用户可以使用条件表达式配置任意想要的触发与或条件
  • 变量(指标):左值,指标是输入数据衍生、或查询、或计算所得的值
  • 比较符:等于、不等于、包含、属于、大于、小于、空 等等
  • 阈值:右值,与指标计算所得值相比较,如果比较符关系成立,则认为命中当前规则
  • 默认值:当指标执行出错或者超时,默认返回的值

策略配置



说明:



  • 评分卡模式:依据每条规则命中所得分数之和,判定是否命中相应分数段的决策
  • 最坏匹配:只要有一条规则命中,则立即拒绝
  • 阈值:如果是评分卡模式,需要设置三个段位并且指定阈值

性能调优


决策引擎每天承载企业业务全部的风险决策,峰值 QPS 基本过万,但是风控的决策耗时需要足够的短,在不影响业务的情况下,尽可能快的返回决策结果,这是一大挑战。


从以往的调优经验来看,可以从以下几点来优化规则引擎:



  • 并行执行规则:一次决策流中可能包含 N 个规则节点,每个规则节点包含 M 个规则,充分利用多核 CPU 优势,发挥最大威力,但同时需要考虑多线程数据安全问题
  • 预加载指标:规则执行都是在内存中的,但是所需要的指标值往往都是需要调用外部系统得到的,一是网络开销,二是指标计算开销。可以在执行规则集之前,全部预加载一次指标再缓存,这样执行时直接从内存取值就会快很多。但是需要注意成本问题(如付费指标,存储成本,架构复杂度等),废调用问题(前置规则已拒绝)等等
  • 规则加载预编译:规则首次加载往往比较耗时,此时最好能 warm up 一下,这样在流量进来后,即可立即执行,但是使用预编译可能会增加系统的启动开销时间,需要做好相应的平衡工作
  • 规则执行优化:运营配置规则时可能不会考虑规则执行顺序问题,但是程序在执行的时候可以智能编排一下,通过加入 与或顺序 关系,尽可能的把大耗时大成本的指标放在最后面执行,优先执行内存指标,万一命中则直接断言,后续指标则不会再执行,节省了时间。要做到这一点,需要对指标进行较为详细的归类及元数据管理,需要全域的数据配合,对风控这种需要大数据的接口来说是一大挑战。

总结


规则引擎在风控整体架构内的重要性毋庸置疑,它的稳定性直接关系到风控决策的性能、数据质量。同时,对运营来说,好的决策引擎是足够灵活,足够智能,满足规则数据编排需求,且能立即生效上线,这是保障他们对抗黑产的前提,希望本文对构建高效的规则引擎又较好的启发。


往期精彩



欢迎关注公众号:咕咕鸡技术专栏
个人技术博客:https://jifuwei.github.io/



©著作权归作者所有:来自51CTO博客作者是咕咕鸡的原创作品,请联系作者获取转载授权,否则将追究法律责任

【分布式技术专题】「lvs负载均衡」全面透析web基础架构负载均衡lvs机制的原理分析指南-多极客编程

前提概要在大规模互联网应用中,负载均衡设备是必不可少的组成部分,源于互联网应用的高并 发和大流量的冲击压力场景下,通常会在服务端部署多个无状态的应用服务器和若干有状态的存储服务器(数据库、缓存等等)实现高可用特点和机制。LVS的介绍说明官方站点:​​http://www.linuxvirtualserver.org​​;用过LVS的童鞋,其实大家的目的性很明确,就是需要通过LVS提供的负载均衡技术

【redis技术探索】「数据迁移实战」手把手教你如何实现在线+离线模式进行迁移redis数据实战指南(在线同步数据)-多极客编程

从实战出发使用RedisShake进行Redis数据在线+离线模式迁移指南RedisShake基本介绍​​RedisShake​​是基于​​redis-port​​基础上进行改进的是一款开源的Redis迁移工具,支持Cluster集群的在线迁移与离线迁移(备份文件导入)。数据可平滑迁移,当部署在其他云厂商Redis服务上的Cluster集群数据,由于SYNC、PSYNC命令被云厂商禁用,无法在线迁

微服务系列 1:服务化框架落地的挑战和核心需求-多极客编程

一、微服务架构概览1-1、微服务出现的意义所在微服务出现的意义在哪里呢?它的优势有哪些呢?如何保障业务演进但是系统架构还是依然往好的方向发展呢 ?一般而言,随着公司产品线的不断扩大,业务系统会越来越多,功能逻辑也越来越复杂,另外当前云服务的发展势头很好,服务必然就会倾向于服务化的部署方式,这样可以用来解耦服务之间的依赖,利于多团队的协作,利于业务系统的优化和管理,也利于后续的服务调度和资源的精细化

【redis技术探索】「数据迁移实战」手把手教你如何实现在线 + 离线模式进行迁移redis数据实战指南(离线同步数据)-多极客编程

离线迁移与在线迁移相比,离线迁移适宜于源实例与目标实例的网络无法连通的场景,或者源端实例部署在其他云厂商Redis服务中,无法实现在线迁移。存在的问题由于生产环境的各种原因,我们需要对现有服务器进行迁移,包括线上正在运行的redis集群环境 如何去做?涉及到数据源变动,原有数据如何平滑迁移到新实例,从而可以实现无缝迁移?方案汇总save/bgsave导出RDB+Redis-Shake进行迁移基于r

apifox调用security6.0权限接口-多极客编程

(Apifox调用Security权限接口) 本教程环境: Apifox:2.2.14 (建议更新到最新版本,老版本Auth从父级继承可能会有问题) YiYi项目(所有的后端参考代码):https://gitee.com/jack0240/YiYi 1. SpringBoot3.0集成SpringSecurity 以下配置已经在YiYi项目里面添加完成,大家可以下载代码直接运行即可。 因为项目

【redis 技术探索】「数据迁移实战」手把手教你如何实现在线 + 离线模式进行迁移 redis 数据实战指南(scan模式迁移)-多极客编程

数据迁移方式对于大多数场景下的Redis的数据迁移,还是比较推荐大家参考我之前的前两篇文章。【Redis 技术探索】「数据迁移实战」手把手教你如何实现在线 + 离线模式进行迁移 Redis 数据实战指南(在线同步数据)【Redis 技术探索】「数据迁移实战」手把手教你如何实现在线 + 离线模式进行迁移 Redis 数据实战指南(离线同步数据)scan模式在线数据迁移的场景和原因但是还有一种常见是前

【分布式技术专题】「lvs负载均衡」全面透析web基础架构负载均衡lvs机制的原理分析指南-多极客编程

前提概要在大规模互联网应用中,负载均衡设备是必不可少的组成部分,源于互联网应用的高并 发和大流量的冲击压力场景下,通常会在服务端部署多个无状态的应用服务器和若干有状态的存储服务器(数据库、缓存等等)实现高可用特点和机制。LVS的介绍说明官方站点:​​http://www.linuxvirtualserver.org​​;用过LVS的童鞋,其实大家的目的性很明确,就是需要通过LVS提供的负载均衡技术

软件测试之维护性测试-多极客编程

  维护性测试用于评估系统能够被预期的维护人员修改的有效性和效率的程度,可从模块化、可重用性、易分析性、易修改性、易测试性、易维护性  1)模块化:评估由独立组件组成的系统或计算机程序,其中一个组件的变更对其他组件的影响大小程度,耦合性越低,模块的独立性越强,相互影响越小  2)可重用性测试:评估资产能够被用于多个系统或其他资产建设的程度,可以通过资产的可重用性、编码规程符合性来测试  资产可重用

【redis技术探索】「数据迁移实战」手把手教你如何实现在线+离线模式进行迁移redis数据实战指南(在线同步数据)-多极客编程

从实战出发使用RedisShake进行Redis数据在线+离线模式迁移指南RedisShake基本介绍​​RedisShake​​是基于​​redis-port​​基础上进行改进的是一款开源的Redis迁移工具,支持Cluster集群的在线迁移与离线迁移(备份文件导入)。数据可平滑迁移,当部署在其他云厂商Redis服务上的Cluster集群数据,由于SYNC、PSYNC命令被云厂商禁用,无法在线迁

【redis技术探索】「数据迁移实战」手把手教你如何实现在线 + 离线模式进行迁移redis数据实战指南(离线同步数据)-多极客编程

离线迁移与在线迁移相比,离线迁移适宜于源实例与目标实例的网络无法连通的场景,或者源端实例部署在其他云厂商Redis服务中,无法实现在线迁移。存在的问题由于生产环境的各种原因,我们需要对现有服务器进行迁移,包括线上正在运行的redis集群环境 如何去做?涉及到数据源变动,原有数据如何平滑迁移到新实例,从而可以实现无缝迁移?方案汇总save/bgsave导出RDB+Redis-Shake进行迁移基于r

apifox调用security6.0权限接口-多极客编程

(Apifox调用Security权限接口) 本教程环境: Apifox:2.2.14 (建议更新到最新版本,老版本Auth从父级继承可能会有问题) YiYi项目(所有的后端参考代码):https://gitee.com/jack0240/YiYi 1. SpringBoot3.0集成SpringSecurity 以下配置已经在YiYi项目里面添加完成,大家可以下载代码直接运行即可。 因为项目

数据库mysql的程序员使用指导-多极客编程

前言: MySQL是开源数据库的代表,为程序员和整个IT行业带来了巨大贡献。尽管目前mysql的拥有者对mysql的未来摇摆不定,但是业界还是一直关注mysql的动态。本文首先介绍了mysql的历史、关联版本、安装配置,然后介绍常用命令,最后介绍了两种开发mysql脚本的工具。1.MySQL简介​Mysql是一个关系型数据库管理系统,最早由瑞典MySQL AB 公司开发,目前属于 Oracle 旗