面试:高并发场景下,你一般从哪几个方向做优化?

17 阅读1分钟

面试主题:高并发场景下,你一般从哪几个方向做优化?

一、先定位瓶颈:不盲目优化

高并发优化不是所有手段一起上,而是先诊断、再动手

我会先通过压测、监控、链路追踪,明确瓶颈: 

  • 是 CPU 密集 / IO 密集?
  • 是锁竞争、外部调用慢、还是数据库扛不住?
  • 是流量突刺、还是长期高吞吐?

先找到瓶颈在哪一层,再针对性优化,优先级从外到内。

二、前端 & 接入层:能挡在外面的绝不进后端

目标:减少无效请求、降低源头流量

  • 静态资源走 CDN,就近访问,不回源 ​
  • 资源压缩、合并、懒加载,减少请求量 ​
  • 接口防抖、节流,避免重复点击刷屏 ​
  • 前端缓存:强缓存/协商缓存,降低重复请求

注意: 前端只能挡无效流量,挡不住真实业务洪峰。

 三、网关层:流量总闸门,第一级防护

目标:控流、过滤、路由、兜底。 

  • 统一限流:令牌桶/漏桶,防止流量打穿 ​
  • 黑白名单、鉴权、风控,提前过滤非法流量 ​
  • 负载均衡,把流量打散到多台机器 ​
  • 熔断、降级:下游挂了不拖垮整条链路

这是高并发第一道硬防线,必须优先做。

四、应用服务层:提升单机吞吐 + 水平扩容

目标:让服务能横向扩展、单机更快。 

  • 服务无状态化,保证可以随便扩副本 ​
  • 本地缓存(Caffeine)+ 分布式缓存(Redis) 

        注意: 要解决缓存穿透、击穿、雪崩(布隆过滤器、互斥锁、过期时间打散) ​

  • 异步化:线程池异步 / MQ 削峰解耦 ​

            IO 密集型:线程数可以设大一些 ​

            CPU 密集型:线程数不超过 CPU 核心数 ​

  • 池化技术:连接池、线程池复用,避免频繁创建销毁

先提升复用与异步,再去改代码算法。

五、数据存储层:高并发最大瓶颈就在这

目标:让数据库少干活、不干活

  • 能放缓存的不放数据库 ​
  • 读写分离:读多写少场景必上 ​
  • 分库分表:解决单表过大、写入瓶颈 

        注意: 要考虑分布式事务、跨库分页、join 问题 ​

  • 索引优化 + SQL 优化:避免慢查询拖垮整库 ​
  • 冷热数据分离:热数据放缓存/SSD,冷数据归档

数据库是最后一道关卡,能不让它扛就不让它扛。

六、中间件 & 基础设施:支撑高并发的底座

  • 消息队列削峰填谷,把脉冲流量变成平滑流量 

        注意: 消息丢失、重复、顺序性要保证 ​

  • 分布式锁:防止超卖、重复提交、并发安全问题 ​
  • K8s / 容器化:自动扩缩容,应对突发流量 ​
  • 监控体系:CPU、内存、QPS、RT、错误率、队列堆积

没有监控,高并发就是在裸奔。

七、兜底策略:扛不住时,保证系统不死

这是加分亮点,高级工程师必答。 

  • 熔断:下游不行就直接断开,不无限等待 ​
  • 降级:非核心功能直接关掉,保核心链路 ​
  • 限流:超过阈值直接拒绝,快速失败 ​
  • 过载保护:机器负载高时自动限流,不被打崩

高并发的终极目的:不是扛无限流量,而是扛得住、不宕机。

答:

高并发优化是一套从外到内、先诊断后实施、有优先级、有兜底的全链路体系。

我一般会先通过监控和压测定位瓶颈,再按这个顺序优化:

1. 前端/CDN 挡无效流量 ​

2. 网关做限流、熔断、负载均衡

3. 应用层做无状态扩容、缓存、异步、池化 ​

4. 数据层做读写分离、分库分表、索引优化 ​

5. 中间件做削峰、分布式锁、弹性伸缩 ​

6. 最后用熔断、降级、限流、过载保护做兜底

每一步都有技术选型和风险权衡:缓存要防雪崩,异步要防消息丢失,分库分表要处理分布式问题。

最终目标是:在高并发下,系统依然稳定、可用、可扩展。

注意事项:本专辑作品为原创作品,如需合作请私信