不是的! 面对 Web 高并发访问,增加服务实例(横向扩容)只是手段之一 ,而且往往是成本最高、见效最慢 的方式。真正成熟的高并发系统会采用 "全链路优化 + 多层防御" 的组合策略,在不盲目扩容的前提下显著提升系统承载能力。
以下是除"加机器"之外的 8 大核心优化方向,按优先级和性价比排序:
✅ 1. 缓存:为数据库减负(效果最显著)
数据库是高并发下最脆弱的环节。
- 多级缓存架构 :
- 浏览器缓存(
Cache-Control,ETag) - CDN 缓存静态资源(JS/CSS/图片)
- Nginx 反向代理缓存(
proxy_cache) - 应用本地缓存(Caffeine/Guava)
- 分布式缓存(Redis/Memcached)
- 浏览器缓存(
- 防穿透/雪崩/击穿 :
- 布隆过滤器拦截无效请求
- 热点 Key 永不过期 + 后台异步刷新
- 随机过期时间避免集体失效
💡 效果 :可降低 80%+ 数据库压力,响应时间从 100ms → 5ms。
✅ 2. 异步化与削峰填谷(应对流量洪峰)
把"同步阻塞"变为"异步解耦"。
- 消息队列(Kafka/RabbitMQ/RocketMQ) :
- 秒杀下单 → 先入队,后异步处理
- 日志、短信、邮件等非核心流程异步化
- 响应式编程(Reactor/WebFlux) :
- 单线程处理数千请求,避免线程池耗尽
💡 效果 :系统可扛住 瞬时 10 倍流量,避免雪崩。
✅ 3. 限流、降级、熔断(保护系统不崩溃)
"有损服务"比"完全不可用"更可取。
- 限流(Rate Limiting) :
- Nginx 层:
limit_req(令牌桶) - 网关层:Sentinel/Gateway 内置限流
- 服务层:Guava RateLimiter / Redis 分布式限流
- Nginx 层:
- 降级:非核心功能关闭(如"猜你喜欢")
- 熔断:Hystrix/Sentinel 自动切断故障依赖
💡 效果 :在流量超载时,保障核心链路可用。
✅ 4. 静态资源与前端优化(减少后端压力)
用户每少发一个请求,服务器就少一份负担。
- CDN 加速:全球节点分发静态内容
- 资源压缩:Gzip/Brotli 压缩 HTML/CSS/JS
- 合并与懒加载:减少 HTTP 请求数
- HTTP/2 + 多路复用:单连接并行传输
- Service Worker 缓存:PWA 实现离线访问
💡 效果 :页面加载速度提升 50%+,后端 QPS 直接下降。
✅ 5. 数据库深度优化(不止是加从库)
分库分表是最后手段,先做这些:
- 读写分离:主库写,多个从库读
- 索引优化:覆盖索引、避免回表
- 连接池调优:HikariCP 最大连接数合理设置
- SQL 审计 :禁止
SELECT *、大分页(改游标) - 冷热分离:历史数据归档到 OLAP(如 ClickHouse)
💡 效果 :QPS 提升 3~10 倍,无需立即分库。
✅ 6. 架构解耦:微服务 + 无状态设计
避免"一损俱损"。
- 拆分为独立服务:用户、订单、商品各自治理
- 无状态化:Session 存 Redis,便于弹性扩缩容
- 容器化部署(K8s):快速扩缩特定服务(如只扩订单服务)
💡 优势 :可精准扩容瓶颈模块,而非整个应用。
✅ 7. 负载均衡策略优化(不只是轮询)
让流量分配更智能。
- 一致性哈希:保证同一用户请求落到同一实例(减少缓存失效)
- 权重动态调整:根据 CPU/内存实时调整后端权重
- 地域就近接入:结合 DNS + CDN 实现用户就近访问
✅ 8. 监控与压测(提前发现问题)
不要等到线上崩溃才优化。
- 全链路追踪:SkyWalking/Pinpoint 定位慢接口
- 实时监控:Prometheus + Grafana 监控 QPS、延迟、错误率
- 混沌工程:模拟网络延迟、服务宕机,验证系统韧性
- 定期压测:JMeter/Locust 模拟大促流量
📌 总结:高并发优化金字塔(自底向上)
bash
监控告警(兜底)
负载均衡(流量调度)
架构解耦(微服务)
数据库优化(持久层)
前端/CDN(减少请求)
限流降级(自我保护)
异步削峰(缓冲洪峰)
多级缓存(性能基石)
------------------------
横向扩容(最后手段)
🔥 关键理念 :
"能缓存的不查库,能异步的不阻塞,能拒绝的不处理,能静态的不动态。"
通过上述组合拳,很多系统可在 不增加一台服务器 的情况下,将并发能力从 1k QPS 提升至 10w+ QPS。
如果你有具体业务场景(如电商秒杀、直播弹幕、API 开放平台),我可以给出针对性优化方案。