51mee - AI智能招聘平台Logo
模拟面试题目大全招聘中心会员专区

系统在双十一大促时出现服务崩溃,请分析可能的高并发问题并说明如何设计应对方案。

信步科技技术支持难度:中等

答案

1) 【一句话结论】
双十一大促时系统服务崩溃,本质是高并发下系统各层(网络、应用、数据库、缓存)资源耗尽,导致请求处理能力饱和,需从架构拆分、资源扩容、缓存优化、负载均衡、网络限流等维度设计应对方案。

2) 【原理/概念讲解】
高并发下系统崩溃的核心问题包括:

  • 网络层高并发问题:TCP连接数耗尽(服务器配置的max_connections被占满)、网络带宽瓶颈(请求速率超过传输能力),导致新请求无法建立连接或传输超时(类比:网络带宽像高速公路,车太多堵住,新车进不来或走得很慢)。
  • 请求队列积压:当请求速率超过处理速率,队列持续增长,导致请求超时或被丢弃(类比:超市收银台顾客排队,收银员速度慢,队伍越来越长,顾客放弃)。
  • 资源竞争:多线程/进程争抢CPU时间片、内存空间,导致线程阻塞或死锁(类比:多个厨师同时抢锅,锅不够用,效率下降;死锁则像厨师们互相等锅,谁也拿不到,都停工)。
  • 数据库瓶颈:数据库连接池耗尽(并发连接数过多)、SQL慢查询(如全表扫描)、行级锁竞争(如扣库存时多个请求同时争抢同一行数据),导致响应延迟(类比:数据库服务器CPU满载,处理请求变慢,连接池里的连接都在等待,新连接无法建立)。
  • 缓存雪崩:大量缓存键同时失效(如缓存过期时间统一),请求直接访问后端数据库,引发数据库压力激增(类比:所有冰箱里的冰块同时融化,导致大家去抢水,水管压力过大);缓存击穿:单点缓存失效,高并发请求集中访问数据库(类比:热门商品缓存失效,所有用户同时访问数据库查库存,数据库瞬间爆表)。

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) 【追问清单】

  • 如何判断是网络层瓶颈?
    回答:通过监控TCP连接数(连接池使用率超90%)、网络带宽利用率(接近100%),或者请求超时率突然升高(如从1%跳到50%),这些指标超阈值则说明是网络层瓶颈。
  • 分库分表具体怎么实现?
    回答:用ShardingSphere,按业务ID分片,比如订单表按order_id的哈希值分库(如order_0, order_1...),库存表按product_id分片(如stock_0, stock_1...),避免单库压力过大,同时通过分片路由保证数据一致性。
  • 熔断降级的阈值怎么配置?
    回答:比如熔断次数设为5次(连续5次调用失败),恢复时间60秒(熔断后等待60秒再尝试),滑动窗口内失败率超过50%触发熔断,按指数退避(如第一次等待1秒,第二次2秒...)恢复调用。
  • 缓存预热怎么做?
    回答:系统启动时,读取数据库中热点数据(如热门商品库存、用户信息)放入Redis,减少启动后的请求压力,比如启动时执行SQL查询热门商品库存,存入Redis,设置较长的过期时间(如1小时)。
  • 拆分服务后服务间通信延迟怎么解决?
    回答:用异步消息队列(如Kafka)传递库存减少事件,订单服务消费事件后更新订单状态,避免同步调用导致延迟,同时消息队列能缓冲请求,平滑流量。

7) 【常见坑/雷区】

  • 忽略网络层问题,只说应用层优化:直接加服务器但TCP连接数耗尽,系统崩溃,治标不治本。
  • 数据库优化只做读写分离,没做分库分表:大促时单库仍超负荷,导致慢查询和锁竞争,影响性能。
  • 熔断降级没配置阈值,导致一直熔断:服务调用方一直熔断,返回默认值,但实际服务已恢复,导致业务不可用。
  • 缓存雪崩没做过期时间随机化:导致集中失效,数据库压力激增,可能引发数据库宕机。
  • 拆分服务后没考虑数据一致性:比如库存减少事件丢失,导致订单超卖,影响用户体验和业务数据准确性。
51mee.com致力于为招聘者提供最新、最全的招聘信息。AI智能解析岗位要求,聚合全网优质机会。
产品招聘中心面经会员专区简历解析Resume API
联系我们南京浅度求索科技有限公司admin@51mee.com
联系客服
51mee客服微信二维码 - 扫码添加客服获取帮助
© 2025 南京浅度求索科技有限公司. All rights reserved.
公安备案图标苏公网安备32010602012192号苏ICP备2025178433号-1