高并发架构设计要点
高并发并不只是“能扛很多请求”,而是系统在海量请求下仍然具备高性能、高可用性和可扩展性。
一、核心主线
本节主要回答三个问题:
1 | 什么样的系统才算高并发系统? |
二、形成高并发系统的三个必要条件
1. 高性能
高性能表示系统具备较强的并行处理能力。
它的价值体现在两个方面:
- 节约硬件资源:同样硬件条件下,性能越高,能处理的请求越多;
- 保障用户体验:响应时间越短,用户感知越流畅。
如果系统响应时间过长,即使最终没有报错,用户体验也会明显下降。
2. 高可用性
高可用性表示系统可以长期稳定、正常地对外提供服务。
一个高并发系统不能只是“高峰时跑得快”,还要做到:
- 不频繁故障;
- 不经常宕机;
- 不容易崩溃;
- 出现问题后能快速恢复。
高并发场景下,请求量大、影响用户多,因此系统故障的业务影响会被放大。
3. 可扩展性
可扩展性表示系统可以通过水平扩容来应对请求量增长。
当请求量持续增长或突发激增时,系统应该能通过增加机器、节点或实例来提升处理能力,而不是每次都要重新做架构改造。
1 | 请求量增加 |
可扩展性是高并发系统应对未来增长的关键。
三、高并发系统的衡量指标
1. 高性能指标
1.1 平均响应时间的问题
平均响应时间是一个容易想到的指标:
1 | 平均响应时间 = 所有请求响应时间之和 / 请求数量 |
但平均值容易被极端值掩盖问题。
例如:
1 | 9900 个请求响应时间:1 ms |
平均响应时间只有约 1.99 ms,看起来很好,但实际上仍有一部分用户经历了明显更慢的响应。
因此,平均响应时间不足以完整反映系统性能。
1.2 PCTn 分位值
推荐使用 PCTn 衡量响应时间。
PCTn 表示:
将请求响应时间从小到大排序后,第 n 分位对应的响应时间。
例如:
| 指标 | 含义 |
|---|---|
| PCT50 = 1 ms | 50% 的请求响应时间在 1 ms 以内 |
| PCT99 = 800 ms | 99% 的请求响应时间在 800 ms 以内 |
| PCT999 = 1.2 s | 99.9% 的请求响应时间在 1.2 s 以内 |
分位值越高,越能反映长尾请求的性能问题。
1.3 推荐性能标准
给出的经验判断是:
1 | 平均响应时间 ≈ 200 ms |
这样的高并发系统基本可以满足高性能要求。
原因是:
- 响应时间在 200 ms 以内,用户通常不容易感受到延迟;
- 响应时间超过 1 s,用户会明显感受到卡顿。
2. 高可用性指标
可用性表示系统正常运行时间占总运行时间的比例:
1 | 可用性 = 系统正常运行时间 / 系统总运行时间 |
通常使用“几个 9”描述系统可用性。
| 可用性 | 一年内故障时间 | 一天内故障时间 |
|---|---|---|
| 90%(1 个 9) | 36.5 天 | 2.4 小时 |
| 99%(2 个 9) | 3.65 天 | 14.4 分钟 |
| 99.9%(3 个 9) | 8 小时 | 1.44 分钟 |
| 99.99%(4 个 9) | 52 分钟 | 8.6 秒 |
| 99.999%(5 个 9) | 5 分钟 | 0.86 秒 |
高可用系统通常至少要求:
- 3 个 9;
- 或 4 个 9。
很多公司会使用 99.95% 作为可用性监控阈值。
当系统可用性低于阈值时,应及时告警,并推动:
- 故障恢复;
- 容量扩容;
- 故障原因分析;
- 系统架构改造。
3. 可扩展性指标
可扩展性衡量的是:增加节点后,系统吞吐能力能提升多少。
公式:
1 | 可扩展性 = 吞吐量提升比例 / 集群节点增加比例 |
理想情况是:
1 | 节点增加 N 倍 |
但现实系统中,扩容通常会受到共享资源、网络、存储、锁竞争、调度开销等因素影响,很难做到 100% 线性增长。
经验标准是:
1 | 70%~80% 的可扩展性 |
基本可以满足可扩展性要求。
四、高并发场景分类
计算机系统中的业务功能最终都会落到数据操作上,而数据操作主要分为两类:
1 | 读 |
因此,高并发场景也可以分为:
1. 高并发读
读请求远多于写请求。
典型场景:
- 刷帖子;
- 浏览商品;
- 浏览 Feed;
- 查看文章;
- 搜索内容。
这类场景的重点是提升数据读取能力。
后续常见方案包括:
- 数据库读写分离;
- 本地缓存;
- 分布式缓存;
- CQRS。
2. 高并发写
写请求压力较大。
典型场景:
- 发帖;
- 点赞;
- 评论;
- 下单;
- 计数更新;
- IM 消息写入。
这类场景的重点是提升写入吞吐能力,并控制写入热点。
后续常见方案包括:
- 数据分片;
- 分库分表;
- 异步写;
- 写聚合。
3. 读多写多
部分业务同时存在大量读请求和大量写请求。
这类系统需要同时解决:
- 读扩展;
- 写扩展;
- 数据一致性;
- 缓存更新;
- 存储扩容;
- 热点数据处理。
五、核心架构思想
- 高并发不是单纯的高请求量,而是高请求量下仍能保持高性能、高可用和可扩展。
- 高性能关注响应时间,尤其要关注 PCT99、PCT999 等长尾延迟。
- 平均响应时间容易掩盖极端慢请求,不适合作为唯一性能指标。
- 高可用关注系统长期稳定运行的概率,通常用几个 9 衡量。
- 高并发系统至少应追求 3 个 9 或 4 个 9 的可用性。
- 可扩展性关注水平扩容后吞吐量是否能同步提升。
- 理想扩展是线性扩展,现实中达到 70%~80% 已基本可接受。
- 高并发问题应先按读、写场景分类,再选择对应架构方案。
- 读多写少、写多读少、读多写多对应的架构重点不同。
- 高并发架构设计的本质是围绕性能、可用性、扩展性做系统性权衡。
六、一句话总结
高并发系统不仅要能处理海量请求,还必须同时具备高性能、高可用性和可扩展性;性能应关注 PCT 分位响应时间,可用性用几个 9 衡量,可扩展性用吞吐提升比例与节点增加比例衡量,而具体高并发方案应先按高并发读和高并发写场景进行分类。