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 个),超出部分丢弃。
- 每个请求需要从桶中获取一个或多个令牌才能被放行。
- 如果桶中令牌不足,请求被拒绝或等待。
4.3.2 漏桶算法(Leaky Bucket)
漏桶算法将请求视为水滴,以固定速率从桶底漏出,桶满则溢出丢弃。它强制输出为均匀流,不允许突发。适用于需要严格平滑流量的场景,如对接第三方征信接口。
- 请求进入桶中暂存(队列)。
- 桶以恒定速率“漏水”(处理请求)。
- 桶有最大容量,超出部分直接丢弃。
- 输出速率完全恒定,不受输入速率影响。
4.3.3 计数器算法(Counter / Fixed Window)
计数器算法是最简单的实现方式,在固定时间窗口内统计请求次数,超过阈值则拒绝。常见实现包括固定窗口和滑动窗口。
| 算法 | 核心机制 | 优点 | 缺点 | 贷后适用场景 |
|---|---|---|---|---|
| 固定窗口 | 按秒/分钟/小时划分窗口,窗口内计数 | 实现简单,内存占用低 | 窗口边界可能产生双倍流量尖峰 | 对精度要求不高的批量数据导出接口 |
| 滑动窗口 | 将窗口细分为多个小格,滑动统计 | 边界平滑,精度高 | 需要更多内存和计算 | 用户实时查询、催收任务分发接口 |
4.4 算法选型决策矩阵
在实际的贷后风控 API 网关中,不同接口对限流的要求差异很大。下表帮助你在具体场景中快速选择算法:
| API 类型 | 流量特征 | 推荐算法 | 关键配置 |
|---|---|---|---|
| 用户账单查询 | 突发性强,集中在还款日 | 令牌桶 | 速率: 100/s, 容量: 500 |
| 征信报告拉取 | 均匀,第三方限制严格 | 漏桶 | 速率: 5/s, 容量: 10 |
| 催收任务状态上报 | 持续稳定,量较大 | 滑动窗口计数器 | 窗口: 1min, 阈值: 1000 |
| 内部管理后台 | 低频,操作人员少 | 固定窗口计数器 | 窗口: 1min, 阈值: 60 |
常见误区:不要对所有 API 使用同一种限流算法。例如,对征信接口使用令牌桶可能导致突发请求被第三方拒绝,而对用户查询接口使用漏桶则可能造成不必要的等待延迟。务必根据接口的 SLA 和下游依赖特性单独配置。
4.5 本节小结
- 限流的目的是保护系统、保障公平、控制成本、抵御攻击、平滑流量。
- 限流是风控的前置防线,二者在粒度、依据和动作上互补。
- 令牌桶允许突发,适合用户侧 API;漏桶强制均匀,适合第三方依赖;计数器实现简单,适合低精度场景。
- 生产环境中通常组合使用多种算法,并通过配置中心动态调整参数。