1. 课程导论:为什么连接池会耗尽?Rate Limiting 与熔断的协同价值
在微服务与高并发架构中,连接池是数据库、缓存、下游 RPC 服务之间最关键的复用资源。当突发流量超过连接池上限时,请求会排队、超时、堆积,最终引发级联雪崩。本课程从连接池耗尽的根因出发,揭示 Rate Limiting(限流)与熔断(Circuit Breaker)如何协同工作,构建自保护的弹性系统。
1.1 连接池耗尽的三大根因
连接池耗尽并非单一原因导致,而是流量、延迟、资源三者失衡的结果。下表总结了最常见的触发场景:
| 根因 | 典型场景 | 影响链路 |
|---|---|---|
| 突发流量尖峰 | 秒杀、热点事件、爬虫攻击 | 连接瞬间被占满,新请求直接排队或拒绝 |
| 下游响应变慢 | 数据库慢查询、网络抖动、GC 停顿 | 连接持有时间延长,池内活跃连接数飙升 |
| 连接泄漏 | 未正确归还连接、事务未关闭 | 连接池容量被无效连接蚕食,最终枯竭 |
避坑提示: 连接池耗尽后,即使后续流量恢复正常,由于大量请求在等待队列中堆积超时,系统仍可能持续处于半死不活状态。这是“连接池耗尽 → 请求堆积 → 线程阻塞 → 资源耗尽”的恶性循环。
1.2 限流与熔断的职责边界
限流和熔断虽然都用于保护系统,但作用层次与触发逻辑完全不同。理解两者的差异是协同设计的前提:
| 维度 | Rate Limiting(限流) | Circuit Breaker(熔断) |
|---|---|---|
| 控制粒度 | 请求入口/调用方 | 服务调用/连接通道 |
| 触发条件 | QPS / 并发数超过阈值 | 错误率 / 超时比例超过阈值 |
| 动作 | 直接拒绝或排队等待 | 快速失败,断开调用链路 |
| 恢复方式 | 流量回落到阈值以下自动恢复 | 半开探测,成功后闭合 |
| 保护目标 | 防止连接池被瞬间打满 | 防止连接池被慢请求持续占用 |
1.3 协同价值:1+1 > 2 的保护效果
单独使用限流或熔断都存在盲区。限流无法应对下游变慢导致的连接池缓慢耗尽;熔断无法阻止突发流量瞬间冲垮连接池。协同设计的核心价值在于:
- 限流在前,熔断在后: 限流拦截尖峰流量,熔断切断慢调用链路,两者配合将连接池占用率控制在安全水位。
- 快速失败 vs 优雅降级: 熔断触发时快速失败,避免线程阻塞;限流配合排队或降级响应,保留部分可用性。
- 恢复阶段协同: 熔断半开探测期间,限流仍持续生效,防止探测请求再次打满连接池。
1.4 压测验证的必要性
理论设计必须经过压测验证。本课程将通过实战压测,展示以下关键指标的变化:
- 连接池占用率: 限流生效后,占用率是否稳定在阈值以下。
- 熔断触发次数: 下游变慢时,熔断是否及时切断调用链路。
- 系统吞吐量(TPS): 协同保护下,系统是否保持稳定输出而非归零。
- 恢复时间: 流量回落后,连接池和熔断状态恢复的速度。
课程目标: 通过本课程,你将掌握限流与熔断的协同配置方法,并能在压测环境中验证其保护效果,避免生产环境连接池耗尽导致的雪崩事故。