一、熔断背景与业务痛点:为什么自营风控需要毫秒级熔断?
大家好,我是你们的老朋友。今天咱们聊聊自营风控系统里那个让人又爱又恨的话题——毫秒级熔断。
先问大家一个问题:你手头的风控系统,面对突发流量时,能扛多久?
我见过不少团队,上线前压测都好好的,一上生产就崩。崩了之后呢?要么订单积压,要么直接拒绝所有请求。嗯,这两种结果,在金融场景里都是灾难。
1.1 传统限流的「三板斧」为什么不够用?
说到限流,大家肯定想到 Sentinel、Hystrix 这些老面孔。它们确实好用,但放在自营风控场景里,我总觉得差点意思。
为什么?
说白了,传统限流是「一刀切」的思维。它不管你是正常用户还是黑客攻击,只要流量超过阈值,统统拒绝。这在电商秒杀场景里没问题,但在金融风控里,你想想看——
- 一个高净值用户正在大额转账,系统突然限流,交易失败。用户会怎么想?
- 一个正常商户的批量结算请求,被限流挡在外面,资金延迟到账。谁负责?
我在项目中遇到过类似情况。有一次双十一,我们风控系统的 QPS 瞬间飙到平时的 20 倍。Sentinel 的滑动窗口算法直接触发限流,结果呢?大量正常交易被拒,业务方炸了锅。
后来我复盘发现,传统限流有三个硬伤:
| 对比维度 | 传统限流(Sentinel/Hystrix) | 自营风控熔断需求 |
|---|---|---|
| 判断粒度 | 全局 QPS/线程数 | 按用户、商户、渠道、产品等多维度 |
| 响应速度 | 秒级(滑动窗口统计) | 毫秒级(实时决策) |
| 降级策略 | 直接拒绝/快速失败 | 降级到低风险规则、异步处理、人工审核 |
| 业务感知 | 无(纯技术指标) | 需要结合风控评分、用户画像 |
核心矛盾:传统限流是「技术视角」的自我保护,而风控熔断需要「业务视角」的智能决策。
1.2 自营风控的「三座大山」
做自营风控系统这些年,我总结出三个绕不开的痛点:
第一座山:流量突发不可预测
金融场景的流量不像电商那样有规律。双十一、618 好歹能提前准备。但风控面对的,可能是某个黑产团伙突然发起攻击,也可能是某个爆款产品上线带来的瞬时流量。
我记得有一次,一个 P2P 平台突然爆雷,大量用户同时发起提现。风控系统瞬间被冲垮。事后看日志,从正常流量到峰值只用了 3 秒。传统限流根本来不及反应。
第二座山:误杀成本极高
在电商场景里,拒绝一个订单,用户可能换个平台买。但在金融场景里,拒绝一笔交易,可能意味着:
- 用户资金被冻结
- 商户结算延迟
- 合规风险暴露
- 用户投诉甚至诉讼
所以,风控熔断不能简单地说「我不干了」。它需要优雅降级——比如把高风险的实时决策降级为异步审核,或者把复杂规则降级为简单规则。
第三座山:系统依赖链太长
一个典型的风控请求,可能要经过:
- 网关层(鉴权、限流)
- 风控引擎(规则匹配、模型推理)
- 外部数据源(征信、黑名单、设备指纹)
- 存储层(Redis、MySQL、HBase)
任何一个环节出问题,整个链路就断了。我见过最夸张的一次,因为某个外部数据源超时,导致整个风控线程池被打满,所有请求排队等待。
我的经验:不要相信任何外部依赖的 SLA。哪怕对方承诺 99.99% 可用性,你也要做好那 0.01% 的预案。
1.3 毫秒级熔断的核心思路
说了这么多问题,那解决方案是什么?
我个人习惯把熔断分为三个层次:
- 第一层:快速失败 —— 检测到异常,立即切断,不等待。这是底线。
- 第二层:智能降级 —— 根据业务场景,选择最合适的降级策略。比如高净值用户走人工审核,普通用户直接拒绝。
- 第三层:自适应恢复 —— 系统恢复后,自动放量,逐步回归正常。
这里我画了一张图,帮大家理解整个流程:
避坑指南:我曾经犯过一个错误——把熔断阈值设得太死。比如错误率超过 50% 就熔断。结果有一次因为网络抖动,错误率瞬间飙到 60%,系统直接熔断了 5 分钟。后来我改成「连续 N 秒错误率超过阈值」才触发,效果好了很多。
1.4 为什么必须是「毫秒级」?
你可能会问:秒级不行吗?
我给大家算笔账:
- 一个风控请求的平均处理时间是 50ms
- 如果熔断判断需要 1 秒,那在这 1 秒内,系统可能已经接受了 20 个请求
- 如果这些请求都因为系统过载而失败,那熔断的意义就大打折扣
所以,熔断判断必须在毫秒级完成。我个人习惯控制在 5ms 以内,最好 1ms。
怎么做到?
- 用本地缓存代替远程调用
- 用位图、布隆过滤器等数据结构加速判断
- 用异步非阻塞模型避免线程阻塞
注意:毫秒级熔断不是银弹。它解决的是「系统过载保护」问题,而不是「系统性能优化」问题。如果你的系统本身就很慢,先优化性能,再考虑熔断。
1.5 小结
好了,这一章我们聊了:
- 传统限流在风控场景的局限性
- 自营风控的三大痛点
- 毫秒级熔断的核心思路
- 为什么必须是毫秒级
下一章,我会带大家手写一个简单的熔断器,看看代码层面怎么实现。嗯,到时候你们会发现,原理不复杂,但细节决定成败。