一、高并发概述:什么是高并发、衡量指标与核心挑战

说起高并发,很多刚入行的同学第一反应就是「很多请求同时打过来」。这个理解没错,但太粗糙了。我做了十几年后端,见过太多系统在流量高峰时「崩」得莫名其妙。说白了,高并发不是简单的「人多」,而是一种系统在极短时间内处理海量请求的能力。

举个例子。双十一零点,几亿用户同时点「结算」。你的系统能不能扛住?扛住了,响应时间会不会从 50ms 变成 5s?这就是高并发要解决的问题。

核心定义:高并发是指系统在单位时间内能够同时处理大量请求,并保持稳定、低延迟响应的能力。它不是单一维度的指标,而是吞吐、延迟、资源消耗的综合博弈。

1.1 高并发的三个核心衡量指标

我面试时经常问候选人:「你怎么衡量一个系统的高并发能力?」很多人张口就是 QPS。其实不够。你得看三个维度。

指标 全称 含义 我常用的关注点
QPS Queries Per Second 每秒查询数,衡量系统吞吐能力 读多写少的场景,比如商品详情页
TPS Transactions Per Second 每秒事务数,衡量完整业务处理能力 下单、支付这类写操作,一个事务可能包含多次查询
RT Response Time 响应时间,从发请求到收到响应的耗时 我习惯看 TP99,而不是平均值
一个小技巧:我习惯把 QPS 和 TPS 的关系理解为「流量」和「业务量」。一个下单接口,前端调了 3 次查询接口 + 1 次提交接口,那 QPS 可能是 TPS 的 4 倍。别搞混了。

你可能会问:「这三个指标怎么配合着看?」嗯,我举个例子。假设你的系统 QPS 到了 10000,但 RT 从 50ms 飙到了 2s。这说明什么?系统已经过载了,请求在排队。这时候只看 QPS 是没意义的——用户感知到的就是「卡死了」。

1.2 高并发带来的四大挑战

我在项目中踩过不少坑。每次流量上来,问题就暴露了。总结下来,高并发主要带来四个方面的挑战。

挑战一:资源竞争与锁冲突

这是最直接的。多个线程同时写同一个数据,不加锁就乱套,加了锁又变串行。我曾经维护过一个库存系统,高峰期 Redis 的分布式锁争抢导致大量超时,最后不得不改成乐观锁 + 重试机制。

  • 数据库行锁:热点行更新,比如秒杀库存,行锁竞争能把 CPU 打满
  • 分布式锁:Redis 锁、ZooKeeper 锁,锁的粒度越粗,性能越差
  • 内存锁:synchronized、ReentrantLock,锁的范围要尽量小

挑战二:系统过载与雪崩

流量超过系统承载上限时,不会慢慢变慢,而是直接崩溃。更可怕的是雪崩——一个服务挂了,依赖它的服务也跟着挂,像多米诺骨牌一样。

我曾经踩过的坑:有一次线上促销,缓存服务因为内存不足开始频繁 GC,响应变慢。调用方等不及就重试,结果重试流量又把缓存打得更慢,最终数据库连接池被耗尽,整个交易链路瘫痪。这就是典型的雪崩。

挑战三:数据一致性问题

高并发下,保证数据一致性变得极其困难。尤其是分布式系统,CAP 定理摆在那里——你不可能同时满足一致性、可用性和分区容错性。

  • 库存超卖:两个请求同时读到库存为 1,都扣减成功,结果库存变成 -1
  • 重复下单:用户手抖点了两次提交,幂等性没做好,生成了两笔订单
  • 缓存与数据库不一致:先删缓存再更新 DB,中间有并发读,读到旧数据

挑战四:资源瓶颈与成本

高并发意味着高资源消耗。CPU、内存、网络带宽、磁盘 IO,任何一个成为瓶颈,系统都跑不快。而且,资源不是无限的——加机器能解决问题,但成本也上去了。

我见过一个团队,为了抗住双十一流量,直接买了 3 倍的服务器。结果流量过去后,资源闲置了半年。说白了,高并发优化的本质,是用最少的资源,扛住最大的流量。

1.3 高并发知识体系总览

下面这张图是我自己梳理的高并发优化知识体系。你可以把它当作整个课程的地图。后面每一章,都会围绕其中一个方向展开。

高并发优化知识体系 高并发系统优化 架构层面 • 无状态设计 • 读写分离 • 微服务拆分 缓存层面 • 多级缓存 • 缓存穿透/击穿/雪崩 • 热点数据隔离 并发控制 • 乐观锁/悲观锁 • 分布式锁 • 限流/降级/熔断 存储层面 • 分库分表 • 读写分离 • 消息队列削峰 核心思路:不是单一技术能解决,而是架构、缓存、并发、存储四管齐下 QPS(吞吐量) RT(响应时间) TPS(事务量) 三个指标互相制约:提高 QPS 可能增加 RT,降低 RT 可能减少 TPS

1.4 一个真实案例:从 500 QPS 到 5000 QPS

我几年前接手过一个订单查询服务。刚接手时,单机 QPS 只有 500,RT 平均 200ms。用户反馈「查个订单要转半天」。

我做了什么?

  1. 加缓存:热点订单数据放到 Redis,读请求直接走缓存,QPS 到了 1500
  2. 优化 SQL:加了联合索引,把全表扫描改成索引覆盖,RT 降到 50ms
  3. 异步化:非核心字段用异步线程加载,主流程只返回必要数据
  4. 限流:接入 Sentinel,设置 QPS 阈值 5000,超过的请求直接返回「稍后再试」

最终单机 QPS 稳定在 5000,RT 控制在 80ms 以内。你看,没有用什么黑科技,就是把这四个方向挨个优化了一遍。

我的经验:高并发优化没有银弹。别一上来就想着上什么分布式、消息队列。先看看你的 SQL 能不能优化,缓存能不能加。80% 的性能问题,用最简单的方法就能解决。

1.5 本章小结

高并发不是玄学。它有三个明确的衡量指标:QPS、TPS、RT。它带来四个核心挑战:资源竞争、系统雪崩、数据一致、资源成本。而优化的方向,就是围绕架构、缓存、并发控制、存储这四个层面展开。

后面的章节,我会逐一深入每个方向。你想想看,如果现在你的系统突然流量翻 10 倍,你能扛住吗?