
1) 【一句话结论】通过引入限流(令牌桶算法)、异步消息队列、缓存预热及数据库优化等组合方案,成功将系统QPS从2000提升至8000,响应时间从2秒降至0.5秒,超时率从50%降至5%以下,保障了业务高并发稳定性。
2) 【原理/概念讲解】高并发问题核心是系统资源(CPU、内存、IO、网络)被大量请求同时占用,导致性能下降甚至崩溃。常见解决方案包括:
3) 【对比与适用场景】以限流和熔断为例,对比如下:
| 方案 | 定义 | 原理 | 适用场景 | 注意点 |
|---|---|---|---|---|
| 限流(令牌桶) | 控制请求进入系统的速率,防止系统过载 | 每秒生成固定数目的“令牌”,请求需消耗令牌才能执行,无令牌则丢弃 | 高并发场景下的流量控制(如API网关、秒杀系统) | 需精确计算令牌速率,避免过度限制正常请求 |
| 熔断(断路器) | 当服务故障时快速失败,避免级联故障 | 设置失败次数阈值,超过则断路器“打开”,后续请求直接失败 | 服务依赖场景(如调用第三方接口、微服务间调用) | 需合理设置断路器恢复策略(如延迟、重试) |
4) 【示例】假设一个电商“秒杀”API(/api/seckill),原本是同步调用数据库查询商品库存并扣减,高并发时数据库压力过大。解决方案:
class TokenBucket:
def __init__(self, capacity, rate):
self.capacity = capacity
self.rate = rate # 每秒生成令牌数
self.tokens = capacity
self.last_time = time.time()
def consume(self, n=1):
current_time = time.time()
elapsed = current_time - self.last_time
self.tokens = min(self.capacity, self.tokens + elapsed * self.rate)
self.last_time = current_time
if self.tokens >= n:
self.tokens -= n
return True
return False
POST /api/seckill
{
"goods_id": 123,
"user_id": 1001
}
5) 【面试口播版答案】我之前参与过一个电商平台的秒杀系统优化项目,当时系统在双十一秒杀高峰期出现高并发问题,具体表现为API响应超时率超过50%,系统CPU利用率飙升至90%,用户投诉增多。我的解决方案是分三步:首先,在网关层引入令牌桶限流,将QPS限制在8000以内,避免请求直接冲击后端;其次,将原本同步的数据库查询改为异步处理,通过Kafka消息队列将请求放入队列,后端消费者异步处理,减少数据库压力;最后,对热点商品信息进行缓存预热,提前将商品数据加载到Redis,减少数据库访问。实施后,系统QPS从2000提升至8000,响应时间从2秒降至0.5秒,超时率降到5%以下,成功保障了业务稳定。
6) 【追问清单】
7) 【常见坑/雷区】