Skip to content

Commit 586110a

Browse files
committed
docs(architecture): 更新高并发系统设计文档结构和内容
重构高并发系统设计文档,简化章节结构,更新核心概念描述, 修正术语表达,增强内容准确性。 主要变更包括: - 简化章节标题层级结构 - 更新高并发本质描述,强调资源受限条件下的权衡 - 重构三大核心手段表述,统一术语 - 简化系统能力模型展示 - 更新批量化处理和缓存体系说明 - 补充架构认知误区分析 - 优化一致性妥协能力和调度能力描述
1 parent 23c450f commit 586110a

1 file changed

Lines changed: 61 additions & 123 deletions

File tree

doc/软件工程/架构/系统设计/高并发.md

Lines changed: 61 additions & 123 deletions
Original file line numberDiff line numberDiff line change
@@ -7,105 +7,43 @@ books: [
77

88
# 高并发系统设计
99

10-
## 一、高并发的本质:系统性矛盾与工程妥协
10+
## 高并发的本质:系统性矛盾与工程妥协
1111

12-
### 1. 高并发并不是“快”
12+
### 高并发不只是”快”
1313

14-
高并发问题的本质,并非单点性能不足,而是
14+
高并发问题的本质,不单是追求”快”,而是在资源受限条件下
1515

1616
* **有限资源****无限请求** 之间的矛盾
1717
* **强一致性****系统吞吐 / 延迟** 之间的冲突
1818
* **实时计算****可预测稳定性** 之间的权衡
1919

2020
因此,高并发系统设计是一门:
2121

22-
> 在资源受限前提下,对请求进行**调度、延迟、削峰、分摊与妥协**的工程学。
22+
> 在资源受限前提下,对请求进行**调度、延迟、削峰、分摊与取舍**的工程学。
2323
24-
---
25-
26-
### 2. 高并发设计的三大核心手段
27-
28-
所有高并发技术手段,最终都可归结为三类:
24+
### 高并发的权衡
2925

30-
1. **时间换空间**:缓存、预计算、异步化
26+
1. **时空换时空**:缓存、预计算、异步化
3127
2. **空间换并行**:拆分、分片、扩容
3228
3. **一致性换可用性**:最终一致、读写分离、延迟容忍
3329

34-
---
35-
36-
## 二、高并发系统能力模型(核心抽象)
37-
38-
高并发系统并非“堆技术”,而是构建一组稳定能力。
39-
40-
```
41-
高并发系统能力模型
42-
├─ 吞吐放大能力
43-
│ ├─ 横向扩展(拆分 / 扩容)
44-
│ ├─ 负载均衡
45-
│ └─ 批量化处理
46-
├─ 峰值削减能力
47-
│ ├─ 缓存体系
48-
│ ├─ 异步化 / MQ
49-
│ └─ 预计算(重写轻读)
50-
├─ 等待与调度能力
51-
│ ├─ 排队系统
52-
│ ├─ 限流(令牌桶 / 漏桶)
53-
│ └─ 优先级与配额
54-
├─ 一致性妥协能力
55-
│ ├─ 读写分离
56-
│ ├─ 最终一致
57-
│ └─ 延迟容忍
58-
├─ 稳定性与治理能力
59-
│ ├─ 熔断 / 降级
60-
│ ├─ 可观测性(监控 / APM)
61-
│ └─ 弹性扩缩容
62-
```
63-
64-
后续章节将围绕该能力模型展开。
65-
66-
---
67-
68-
## 三、吞吐放大能力:让系统“接得住”
69-
70-
### 1. 系统拆分(空间换并行)
30+
## 吞吐放大能力:让系统”接得住”
7131

72-
**设计原则**:避免所有请求竞争同一资源。
32+
### 水平扩展
7333

7434
**抽象模型**
7535

76-
* 将单体系统拆分为多个**低耦合子系统**
77-
* 每个子系统拥有独立资源边界(数据库、线程池、缓存)
78-
79-
**拆分维度**
80-
81-
* 业务维度(领域边界)
82-
* 功能维度(职责单一)
83-
* 资源维度(冷热分离、轻重分离)
84-
85-
> 拆分不是一次性行为,而是伴随业务复杂度增长的持续过程。
36+
- 拆分(定义边界)
37+
- 无状态(消除绑定)
38+
- 负载均衡(流量分发)
8639

87-
---
88-
89-
### 2. 负载均衡(请求分摊机制)
90-
91-
**设计原则**:任何可横向扩展的能力,必须配合负载均衡。
92-
93-
**抽象层级**
94-
95-
* 链路级:DNS
96-
* 网络级:四层负载均衡(LVS)
97-
* 应用级:七层负载均衡(Nginx / Gateway)
98-
* 客户端级:客户端感知与服务发现
99-
100-
**负载均衡算法本质分类**
40+
**解决问题**:使系统具备**横向伸缩能力**,突破单机性能上限。
10141

102-
* 任务均分(轮询 / 随机)
103-
* 压力感知(最少连接 / 响应时间)
104-
* 状态绑定(一致性哈希)
42+
**代价**:协调复杂度上升、分布式一致性挑战、运维成本增加
10543

106-
---
44+
**本质**:水平扩展的本质是**用更多的节点换更强的单机处理能力**,核心在于重构系统内部的协作关系,而非堆砌节点。
10745

108-
### 3. 批量化处理
46+
### 批量化处理
10947

11048
**设计原则**:减少单位请求的系统调用与 IO 次数。
11149

@@ -115,11 +53,11 @@ books: [
11553

11654
代价:延迟上升、实时性下降。
11755

118-
---
56+
**核心原理**:把多次IO合并为一次,降低单位请求的边际成本。
11957

120-
## 四、峰值削减能力:让系统“慢慢消化
58+
## 请求消化能力:让系统“吃得掉
12159

122-
### 1. 缓存体系(时间换空间)
60+
### 缓存体系
12361

12462
**抽象模型**
12563

@@ -137,9 +75,8 @@ books: [
13775

13876
缓存设计本质是**一致性与性能的权衡**
13977

140-
---
14178

142-
### 2. 异步化与消息队列
79+
### 异步化与消息队列
14380

14481
**设计原则**
14582

@@ -157,9 +94,8 @@ books: [
15794
* 系统复杂度上升
15895
* 需要处理重复、乱序、幂等
15996

160-
---
16197

162-
### 3. 预计算(重写轻读)
98+
### 预计算
16399

164100
**设计原则**
165101

@@ -169,21 +105,20 @@ books: [
169105

170106
* 读远多于写
171107
* 计算成本远高于存储成本的场景
108+
* 数据可接受一定延迟
172109

173-
---
174110

175-
## 五、等待与调度能力:承认资源有限
111+
## 等待与调度能力:承认资源有限
176112

177-
### 1. 排队系统
113+
### 排队系统
178114

179115
* 显式排队(队列、等待页)
180116
* 隐式排队(线程池、连接池)
181117

182118
排队是对“资源有限”的正面承认。
183119

184-
---
185120

186-
### 2. 限流与配额
121+
### 限流与配额
187122

188123
**核心目标**
189124

@@ -196,11 +131,10 @@ books: [
196131

197132
限流策略本质是**服务质量管理(QoS)**
198133

199-
---
200134

201-
## 六、一致性妥协能力:读写分离与最终一致
135+
## 一致性妥协能力:读写分离与最终一致
202136

203-
### 1. 读写分离
137+
### 读写分离
204138

205139
**设计动机**
206140

@@ -215,64 +149,68 @@ books: [
215149
* 核心路径读主
216150
* 非核心路径容忍旧数据
217151

218-
---
219152

220-
### 2. 最终一致性
153+
### 最终一致性
221154

222155
高并发系统往往主动放弃强一致,换取:
223156

224157
* 更高吞吐
225158
* 更好可用性
226159

227-
---
160+
## 高并发系统的演进路径
228161

229-
## 七、稳定性与治理能力:系统长期可用的前提
162+
1. **早期阶段**:单体 + 缓存 + 性能优化
163+
2. **成长阶段**:系统拆分 + 异步化
164+
3. **规模阶段**:分片 + 读写分离 + 治理体系
165+
4. **成熟阶段**:稳定性优先、最终一致
230166

231-
### 1. 可观测性
167+
> 高并发设计没有"最优解",只有"阶段最优解"。
232168
233-
* 指标监控(资源 / 延迟 / 错误率)
234-
* 链路追踪
235-
* 业务监控
169+
## 架构认知误区
236170

237-
> 没有可观测性,就没有可治理性
171+
高并发设计中,常见的认知偏差会导致错误的架构决策
238172

239-
---
173+
### 唯工具论
240174

241-
### 2. 熔断与降级
175+
把缓存、消息队列、分库分表当作高并发的银弹,不评估场景直接套用。
242176

243-
**设计原则**
177+
**本质**把手段当目的,工具导向而非问题导向
244178

245-
* 局部失败不可扩散
179+
高并发设计应先定位瓶颈——是计算、存储还是网络?瓶颈不同,解决方案不同。工具选型应该是问题导向,而非趋势导向。
246180

247-
降级不是失败,而是**系统自我保护机制**
181+
### 扩容方向迷信
248182

249-
---
183+
认为"加机器就能解决高并发",不先定位瓶颈在哪一层。
250184

251-
### 3. 弹性扩缩容
185+
**本质**:计算层的扩展解决不了存储层的瓶颈
252186

253-
* 通过监控数据触发
254-
* 本质是资源与负载的动态匹配
187+
如果瓶颈在数据库,加应用服务器毫无帮助;如果瓶颈在热点数据竞争,扩容反而加剧资源争抢。
255188

256-
---
189+
### 缓存万能论
257190

258-
## 八、高并发系统的演进路径
191+
认为缓存能解决所有性能问题,忽视缓存自身的风险与维护成本。
259192

260-
1. **早期阶段**:单体 + 缓存 + 性能优化
261-
2. **成长阶段**:系统拆分 + 异步化
262-
3. **规模阶段**:分片 + 读写分离 + 治理体系
263-
4. **成熟阶段**:稳定性优先、最终一致
193+
**本质**:缓存省了数据库访问,但没算缓存的一致性维护成本
264194

265-
> 高并发设计没有"最优解",只有"阶段最优解"
195+
缓存有三大固有风险:雪崩(批量失效)、击穿(热点key过期)、穿透(恶意查询不存在数据)。引入缓存时必须同步考虑这些风险的应对方案
266196

267-
---
197+
### 延迟忽视论
198+
199+
只关注吞吐量,忽视响应时间的分布特征。
200+
201+
**本质**:平均值掩盖长尾,高并发下长尾用户才是多数
202+
203+
P99 等分位值决定了用户的真实体验。平均值好看不等于高并发下用户体验过关。
204+
205+
### 复杂度失配
206+
207+
低并发场景引入高并发架构,或高并发场景用简单方案。
268208

269-
## 结语:从技术堆叠到系统认知
209+
**本质**:架构复杂度应与业务量级、团队规模相匹配
270210

271-
高并发系统设计的核心能力:
211+
QPS 几十的低并发场景强行上微服务、分布式缓存,复杂度成本远超收益。反之,千万级流量的场景用单体架构必然崩盘。
272212

273-
* 是否理解系统瓶颈出现在哪里
274-
* 是否清楚每一次性能提升背后的代价
275-
* 是否具备在一致性、延迟、成本之间做选择的能力
213+
**认知闭环**:高并发架构的决策顺序应该是——先定位瓶颈,再评估量级与读写比例,再明确一致性需求,最后才选择技术手段。
276214

277215
## 关联内容(自动生成)
278216

0 commit comments

Comments
 (0)