高并发
高并发不是把某个组件做快,而是把压力分解 / 隔离 / 削峰,使流量增长时系统仍正确、稳定、可扩展。
① 压力沿系统逐层传播,每层通过拒绝、缓存、并行、异步、聚合或分片来吸收压力。 ② 对每一层做 capacity estimation:输入多少、吸收多少、输出多少、极限是多少。
① Rate
每秒进来多少?
QPS / msg/s / bytes/s
② Amplification
经过这一层会放大多少?
SQL/request
fan-out
replication
retry
③ Absorption
这一层吸收多少?
cache hit
rate limit
aggregation
async buffering
④ Capacity
这一层最大能处理多少?
QPS
connections
CPU
disk IOPS
network
storage
5:对所有“可以积压”的组件,都问能撑多久?
高并发关心:系统能吞多少压力(吞吐、容量、扩展)。 低延迟关心:一个请求在系统里要等多久(单请求等待时间)。
High Concurrency
│
┌────────────────┼─────────────────┐
↓ ↓ ↓
入口压力 计算压力 数据压力
│ │ │
LB / Gateway horizontal scale cache
rate limit worker pool sharding
connection mgmt async index
queue replica
↓
故障压力
│
timeout / retry
circuit breaker
isolation
backpressure核心公式与不变量
高并发的两个定量锚点:
- 利特尔法则(Little's Law):稳态平均关系
L = λ × W,其中L是系统内平均在制品(WIP)、λ是稳态平均到达/吞吐率、W是平均停留(等待+服务)时间;工程写法WIP = 吞吐量 × 周期时间。它把系统内平均在制品、吞吐量与平均停留时间绑定在一起,是长期平均恒等式,不是对单个请求等待时间的预测。 - 阿姆达尔定律(Amdahl's Law):
S(N) = 1 / ((1-p) + p/N),其中p是可并行比例、N是并行资源数。串行部分1-p决定扩展收益上限1/(1-p);它衡量单任务延迟的加速,不能把"单请求变快 N 倍"直接等价成"吞吐提升 N 倍"——吞吐还受并发度、瓶颈与排队影响。
压力分到哪
| 压力 | 本质 | 典型手段 |
|---|---|---|
| 入口压力 | 请求来得又快又多,先于业务逻辑 | LB / Gateway、rate limit、connection management |
| 计算压力 | 单点算力不够 | horizontal scale、worker pool、async、queue |
| 数据压力 | 存储与查询成为瓶颈 | cache、sharding、index、replica |
| 故障压力 | 部分失败放大为整体失败 | timeout、retry、circuit breaker、isolation、backpressure |
高并发与低延迟的关系
- 关注点不同:高并发看系统层面能吞多少、能否扩展;低延迟看单请求在 critical path 上等多久。
- 通过利特尔法则关联:给定平均停留时间(≈ 周期时间/延迟),吞吐与在制品互相约束;在吞吐/处理能力等条件近似不变时,积压(在制品上升)会推高等待时间——高并发下"量"的波动通常会劣化"等待"(排队上升推高等待并非无条件因果)。
- 边界:扩展提升吞吐(容量),但单请求延迟受串行部分与 critical path 限制(阿姆达尔);降延迟靠缩短/重叠关键路径,两者手段不同、通常配合使用。
评论