
1) 【一句话结论】
通过分析高并发在线考试系统的请求风暴问题,采用限流(令牌桶算法)、熔断(断路器模式)、异步解耦(消息队列)和缓存优化策略,成功保障系统稳定,核心经验是技术方案需结合业务场景,并提前做压力测试。
2) 【原理/概念讲解】
老师:咱们先讲几个关键概念,别空谈。首先,“高并发”不是单纯“多请求”,而是“短时间内请求量远超系统设计容量”,比如考试开始时数万考生同时答题,属于典型的“请求风暴”。
3) 【对比与适用场景】
| 技术名称 | 定义 | 特性 | 使用场景 | 注意点 |
|---|---|---|---|---|
| 限流 | 控制请求速率,防止系统过载 | 限制流量,允许少量突发 | 秒杀、考试系统、登录接口 | 需动态调整阈值,避免误判 |
| 熔断 | 服务故障时快速失败,保护系统 | 断开请求,保护系统 | 微服务调用、第三方接口 | 需自动恢复机制,避免长期熔断 |
4) 【示例】
# 伪代码:考试系统请求处理流程
def handle_exam_request(request):
# 1. 限流检查(令牌桶算法)
if not rate_limiter.check(request.user_id):
return {"code": "429", "msg": "请求太频繁"}
# 2. 熔断检查(针对数据库查询)
if db_circuit_breaker.is_open():
return {"code": "503", "msg": "数据库服务暂时不可用"}
# 3. 异步处理(提交到消息队列)
async_queue.put(request)
return {"code": "200", "msg": "请求已接收"}
5) 【面试口播版答案】
“面试官您好,我分享的是参与的高并发在线考试系统项目。当时面临的核心挑战是考试开始时,数万名考生同时发起答题请求,导致服务器CPU飙升、数据库锁竞争严重,系统响应超时率超过50%。首先,我通过压力测试(模拟10万并发)定位到请求风暴是主因——短时间内请求量远超系统设计容量。然后,从技术层面分析,采用限流(使用令牌桶算法控制每秒请求数)、熔断(针对数据库查询的断路器,当查询超时率超过阈值时触发)、异步解耦(将答题记录写入消息队列,由消费者异步写入数据库)和缓存优化(将热门考题答案缓存到Redis,减少数据库查询)。实施后,系统响应时间从2秒降至0.3秒,超时率降到1%以内。从中学到,高并发问题需提前做压力测试,技术方案要结合业务场景,比如考试系统对实时性要求高,所以熔断后需快速恢复,不能完全关闭服务。”
6) 【追问清单】
7) 【常见坑/雷区】