# 《Seckill秒杀系统》第115章:秒杀系统风控模型实现

作者:冰河
星球:http://m6z.cn/6aeFbs (opens new window)
博客:https://binghe.gitcode.host (opens new window)
文章汇总:https://binghe.gitcode.host/md/all/all.html (opens new window)
源码获取地址:https://t.zsxq.com/0dhvFs5oR (opens new window)

沉淀,成长,突破,帮助他人,成就自我。

  • 本章难度:★★☆☆☆
  • 本章重点:理解秒杀系统风控模型可扩展、可配置、可编排的设计之道,掌握如何编写高度可扩展的代码,从代码角度理解如何设计高度可扩展的代码,并能够将其灵活应用的自身实际项目中。

大家好,我是冰河~~

建设风控系统不是一朝一夕的事情,对抗黑灰产也不是一蹴而就的。无论是建设风控系统,还是对抗黑灰产都是一个长期并且艰巨的任务,不能将对抗黑灰产的艰巨任务寄托于现有的代码逻辑上,在设计风控系统时,一定要考虑扩展性、可配置和可编排。

# 一、前言

在前面的文章中,我们介绍了黑灰产和风控的基础知识,并且对风控模型的架构与落地方案进行了详细的介绍。同时,对秒杀系统风控的执行流程和风控模型进行了设计,大家已经从整体上了解到黑灰产和风控的基础知识、风控系统的架构设计和落地实现方案。也对秒杀系统的风控执行流程和风控模型设计有了初步的认识。接下来就是要编写可扩展的代码实现秒杀系统的风控逻辑。

# 二、本章诉求

基于可扩展的角度编写秒杀系统的风控逻辑代码,在源码角度理解风控规则链的设计和实现,思考设计模式在实际编码过程中的应用,重点掌握可扩展、可配置、可编排的代码落地实现。结合自身实际项目思考如何将高度可扩展、可配置、可编排的代码设计和实现灵活应用到自身实际项目中。

# 三、基础模型实现

风控基础模型的实现比较简单,这里我们定义了两个最基础的风控模型规则类,一个是Rule类,一个是PathRule类,如下所示。

  • Rule类

源码详见:seckill-gateway工程下的io.binghe.seckill.gateway.risk.rule.model.Rule。

public class Rule {
    /**
     * 是否启用,默认为false
     */
    private boolean enabled = false;
    /**
     * 路径
     */
    private String path;
    /**
     * 窗口限流的周期,单位是毫秒
     */
    private long windowPeriod;
    /**
     * 滑动窗口大小
     */
    private int windowSize;
	/**********省略其他代码**********/
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
  • PathRule类

源码详见:seckill-gateway工程下的io.binghe.seckill.gateway.risk.rule.model.PathRule。

public class PathRule extends Rule {
    private List<Rule> urlPaths;
	/*********省略其他代码**********/
}
1
2
3
4

至此,基础模型实现完毕。

# 四、动态配置实现

在风控逻辑动态配置实现的过程中,我们为风控的规则专门设计了对应的配置,并且这些配置可以直接在配置中心配置,风控逻辑可以动态感知到配置的变化。

# 4.1 配置模板定义

由于配置可以在配置中心进行管理,所以,我们为风控的规则设计了配置模板,并且可以在配置中心进行统一管理,配置模板以Json格式进行配置,如下所示。

{
  "enabled": true,
  "ipRule": {
    "enabled": true,
    "windowPeriod": 1000,
    "windowSize": 5
  },
  "accountRule": {
    "enabled": true
  },
  "pathRule": {
    "enabled": true,
    "windowPeriod": 1000,
    "windowSize": 5,
    "urlPaths": [
      {
        "path": "/**"
      },
      {
        "enabled": true,
        "path": "/seckill-order/order/saveSeckillOrder",
        "windowPeriod": 1000,
        "windowSize": 3
      }
    ]
  }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27

在Nacos中新增一个Data ID为seckill-gateway-rules,Group为seckill-gateway-group的配置,如图115-1所示。

# 查看完整文章

加入冰河技术 (opens new window)知识星球,解锁完整技术文章与完整代码