Redis限流缓存治理领域建模与架构设计 - 第1节
1.1 为什么需要限流
在分布式系统中,限流(Rate Limiting)是保护服务稳定性的第一道防线。当请求量超过系统处理能力时,如果没有限流机制,服务可能因资源耗尽而雪崩。
核心驱动力
| 驱动因素 | 典型场景 | 后果 |
|---|---|---|
| 突发流量冲击 | 秒杀、热点事件、爬虫攻击 | CPU 100%、连接池耗尽 |
| 资源有限性 | 数据库连接数、带宽、线程池 | 请求排队、超时堆积 |
| 公平性保障 | 多租户隔离、API 配额 | 恶意用户抢占资源 |
| 成本控制 | 第三方 API 调用计费 | 超额费用、被供应商封禁 |
关键认知:限流不是拒绝用户,而是有策略地保护。让系统在过载时仍能服务部分请求,避免完全不可用。
1.2 为什么需要缓存
缓存(Caching)是提升系统响应速度与吞吐量的核心手段。它将热点数据存储在高速存储层(如 Redis),减少对后端慢速存储(如数据库)的访问。
缓存带来的收益
- 降低延迟:内存读取微秒级 vs 磁盘毫秒级,差距 1000 倍以上。
- 减轻后端压力:缓存命中率 90% 时,数据库负载降低 90%。
- 平滑峰值:缓存吸收突发读请求,防止数据库被打穿。
- 节省成本:减少数据库实例扩容需求,降低硬件与运维开销。
实践要点:缓存不是银弹。缓存穿透、缓存击穿、缓存雪崩是三大经典问题,需要配合限流与降级策略共同解决。
1.3 限流与缓存的协同关系
限流与缓存并非独立存在,它们在请求处理链路中形成前后协同的关系。缓存负责加速正常请求,限流负责保护缓存和后端资源不被击穿。
典型协同模式
- 缓存前置 + 限流前置:请求先过限流,再查缓存,最后回源 DB。适用于读多写少的场景。
- 缓存穿透防护:当缓存 miss 且回源成本高时,对回源操作进行限流,防止同一热点 key 击穿缓存。
- 写请求缓冲:限流控制写入速率,缓存异步批量写入 DB,避免写风暴。
1.4 闭环领域边界概念
“闭环领域边界”是本课程的核心架构思想。它指的是:限流与缓存不再是各自独立的中间件能力,而是在业务领域内形成自我感知、自我调节的闭环系统。
传统架构 vs 闭环领域边界架构
| 维度 | 传统架构 | 闭环领域边界架构 |
|---|---|---|
| 限流策略 | 静态配置,人工调整 | 动态自适应,基于实时指标 |
| 缓存策略 | 固定 TTL,统一过期 | 按领域热度差异化,智能淘汰 |
| 数据反馈 | 无反馈,限流与缓存独立 | 缓存命中率驱动限流阈值调整 |
| 故障处理 | 人工介入,重启或扩容 | 自动降级、熔断、恢复 |
| 领域边界 | 全局统一限流/缓存 | 按业务领域划分独立资源池 |
闭环领域边界的三大原则
- 原则一:领域自治。每个业务领域拥有独立的限流阈值和缓存空间,互不干扰。订单领域的突发流量不会挤占商品领域的缓存资源。
- 原则二:指标闭环。限流器与缓存池共享领域内的实时指标(如 QPS、命中率、平均延迟),策略调整基于数据而非经验。
- 原则三:边界清晰。领域之间的限流与缓存策略通过明确的 API 契约交互,不产生隐式依赖。一个领域的降级不影响其他领域。
常见误区:很多团队将限流和缓存配置为全局统一参数,导致“一个业务出问题,全站受影响”。闭环领域边界要求按业务维度拆分,每个领域独立演进。