这是 Beta 探索课程,内容结构、实验步骤和示例可能会继续调整。
服务降级
解决方案概述
核心思路:
- 当缓存不可用时,自动降级
- 限制外部 API 访问,保护核心功能
- 返回缓存数据或默认值
设计流程
解决方案概述
- 步骤 1:写入缓存值、空值标记或热点保护状态
- 步骤 2:准备缓存 key、TTL、回源路径和保护策略
- 步骤 3:记录命中率、回源次数和异常 key 分布
- 步骤 4:按命中、未命中和异常 key 处理读取与回源
关注点:命中率、回源压力、TTL 和异常 key 处理。
降级层次:
┌─────────────────────────────────────┐
│ Level 1: Redis 缓存 │ ← 正常情况
├─────────────────────────────────────┤
│ Level 2: 本地缓存(进程内) │ ← Redis 宕机
├─────────────────────────────────────┤
│ Level 3: 外部 API │ ← 本地缓存没有
├─────────────────────────────────────┤
│ Level 4: 默认值/静态数据 │ ← 外部 API 不可用
└─────────────────────────────────────┘完整的防护方案
设计流程
完整的防护方案
- 步骤 1:写入缓存值、空值标记或热点保护状态
- 步骤 2:准备缓存 key、TTL、回源路径和保护策略
- 步骤 3:记录命中率、回源次数和异常 key 分布
- 步骤 4:读取、刷新或失效缓存数据
关注点:命中率、回源压力、TTL 和异常 key 处理。
效果验证
实施完整防护方案后的系统指标:
防护效果对比
| 指标 | 无防护 | 随机过期 | + 高可用 | + 降级 |
|---|---|---|---|---|
| 集中过期风险 | 高 | 低 | 低 | 低 |
| Redis 宕机影响 | 100% | 100% | 0% | 0% |
| 外部 API 保护 | 无 | 部分 | 强 | 最强 |
| 可用性 | 95% | 95% | 99.9% | 99.99% |
故障演练结果
故障场景测试:
1. 模拟 Redis 主节点宕机
- 故障检测时间:5 秒
- 自动切换时间:8 秒
- 影响请求:0.1%
- 结果:通过 ✅
2. 模拟 10000 个 key 同时过期
- 外部 API 峰值:正常值 120%
- 响应时间:增加 50ms
- 结果:通过 ✅
3. 模拟外部 API 不可用
- 降级响应时间:< 100ms
- 返回本地缓存数据
- 结果:通过 ✅当前技术架构
练习
练习 1
请设计一个完整的缓存雪崩防护方案,包括关键状态和兜底路径。
参考答案 (3 个标签)
缓存雪崩 方案设计 高可用
参考答案:
设计流程
练习 1
- 步骤 1:按命中、未命中和异常 key 处理读取与回源
- 步骤 2:按本节策略读取、写入缓存并处理过期或失效
- 步骤 3:校验身份、密钥或权限
关注点:命中率、回源压力、TTL 和异常 key 处理。
防护层次:
- Redis 从节点读(减轻主节点压力)
- Redis 主节点(从节点不可用时)
- 本地缓存(Redis 集群不可用时)
- 外部 API(最后的数据来源)
关键点:
- 使用 Sentinel 实现自动故障转移
- 读写分离(从节点处理读请求)
- 随机过期时间避免集中失效
- 本地缓存作为最后防线