1. 高并发系统概述:什么是高并发、高并发的衡量指标、高并发带来的挑战
大家好,我是你们的老朋友。今天咱们正式开课,聊聊高并发。
说实话,我做了十几年后端,见过太多系统在流量洪峰面前瞬间崩塌的场景。有一次凌晨三点,我还在线上紧急扩容,那滋味,真不好受。所以,理解高并发,是每个后端工程师的必修课。
1.1 什么是高并发?
高并发,说白了就是系统在同一时刻要处理大量请求。
你想想看,双十一零点,几亿人同时点下单按钮。或者微博上某个明星突然爆出大瓜,粉丝们疯狂刷新。这些场景,就是典型的高并发。
但要注意,高并发不是简单的「人多」。它有三个核心特征:
- 短时间内大量请求涌入——不是慢慢来,是一窝蜂
- 系统资源争抢激烈——CPU、内存、数据库连接,大家都在抢
- 响应时间要求苛刻——用户可没耐心等,几秒没反应就跑了
我个人习惯把高并发系统比作一个繁忙的十字路口。车多、速度快、还不能出事故。怎么设计红绿灯、怎么规划车道,就是我们要解决的问题。
核心观点:高并发不是目的,而是手段。我们追求的是在大量请求下,系统依然稳定、快速、正确。
1.2 高并发的衡量指标
光说「高」不行,得量化。业内常用的指标有三个:QPS、TPS、RT。
1.2.1 QPS(Queries Per Second)
每秒查询数。它衡量的是系统一秒内能处理多少个请求。
举个例子,你的首页接口QPS是1000,意味着每秒有1000个用户同时访问首页。我在项目中遇到过,QPS从500涨到2000,数据库连接池直接被打满,那叫一个惨。
QPS的估算公式很简单:
QPS = 总请求数 / 总耗时(秒)
比如,1小时内处理了360万请求,那平均QPS就是:
3600000 / 3600 = 1000 QPS
1.2.2 TPS(Transactions Per Second)
每秒事务数。它和QPS很像,但更强调「事务」的完整性。
一个事务可能包含多个请求。比如下单操作,需要扣库存、生成订单、更新用户余额。这一整套才算一个事务。
我建议你记住这个区别:
| 指标 | 含义 | 典型场景 |
|---|---|---|
| QPS | 每秒查询数 | 读操作、查询接口 |
| TPS | 每秒事务数 | 写操作、下单、支付 |
小提示:很多面试官喜欢问QPS和TPS的区别。你就记住一句话:QPS看请求量,TPS看业务完成量。
1.2.3 RT(Response Time)
响应时间。从用户发出请求到收到完整响应,这中间的时间。
RT通常看两个值:
- 平均RT——所有请求的平均耗时
- TP99——99%的请求都在这个时间内完成
为什么TP99比平均值更重要?
嗯,这里要注意。平均值容易被极端值拉低。比如100个请求,99个1ms,1个10s,平均RT才100ms,看起来不错。但那个10s的用户早就骂娘了。
TP99能真实反映大多数用户的体验。我一般会盯着TP99看,超过500ms就要报警了。
1.3 高并发带来的挑战
高并发不是请客吃饭。它带来的挑战,我掰着手指头数给你听。
1.3.1 性能瓶颈
这是最直接的。请求一多,系统哪里都慢。
- CPU打满——计算密集型任务扛不住
- 内存溢出——缓存、对象创建太多
- 磁盘IO卡死——日志写得太频繁
- 网络带宽占满——数据包太多,网卡扛不住
我曾经遇到过一个案例,业务高峰期,日志框架没控制好,每秒写几百MB日志,直接把磁盘IO打满了。业务请求反而被阻塞。你说冤不冤?
1.3.2 数据一致性问题
高并发下,数据很容易乱。
比如两个人同时抢最后一个库存。两个请求都读到库存为1,都去扣减。如果没有锁机制,库存就变成-1了。
这就是经典的「超卖」问题。我建议你记住:并发越高,数据一致性越难保证。
避坑指南:我曾经在项目中直接用数据库的行锁来解决并发扣库存,结果QPS一上来,数据库连接池直接爆了。后来改用Redis分布式锁+乐观锁,才稳住。
1.3.3 系统可用性下降
高并发下,系统更容易出故障。
- 雪崩效应——一个服务挂了,拖垮整个链路
- 死锁——多个线程互相等待,谁也动不了
- 资源耗尽——线程池、连接池全部占满
你想想看,一个电商大促,如果商品服务挂了,订单服务、支付服务、物流服务全跟着遭殃。这就是典型的雪崩。
1.3.4 运维复杂度飙升
系统规模一大,运维就头疼。
- 监控难——几十个服务,几百个指标,看不过来
- 排查难——一个慢请求,到底是哪个环节的问题?
- 扩容难——加机器不是万能的,有些瓶颈在代码层面
我记得有一次线上故障,排查了整整一个通宵。最后发现是Redis的一个key没设置过期时间,内存越积越多,最终导致缓存雪崩。从那以后,我养成了给每个缓存key设置TTL的习惯。
1.4 总结
好了,这一章的内容就这些。我们来捋一捋:
- 高并发就是大量请求同时涌入,系统要扛得住
- QPS看查询量,TPS看事务量,RT看响应速度
- 挑战来自性能、一致性、可用性、运维四个方面
下一章,我会带你深入分析高并发系统的设计原则。说白了,就是怎么从架构层面把这些挑战一一化解。
咱们下节课见。