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

之前开发PC客户端时,遇到高并发场景(如节日红包),如何优化系统?请分享具体的技术手段,如消息队列解耦、负载均衡、监控指标调整等,并说明效果。

Tencent软件开发-PC客户端开发方向难度:困难

答案

1) 【一句话结论】

在高并发红包场景,通过消息队列解耦+堆积阈值扩容、负载均衡故障切换、数据库读写分离+缓存预热+Redis分布式锁,结合实时监控QPS和响应时间,系统吞吐量提升3倍(从5000/秒到1.5万/秒),错误率降至0.05%。

2) 【原理/概念讲解】

老师口吻:系统在高并发下易出现CPU饱和、数据库锁竞争、网络阻塞等瓶颈。具体优化手段如下:

  • 消息队列解耦:像快递中转站,前端(用户点击发红包)将请求封装为消息写入队列(如Kafka),服务(红包发放服务)异步消费,避免直接调用导致服务阻塞。设置堆积阈值(如1000条),当积压超过时,自动增加消费者实例(扩容),防止消息堆积。
  • 负载均衡:Nginx将请求分发到后端服务器,通过健康检查(每秒ping后端服务)和会话保持(cookie)实现故障切换,故障服务器被剔除后请求转向其他正常服务器。
  • 数据库优化:读写分离(主库写,从库读),减少主库压力;缓存预热(提前将库存数据写入Redis),避免高并发时数据库查询;Redis分布式锁(扣库存时加锁),确保原子性,防超卖。
  • 监控指标调整:QPS(请求每秒数,目标1万/秒)、响应时间P99(99%请求的响应时间,目标0.5秒),超阈值触发熔断,减少错误传播。

3) 【对比与适用场景】

技术方案定义特性使用场景注意点
消息队列(Kafka)面向消息的中间件,存储异步消息解耦、削峰、持久化业务解耦(如红包发放与支付)需设置堆积阈值(如1000条),超阈值扩容消费者
负载均衡(Nginx)将请求分发到多台服务器分散流量、提高可用性前端请求分发、后端服务集群需配置健康检查(1秒间隔)和会话保持(cookie)
数据库读写分离主库写,从库读减少主库压力高并发场景下的数据库读写需保证数据一致性(如事务隔离)
缓存预热提前加载热点数据到缓存降低数据库压力高并发场景下的热点数据需考虑缓存失效策略(如TTL)
Redis分布式锁基于Redis的互斥锁确保原子性、防超卖并发扣减库存等场景需设置锁过期时间(防死锁)

4) 【示例】

假设红包发放流程:

  1. 前端请求 POST /sendRedPacket,网关接收后,将请求封装为消息写入Kafka(主题:red_packet)。
  2. Kafka设置堆积阈值1000条,当积压超过时,自动增加消费者实例(从2个到4个)。
  3. 负载均衡Nginx每秒健康检查后端服务,故障服务器被剔除,请求转向其他正常服务器。
  4. 消费者服务处理逻辑:
    • 从Redis缓存中读取库存(缓存预热后,避免数据库查询);
    • 用Redis分布式锁扣减库存(加锁+队列确保原子性);
    • 扣减成功后,将库存数据更新回Redis,并通知用户。
  5. 监控指标:Prometheus监控QPS(目标1万/秒),超阈值触发熔断;响应时间P99超0.5秒报警。

5) 【面试口播版答案】(约90秒)

“面试官您好,针对节日红包这种高并发场景,我主要从解耦、削峰、数据库优化和监控这几个方面做了优化。首先,消息队列解耦,用Kafka,前端请求后消息写入队列,服务异步消费,避免直接调用阻塞。Kafka设置了堆积阈值1000条,超时自动增加消费者实例(从2个到4个)。然后,负载均衡用Nginx,每秒健康检查后端服务,故障服务器被剔除,请求转向其他正常服务器。数据库方面,采用读写分离,主库写库存,从库读;缓存预热,提前将库存数据写入Redis;扣库存时用Redis分布式锁,防超卖。监控指标包括QPS(目标1万/秒)和响应时间P99(0.5秒),超阈值触发熔断。效果上,系统吞吐量从5000/秒提升到1.5万/秒,错误率从5%降到0.05%。”

6) 【追问清单】

  • 问:消息队列堆积阈值如何动态调整?
    答:基于Prometheus的QPS指标,当积压超过阈值时,自动扩容消费者实例。
  • 问:数据库缓存预热如何实现?
    答:提前将库存数据写入Redis,避免高并发时数据库压力。
  • 问:Redis分布式锁如何解决超卖?
    答:设置锁过期时间,结合队列确保原子性,防止并发扣减库存。
  • 问:负载均衡健康检查的间隔设置依据?
    答:1秒间隔确保故障服务器能及时被剔除,避免请求分发到故障节点。
  • 问:监控指标阈值如何设置?
    答:QPS阈值1万/秒(基于历史峰值),响应时间P99阈值0.5秒(保证99%用户体验)。

7) 【常见坑/雷区】

  • 消息队列堆积阈值未设置:导致消费者处理不过来,系统崩溃。
  • 数据库缓存未预热:高并发时数据库查询压力激增,引发雪崩。
  • 分布式锁未考虑超时:扣库存时锁未释放,导致死锁。
  • 监控阈值设置不合理:QPS阈值过低浪费资源,过高无法及时响应;响应时间阈值过高,无法有效监控性能。
51mee.com致力于为招聘者提供最新、最全的招聘信息。AI智能解析岗位要求,聚合全网优质机会。
产品招聘中心面经会员专区简历解析Resume API
联系我们南京浅度求索科技有限公司admin@51mee.com
联系客服
51mee客服微信二维码 - 扫码添加客服获取帮助
© 2025 南京浅度求索科技有限公司. All rights reserved.
公安备案图标苏公网安备32010602012192号苏ICP备2025178433号-1