
1) 【一句话结论】在高并发场景下,系统可用性通过“限流(控制请求速率)、熔断(隔离故障服务)、降级(资源优先级调整)”的组合策略实现,核心是动态调整策略参数,预防雪崩效应,保障核心业务稳定。
2) 【原理/概念讲解】
老师口吻解释:
3) 【对比与适用场景】
| 技术方案 | 定义 | 特性 | 使用场景 | 注意点 |
|---|---|---|---|---|
| 限流 | 控制请求进入系统的速率,防止服务器过载 | 限制流量速率,允许突发但有限 | 高并发场景(如秒杀、活动),保护后端服务 | 阈值需动态调整(如根据系统负载),避免正常流量被拒绝 |
| 熔断 | 当服务调用失败率超过阈值时,直接返回失败或占位符 | 隔离故障,避免级联故障 | 依赖的服务(如第三方接口、数据库)故障时 | 阈值和恢复时间需动态调整,避免误触发 |
| 降级 | 关闭非核心功能,优先保障核心服务 | 资源优先级调整,牺牲部分功能 | 系统资源不足(如CPU、内存)时 | 需明确核心业务,避免降级影响关键流程 |
4) 【示例】(线上秒杀活动)
限流:令牌桶伪代码(控制每秒请求数):
class TokenBucket:
def __init__(self, capacity, rate):
self.capacity = capacity # 桶容量
self.rate = rate # 每秒生成令牌数
self.tokens = capacity
self.last_update = time.time()
def consume(self, n=1):
now = time.time()
elapsed = now - self.last_update
self.tokens = min(self.capacity, self.tokens + elapsed * self.rate)
self.last_update = now
if self.tokens >= n:
self.tokens -= n
return True
return False
秒杀接口中调用 token_bucket.consume(),若返回 False 则拒绝请求。
熔断:计数器逻辑(库存服务调用):
class CircuitBreaker:
def __init__(self, success_threshold, failure_threshold, call_count, reset_timeout):
self.success_threshold = success_threshold # 成功率阈值(如50%)
self.failure_threshold = failure_threshold # 失败率阈值(如50%)
self.call_count = call_count
self.reset_timeout = reset_timeout
self.state = 'CLOSED' # CLOSED, OPEN, HALF_OPEN
self.success_count = 0
self.failure_count = 0
def record_success(self):
self.success_count += 1
if self.state == 'OPEN':
self.transition_to_half_open()
def record_failure(self):
self.failure_count += 1
if self.state == 'HALF_OPEN':
if self.failure_count >= self.failure_threshold:
self.state = 'OPEN'
self.reset()
else:
self.success_count += 1
def transition_to_half_open(self):
self.state = 'HALF_OPEN'
self.reset()
def reset(self):
self.call_count = 0
self.success_count = 0
self.failure_count = 0
秒杀时调用库存服务,若熔断器状态为 OPEN,直接返回失败;若为 HALF_OPEN,尝试调用一次,根据结果调整状态。
降级:代码示例(不查询库存,直接返回有货):
def process_order(order):
# 核心业务:下单
if is_core_service(): # 核心业务标识
# 处理核心逻辑(如扣库存、生成订单)
return "order processed"
else:
# 降级:关闭非核心功能(如不查询用户历史消费记录)
return "order processed (non-core features disabled)"
5) 【面试口播版答案】
在高并发场景下,保证系统可用性的核心是采用“限流、熔断、降级”组合策略。限流通过令牌桶算法动态控制请求速率,比如秒杀时限制每秒1000个请求,防止服务器过载;熔断机制当库存服务调用失败率超过阈值(如50%)时,直接返回失败,避免级联故障;降级则是当库存系统响应慢时,暂时不查询库存,直接返回“库存充足”,保障交易流程。三者结合,通过动态调整策略参数,从流量控制、故障隔离到资源优先级保障,有效应对高并发下的可用性问题。
6) 【追问清单】
7) 【常见坑/雷区】