
1) 【一句话结论】
瞬时10万并发会导致服务器CPU、内存、网络及磁盘I/O资源瞬间耗尽,核心解决方案是通过负载均衡分散请求、分布式会话存储避免内存溢出(OOM)、缓存减少数据库压力、数据库读写分离提升读性能,并配合弹性伸缩应对突发流量。
2) 【原理/概念讲解】
解释并发与资源瓶颈:并发指大量用户同时发起请求,此时服务器资源(CPU处理请求、内存存储会话、网络传输数据、磁盘I/O处理数据持久化)成为瓶颈。类比:高峰期地铁进站,10万人在同一时间进闸机(服务器),每个闸机(服务器实例)处理能力有限,导致排队时间过长甚至系统崩溃。关键资源在高并发下的表现:
3) 【对比与适用场景】
负载均衡策略(表格):
| 策略 | 定义 | 特性 | 使用场景 | 注意点 |
|------|------|------|----------|--------|
| 最少连接 | 选择当前连接数最少的服务器分配请求 | 优化连接数,避免单点过载 | 连接数差异大的场景 | 需实时统计连接数,增加CPU开销 |
| 加权轮询 | 根据服务器性能分配权重,性能高的分配更多请求 | 考虑性能差异 | 服务器性能不同 | 权重计算复杂,需定期调整 |
| 轮询 | 按顺序分配请求 | 简单,负载均衡 | 服务器性能一致 | 可能导致负载不均 |
| IP哈希 | 根据IP哈希分配请求 | 请求固定到服务器 | 会话粘性场景 | 用户切换设备后请求不同 |
分布式会话存储(要点):
数据库读写分离(要点):
4) 【示例】
# 集群配置
cluster-enabled yes
cluster-config-file nodes-redis.conf
cluster-node-timeout 2000
appendonly yes
# 会话存储示例(用户ID为1001的会话)
SET "exam_session:1001" '{"user_id":123, "exam_id":101, "start_time":"2023-10-27 09:00"}'
upstream db_cluster {
server db-master:3306 check interval 2s fall 3 rise 2; # 主库
server db-slave1:3306 check interval 2s fall 3 rise 2; # 从库1
server db-slave2:3306 check interval 2s fall 3 rise 2; # 从库2
}
server {
listen 3306;
location / {
proxy_pass http://db_cluster;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
# 读写分离路由
if ($request_method = POST) {
proxy_pass http://db_cluster;
} else {
proxy_pass http://db_cluster?read_only=1;
}
}
}
5) 【面试口播版答案】
“面试官您好,针对在线考试系统10万并发登录的瞬时流量激增问题,核心性能瓶颈是服务器CPU、内存、网络及磁盘I/O资源瞬间耗尽。解决方案需从架构优化入手:首先,通过负载均衡器(如Nginx)采用最少连接策略,将请求分发到连接数最少的服务器,避免单点过载;其次,引入Redis作为分布式会话存储,将用户会话从单机内存转移到集群,避免内存溢出(OOM);再者,配置数据库读写分离,将读操作(如查询题目、用户信息)分发到从库,提升读性能;最后,结合弹性伸缩,根据流量动态增加服务器实例。具体来说,负载均衡器实时统计各服务器的连接数,优先分配到负载轻的服务器;缓存设置随机过期时间(如±10%),防雪崩;从库数量与主库匹配,确保读压力分散。这些措施能有效缓解瞬时流量带来的性能问题。”
6) 【追问清单】
7) 【常见坑/雷区】