Skip to content
On this page

介绍

背景

公司可能会遇到各类的欺诈、盗号、作弊、套现以及营销活动被恶意刷单等风险,在团队的早期由业务系统自行处理,或者由公司安全团队硬编码的方式部署规则,例如盗号,当登录次数超过一定阈值则弹出验证码或拒绝登录。硬编码方式面临各种困难和挑战,主要包括以下几个方面:

  • 策略规则不能沉淀积累,新策略仍需经过开发等一系列才能上线
  • 策略无法上线前验证
  • 策略规则不能动态组合、实时修改
  • 维度、阈值无法实时修改
  • 处罚手段不全
  • 分析查询功能非常弱,想要的信息查询不了

为此,需要建设一套风控系统,业务及技术目标如下:

业务目标

  1. 策略制定流程标准化,系统需支撑策略的快速配置、验证、修改、上线
  2. 系统提供便捷的查询分析工具,针对未知案例可以做到快速响应
  3. 系统提供完善的处罚手段,在各个业务场景实现细力度的风险控制

技术目标

  1. 业务接入标准化
  2. 接入场景定制化
  3. 策略规则灵活配置及验证
  4. 高并发
  5. 服务稳定性

本项目不是一整个风控解决方案,而是聚焦在实时风控引擎的实现

核心概念

事件

Event 某个业务或场景需要接入风控的事件单元,例如:充值事件、下单事件、提现事件等。

每个事件的接入需要传递参数,分为公共参数和业务参数。公共参数包含事件Event、用户uid、设备id、ip地址等,而业务参数则根据各个事件的具体场景定制。

每个事件配置一个或多个规则组。

规则组

绑定在事件上的包含一系列的规则的组合。

规则组可以配置前置表达式:当表达式(Groovy语法)成立时,包含的规则才有效。

规则组状态:ENABLE、TEST、DISABLE 分别对应生效、测试、未生效,规则组标记为TEST时,其包含的规则都为TEST状态。

规则

由一系列指标变量组成的符合Groovy语法的表达式或者一段Groovy代码,是判断风险的最小业务单元。

规则包含惩罚话术:规则命中时,返回给用户的话术。

规则状态:ENABLE、TEST、DISABLE 分别对应生效、测试、未生效,规则标记为TEST时,规则执行但不返回结果也不会执行关联的惩罚。

指标

某个主体在一段时间内累积的数据称为指标,用于 Groovy 表达式中。

例如:

  • 某个用户最近3小时第三方不同的充值账号数
  • 某个ip最近1小时充值次数
  • 某个用户最近5小时消费总金额

针对上述需求我们可以抽象出:

  • 分组字段:用户、IP
  • 聚合字段:消费金额,对消费金额做累加
  • 聚合函数:COUNT、SUM、MAX、MIN、COUNT_DISTINCT、DISTINCT
  • 聚合窗口:5小时、3小时
  • 前置条件:满足条件才聚合数据

变量

调用外部服务获取的数据赋值给一个变量,用于 Groovy 的表达式中。

名单库

事件接入时可以绑定名单组,一次请求如果命中白名单则PASS,命中黑名单则直接REJECT。

名单信息还可以通过变量的方式应用到规则表达式中。

技术栈

  • 后端技术栈:Java、SpringBoot、Mysql、Redis、MongoDB
  • 前端技术栈:React、Ant Design Pro

由 VitePress 强力驱动