4. 限流基础概念:限流的目的、限流与风控的关系、常见限流算法

在贷后风控系统中,API 网关是流量的第一道防线。限流(Rate Limiting)作为网关的核心能力,直接决定了系统在面对突发流量、恶意攻击或上游服务抖动时的稳定性。本节从目的、与风控的关系、算法三个维度建立限流的知识地基。

4.1 限流的目的

限流的核心目标是 保护系统资源,确保在有限的计算、存储和网络能力下,优先处理高优先级或合规的请求。具体目的包括:

  • 防止服务过载:避免瞬时流量冲垮下游风控引擎、数据库或第三方征信接口。
  • 保障公平使用:为不同租户、渠道或用户等级分配配额,防止单一来源抢占全部资源。
  • 成本控制:按量计费的云服务或第三方数据源(如征信查询)需要精确控制调用次数。
  • 抵御恶意攻击:识别并拦截高频的爬虫、撞库或 DDoS 攻击流量。
  • 平滑流量尖峰:将突发请求整形为均匀的请求流,避免下游系统因毛刺而触发熔断。
贷后场景提示:贷后催收系统在账单日或还款日会遭遇流量洪峰。限流策略需要区分“正常用户查询”和“催收系统批量拉取”,前者应给予更高优先级和配额。

4.2 限流与风控的关系

限流和风控是 API 网关中两个互补但职责不同的能力。下表梳理了二者的核心差异与协作方式:

维度 限流(Rate Limiting) 风控(Risk Control)
核心目标 保护系统稳定性,控制资源使用量 识别欺诈、信用风险,保障业务安全
判断依据 请求速率、并发数、配额消耗 用户画像、行为特征、设备指纹、规则引擎
触发粒度 通常基于 IP、API Key、用户 ID 基于用户、设备、交易、关联网络
响应动作 直接拒绝、排队、降级(返回 429) 拒绝、人工审核、增强验证、延迟放行
执行位置 API 网关前置层,无状态 风控引擎,通常有状态且需持久化
协作关系 风控引擎的“前置保镖”,过滤掉明显异常的流量 限流后的“深度安检”,对放行请求做精细判断
架构协作原则:在贷后风控 API 网关中,限流应优先于风控执行。先通过限流拦截掉超额的、恶意的请求,再将合规流量转发给风控引擎做深度分析。这样可以大幅降低风控引擎的计算压力。

4.3 常见限流算法

不同的限流算法在精度、内存占用和突发处理能力上各有优劣。贷后风控场景通常需要结合多种算法来满足不同 API 的限流需求。以下为三种最核心的算法:

4.3.1 令牌桶算法(Token Bucket)

令牌桶是业界最常用的限流算法之一,允许一定程度的突发流量,同时限制长期平均速率。其工作原理如下:

  • 系统以固定速率向桶中添加令牌(如每秒 10 个)。
  • 桶有最大容量(如 100 个),超出部分丢弃。
  • 每个请求需要从桶中获取一个或多个令牌才能被放行。
  • 如果桶中令牌不足,请求被拒绝或等待。
令牌桶算法流程图 令牌桶算法(Token Bucket) 令牌生成器 速率: 10 令牌/秒 令牌桶 容量: 100 当前令牌: 6 放行请求 拒绝请求 (429) 特点:允许突发(桶内积攒的令牌可一次性消耗),平滑长期速率。适合贷后催收 API 的突发查询场景。

4.3.2 漏桶算法(Leaky Bucket)

漏桶算法将请求视为水滴,以固定速率从桶底漏出,桶满则溢出丢弃。它强制输出为均匀流,不允许突发。适用于需要严格平滑流量的场景,如对接第三方征信接口。

  • 请求进入桶中暂存(队列)。
  • 桶以恒定速率“漏水”(处理请求)。
  • 桶有最大容量,超出部分直接丢弃。
  • 输出速率完全恒定,不受输入速率影响。

4.3.3 计数器算法(Counter / Fixed Window)

计数器算法是最简单的实现方式,在固定时间窗口内统计请求次数,超过阈值则拒绝。常见实现包括固定窗口和滑动窗口。

算法 核心机制 优点 缺点 贷后适用场景
固定窗口 按秒/分钟/小时划分窗口,窗口内计数 实现简单,内存占用低 窗口边界可能产生双倍流量尖峰 对精度要求不高的批量数据导出接口
滑动窗口 将窗口细分为多个小格,滑动统计 边界平滑,精度高 需要更多内存和计算 用户实时查询、催收任务分发接口
三种限流算法对比架构图 常见限流算法对比 令牌桶 允许突发 长期速率可控 内存占用: 中 精度: 高 漏桶 强制均匀输出 不允许突发 内存占用: 中 精度: 高 计数器 实现简单 边界尖峰问题 内存占用: 低 精度: 中 贷后风控选型建议 核心风控 API → 令牌桶(允许突发查询) | 第三方征信接口 → 漏桶(严格限速) | 日志/统计接口 → 计数器(简单高效) 实现要点 1. 令牌桶和漏桶通常需要后台线程或定时任务维护桶状态。 2. 计数器算法在分布式环境下需注意 Redis 原子操作(INCR + EXPIRE)的竞态条件。

4.4 算法选型决策矩阵

在实际的贷后风控 API 网关中,不同接口对限流的要求差异很大。下表帮助你在具体场景中快速选择算法:

API 类型 流量特征 推荐算法 关键配置
用户账单查询 突发性强,集中在还款日 令牌桶 速率: 100/s, 容量: 500
征信报告拉取 均匀,第三方限制严格 漏桶 速率: 5/s, 容量: 10
催收任务状态上报 持续稳定,量较大 滑动窗口计数器 窗口: 1min, 阈值: 1000
内部管理后台 低频,操作人员少 固定窗口计数器 窗口: 1min, 阈值: 60
常见误区:不要对所有 API 使用同一种限流算法。例如,对征信接口使用令牌桶可能导致突发请求被第三方拒绝,而对用户查询接口使用漏桶则可能造成不必要的等待延迟。务必根据接口的 SLA 和下游依赖特性单独配置。

4.5 本节小结

  • 限流的目的是保护系统、保障公平、控制成本、抵御攻击、平滑流量。
  • 限流是风控的前置防线,二者在粒度、依据和动作上互补。
  • 令牌桶允许突发,适合用户侧 API;漏桶强制均匀,适合第三方依赖;计数器实现简单,适合低精度场景。
  • 生产环境中通常组合使用多种算法,并通过配置中心动态调整参数。