
1) 【一句话结论】
双十一大促时系统服务崩溃,本质是高并发下系统各层(网络、应用、数据库、缓存)资源耗尽,导致请求处理能力饱和,需从架构拆分、资源扩容、缓存优化、负载均衡、网络限流等维度设计应对方案。
2) 【原理/概念讲解】
高并发下系统崩溃的核心问题包括:
3) 【对比与适用场景】
| 策略/算法 | 定义 | 特性 | 使用场景 | 注意点 |
|---|---|---|---|---|
| 负载均衡算法(Nginx) | 分发请求到后端服务器 | 轮询(均匀分发)、加权轮询(性能差异)、最少连接(连接数最少) | 服务器性能一致或差异大 | 需实时监控服务器负载,避免单点过载 |
| 分库分表策略(ShardingSphere) | 按业务规则拆分数据库表 | 水平分片(按ID哈希)、垂直分片(按列拆分) | 数据量巨大,单库压力过大 | 需考虑数据一致性和查询复杂度 |
| 熔断降级(Hystrix) | 服务调用方设置熔断器,超时/失败次数超阈值触发 | 快速失败、按指数退避恢复 | 服务间调用,避免级联故障 | 阈值需根据业务调整,避免误触发 |
4) 【示例】
用户下单请求流程(伪代码,高并发场景):
用户发送下单请求(GET /order/create?productId=123&quantity=2)
1. 网络层:请求发送到服务器,TCP连接数耗尽(max_connections=1000,当前998个连接),新连接无法建立,请求超时。
2. 应用层:若连接建立,请求进入队列(队列长度=5000,请求速率=10000req/s,处理速率=5000req/s),队列积压,请求超时。
3. 数据库层:若队列积压,请求进入数据库连接池(连接池大小=200,当前200个连接都在处理请求,新连接等待超时),扣库存操作(UPDATE product SET stock=stock-2 WHERE id=123)因连接池耗尽阻塞。
4. 缓存层:若缓存未失效,请求直接从Redis获取库存(若缓存失效,请求访问数据库,引发缓存雪崩)。
高并发下,大量请求同时执行“扣库存”操作,导致数据库连接池耗尽,SQL执行时间变长(如从10ms延长到500ms),引发连锁故障。
5) 【面试口播版答案】
“双十一大促时系统崩溃,核心是高并发下资源(网络、应用、数据库、缓存)耗尽。比如网络层TCP连接数耗尽,大量请求无法建立连接;应用层请求队列积压,处理能力跟不上导致超时;数据库连接池耗尽,并发请求太多连接不够;缓存雪崩,大量缓存失效导致数据库压力激增。应对方案:网络层用连接池和限流(如Nginx的连接数限制);应用层拆分服务(订单、库存、支付),用负载均衡(Nginx轮询分发到多实例);数据库优化用分库分表(ShardingSphere按订单ID哈希分库),连接池扩容,读写分离;缓存用Redis集群,过期时间随机化(5-10秒内随机),缓存预热(系统启动时预加载热点数据);熔断降级,配置熔断次数(5次)、恢复时间(60秒),滑动窗口内失败率超过50%触发熔断。比如用Redis缓存库存,减少数据库查询;用Nginx负载均衡,将请求分发到多个订单实例,避免单台过载;熔断器超时5次触发,返回默认值(库存不足),按指数退避恢复调用。”
6) 【追问清单】
7) 【常见坑/雷区】