@@ -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 . ** 时空换时空 ** :缓存、预计算、异步化
31272 . ** 空间换并行** :拆分、分片、扩容
32283 . ** 一致性换可用性** :最终一致、读写分离、延迟容忍
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