面试主题:高并发场景下,你一般从哪几个方向做优化?
一、先定位瓶颈:不盲目优化
高并发优化不是所有手段一起上,而是先诊断、再动手。
我会先通过压测、监控、链路追踪,明确瓶颈:
- 是 CPU 密集 / IO 密集?
- 是锁竞争、外部调用慢、还是数据库扛不住?
- 是流量突刺、还是长期高吞吐?
先找到瓶颈在哪一层,再针对性优化,优先级从外到内。
二、前端 & 接入层:能挡在外面的绝不进后端
目标:减少无效请求、降低源头流量。
- 静态资源走 CDN,就近访问,不回源
- 资源压缩、合并、懒加载,减少请求量
- 接口防抖、节流,避免重复点击刷屏
- 前端缓存:强缓存/协商缓存,降低重复请求
注意: 前端只能挡无效流量,挡不住真实业务洪峰。
三、网关层:流量总闸门,第一级防护
目标:控流、过滤、路由、兜底。
- 统一限流:令牌桶/漏桶,防止流量打穿
- 黑白名单、鉴权、风控,提前过滤非法流量
- 负载均衡,把流量打散到多台机器
- 熔断、降级:下游挂了不拖垮整条链路
这是高并发第一道硬防线,必须优先做。
四、应用服务层:提升单机吞吐 + 水平扩容
目标:让服务能横向扩展、单机更快。
- 服务无状态化,保证可以随便扩副本
- 本地缓存(Caffeine)+ 分布式缓存(Redis)
注意: 要解决缓存穿透、击穿、雪崩(布隆过滤器、互斥锁、过期时间打散)
- 异步化:线程池异步 / MQ 削峰解耦
IO 密集型:线程数可以设大一些
CPU 密集型:线程数不超过 CPU 核心数
- 池化技术:连接池、线程池复用,避免频繁创建销毁
先提升复用与异步,再去改代码算法。
五、数据存储层:高并发最大瓶颈就在这
目标:让数据库少干活、不干活。
- 能放缓存的不放数据库
- 读写分离:读多写少场景必上
- 分库分表:解决单表过大、写入瓶颈
注意: 要考虑分布式事务、跨库分页、join 问题
- 索引优化 + SQL 优化:避免慢查询拖垮整库
- 冷热数据分离:热数据放缓存/SSD,冷数据归档
数据库是最后一道关卡,能不让它扛就不让它扛。
六、中间件 & 基础设施:支撑高并发的底座
- 消息队列削峰填谷,把脉冲流量变成平滑流量
注意: 消息丢失、重复、顺序性要保证
- 分布式锁:防止超卖、重复提交、并发安全问题
- K8s / 容器化:自动扩缩容,应对突发流量
- 监控体系:CPU、内存、QPS、RT、错误率、队列堆积
没有监控,高并发就是在裸奔。
七、兜底策略:扛不住时,保证系统不死
这是加分亮点,高级工程师必答。
- 熔断:下游不行就直接断开,不无限等待
- 降级:非核心功能直接关掉,保核心链路
- 限流:超过阈值直接拒绝,快速失败
- 过载保护:机器负载高时自动限流,不被打崩
高并发的终极目的:不是扛无限流量,而是扛得住、不宕机。
答:
高并发优化是一套从外到内、先诊断后实施、有优先级、有兜底的全链路体系。
我一般会先通过监控和压测定位瓶颈,再按这个顺序优化:
1. 前端/CDN 挡无效流量
2. 网关做限流、熔断、负载均衡
3. 应用层做无状态扩容、缓存、异步、池化
4. 数据层做读写分离、分库分表、索引优化
5. 中间件做削峰、分布式锁、弹性伸缩
6. 最后用熔断、降级、限流、过载保护做兜底
每一步都有技术选型和风险权衡:缓存要防雪崩,异步要防消息丢失,分库分表要处理分布式问题。
最终目标是:在高并发下,系统依然稳定、可用、可扩展。
注意事项:本专辑作品为原创作品,如需合作请私信