
1) 【一句话结论】:在流量峰值期间,通过“流量削峰(缓存、队列缓冲)+ 请求控制(限流、熔断)+ 功能降级(非核心功能暂停)+ 自动化监控与快速恢复”的组合策略,快速识别并隔离故障,避免服务雪崩,保障核心服务稳定性。
2) 【原理/概念讲解】:老师口吻,解释服务雪崩:当系统某部分因流量过大导致超时或宕机,会引发连锁反应(如用户请求A调用B,B调用C,C因压力过大超时,导致B超时、A超时,最终用户请求全部失败)。应对手段:
3) 【对比与适用场景】:
| 技术手段 | 定义 | 特性 | 使用场景 | 注意点 |
|---|---|---|---|---|
| 限流 | 控制请求速率,限制每秒请求数 | 主动按速率限制 | 高并发场景,防止系统过载 | 阈值需合理,避免影响正常请求 |
| 熔断 | 服务失败率超阈值时,直接返回失败 | 主动断开调用,避免级联 | 服务间调用,防止故障扩散 | 阈值需平衡可用性与故障恢复 |
| 降级 | 暂停非核心功能,释放资源 | 主动降级,优先保障核心 | 核心业务压力过大时 | 需明确核心与非核心功能 |
| 削峰 | 通过缓存、队列缓冲流量 | 主动缓冲,平滑流量 | 热点数据、突发流量 | 缓存需考虑一致性,队列需防积压 |
4) 【示例】:以限流(令牌桶算法)为例,伪代码:
class RateLimiter:
def __init__(self, rate, capacity):
self.rate = rate # 每秒生成token数
self.capacity = capacity # 桶容量
self.tokens = capacity
self.last_time = time.time()
def acquire(self):
now = time.time()
elapsed = now - self.last_time
self.tokens = min(self.capacity, self.tokens + elapsed * self.rate)
self.last_time = now
return self.tokens >= 1 # 返回True表示允许请求
调用时,每个请求调用acquire(),若返回False则拒绝请求。
5) 【面试口播版答案】:
“面试官您好,针对双十一等流量峰值导致的“服务雪崩”,我的应对措施主要围绕流量控制(限流、熔断)+ 功能降级+ 流量削峰,结合自动化监控和快速恢复流程。首先,流量削峰方面,我们会通过Redis缓存热点数据(如商品信息、优惠券),减少数据库压力;对于需要异步处理的请求,用消息队列(如Kafka)缓冲,避免直接调用后端服务。然后,流量控制:对核心接口启用令牌桶限流,比如每秒限制1000个请求,防止后端服务过载;当服务调用失败率超过50%时,启用熔断器(如Hystrix),直接返回失败,避免请求继续堆积。同时,实施功能降级,比如暂停次要API(如用户反馈统计接口),将资源留给核心订单处理、支付接口。最后,通过Prometheus+Grafana监控关键指标(如接口QPS、响应时间、失败率),当指标超过阈值时,自动触发熔断或降级,并通知运维团队。整个流程是:监控预警→快速响应(限流/熔断/降级)→资源恢复→服务恢复,确保在流量峰值期间系统稳定。”
6) 【追问清单】:
7) 【常见坑/雷区】: