Skip to content

Commit fc4c3c6

Browse files
committed
docs: 新增分布式协调专题 — 完善分布式知识串联
- 新增分布式协调专题,串联 Leader、Quorum、Lease、Fencing Token 与 Gossip。 - 更新分布式系统、协议、RPC、ZooKeeper 等页面的阅读路径和交叉引用。 - 验证通过 git diff --check、新增文章 markdownlint 和 pnpm docs:build;全目录 markdownlint 仍有既有重复标题等历史问题。
1 parent f33806e commit fc4c3c6

24 files changed

Lines changed: 425 additions & 30 deletions

docs/.vuepress/sidebar/index.ts

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -441,7 +441,15 @@ export default sidebar({
441441
prefix: "protocol/",
442442
collapsible: true,
443443
children: [
444+
{
445+
text: "理论&算法&协议专题",
446+
link: "/distributed-system/protocol/",
447+
},
444448
{ text: "CAP定理与BASE理论详解", link: "cap-and-base-theorem" },
449+
{
450+
text: "分布式协调详解",
451+
link: "centralized-and-decentralized",
452+
},
445453
{ text: "拜占庭将军问题", link: "byzantine-generals-problem" },
446454
{ text: "Paxos算法详解", link: "paxos-algorithm" },
447455
{ text: "Raft算法详解", link: "raft-algorithm" },
@@ -503,6 +511,7 @@ export default sidebar({
503511
icon: ICONS.RPC,
504512
collapsible: true,
505513
children: [
514+
{ text: "RPC专题", link: "/distributed-system/rpc/" },
506515
{ text: "RPC基础知识总结", link: "rpc-intro" },
507516
{ text: "Dubbo面试题总结", link: "dubbo" },
508517
],
@@ -513,8 +522,13 @@ export default sidebar({
513522
icon: ICONS.FRAMEWORK,
514523
collapsible: true,
515524
children: [
525+
{
526+
text: "ZooKeeper专题",
527+
link: "/distributed-system/distributed-process-coordination/zookeeper/",
528+
},
516529
{ text: "ZooKeeper入门指南", link: "zookeeper-intro" },
517530
{ text: "ZooKeeper进阶详解", link: "zookeeper-plus" },
531+
{ text: "ZooKeeper实战教程", link: "zookeeper-in-action" },
518532
],
519533
},
520534
],

docs/distributed-system/README.md

Lines changed: 23 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
---
22
title: 分布式系统知识体系:入门、理论协议、RPC、网关、锁、事务与 ID
3-
description: 分布式系统面试与学习路线,涵盖分布式系统入门、CAP、BASE、拜占庭将军问题、Paxos、Raft、ZAB、Gossip、一致性哈希、RPC、API 网关、分布式锁、分布式事务和 ZooKeeper。
3+
description: 分布式系统面试与学习路线,涵盖分布式系统入门、中心化与去中心化、CAP、BASE、拜占庭将军问题、Paxos、Raft、ZAB、Gossip、一致性哈希、RPC、API 网关、分布式锁、分布式事务和 ZooKeeper。
44
category: 分布式
55
tag:
66
- 分布式
@@ -12,12 +12,12 @@ sitemap:
1212
head:
1313
- - meta
1414
- name: keywords
15-
content: 分布式系统,分布式系统入门,分布式系统面试题,CAP,BASE,拜占庭将军问题,Paxos,Raft,ZAB,Gossip,RPC,Dubbo,API网关,分布式ID,分布式锁,分布式事务,配置中心,ZooKeeper,后端面试
15+
content: 分布式系统,分布式系统入门,分布式系统面试题,中心化,去中心化,CAP,BASE,拜占庭将军问题,Paxos,Raft,ZAB,Gossip,RPC,Dubbo,API网关,分布式ID,分布式锁,分布式事务,配置中心,ZooKeeper,后端面试
1616
---
1717

1818
<!-- @include: @small-advertisement.snippet.md -->
1919

20-
这份 **分布式系统知识体系** 面向后端学习、系统设计和面试复习,按“理论基础 -> 通信调用 -> 服务治理 -> 一致性与协调 -> 工程实践”的顺序整理本站分布式相关文章。
20+
这份 **分布式系统知识体系** 面向后端学习、系统设计和面试复习,按“分布式入门 -> 通信调用 -> 服务治理 -> 一致性与协调 -> 工程实践”的顺序整理本站分布式相关文章。
2121

2222
如果你刚开始学分布式,建议先看 [分布式系统入门](./distributed-system-intro.md),建立整体认知;如果你时间有限,建议先看 [分布式系统面试题总结](./distributed-system-interview-questions.md),快速建立高频问题清单;如果你想系统补基础,可以按下面的专题顺序阅读。
2323

@@ -36,15 +36,28 @@ head:
3636
- 分布式 ID、分布式锁、分布式事务在真实业务里有哪些常见方案和坑?
3737
- 面试中如何把“概念、原理、场景、方案对比、落地经验”串成完整回答?
3838

39+
## 这组文章怎么串起来?
40+
41+
这组文章可以按 4 条线一起看。
42+
43+
第一条是**理论线**[分布式系统入门](./distributed-system-intro.md) 先解释多节点系统为什么会变复杂,[CAP 定理与 BASE 理论详解](./protocol/cap-and-base-theorem.md) 解释分区发生时一致性和可用性怎么取舍,[分布式协调详解](./protocol/centralized-and-decentralized.md) 再把 Leader、Quorum、Lease、Fencing Token、Gossip 放到同一条线上。
44+
45+
第二条是**调用线**[RPC 远程过程调用专题](./rpc/) 解决服务之间怎么互相调用,[API 网关详解](./api-gateway.md) 解决外部流量怎么进入系统,[Spring Cloud Gateway 面试题总结](./spring-cloud-gateway-questions.md) 则展开 Spring Cloud Gateway 的路由、断言、过滤器和限流。
46+
47+
第三条是**数据一致性线**[分布式 ID 生成方案详解](./distributed-id.md) 解决全局唯一标识问题,[分布式 ID 设计实战](./distributed-id-design.md) 把 ID 放到订单号、优惠券、短网址这些业务里,[分布式锁](./distributed-lock.md)[分布式事务](./distributed-transaction.md) 继续处理跨节点互斥和跨服务写入一致性。
48+
49+
第四条是**协调组件线**[分布式配置中心详解](./distributed-configuration-center.md) 讲配置发布和客户端容灾,[ZooKeeper 专题](./distributed-process-coordination/zookeeper/) 讲协调组件的概念、ZAB、会话、Watcher 和 Curator 实战。
50+
3951
## 建议阅读顺序
4052

4153
1. [分布式系统入门](./distributed-system-intro.md):先理解什么是分布式系统,以及为什么拆成多节点后会引入通信、故障和一致性问题。
4254
2. [分布式系统面试题总结](./distributed-system-interview-questions.md):建立高频问题清单,知道面试最常考哪些点。
43-
3. [CAP 定理与 BASE 理论详解](./protocol/cap-and-base-theorem.md):理解分布式系统最核心的取舍逻辑。
44-
4. [拜占庭将军问题详解](./protocol/byzantine-generals-problem.md):理解共识问题里的恶意节点、故障假设和 BFT 容错边界。
45-
5. [RPC 远程过程调用详解](./rpc/rpc-intro.md):掌握服务之间如何通信,以及 RPC 框架解决了哪些工程问题。
46-
6. [分布式 ID 生成方案详解](./distributed-id.md)[分布式锁入门](./distributed-lock.md)[分布式事务解决方案详解](./distributed-transaction.md):补齐高频工程实践。
47-
7. [ZooKeeper 入门指南](./distributed-process-coordination/zookeeper/zookeeper-intro.md)[分布式配置中心详解](./distributed-configuration-center.md):理解分布式协调和配置治理。
55+
3. [分布式协调详解](./protocol/centralized-and-decentralized.md):理解 Leader、Quorum、Gossip、Lease、脑裂和 Fencing Token 之间的关系。
56+
4. [CAP 定理与 BASE 理论详解](./protocol/cap-and-base-theorem.md):理解分布式系统最核心的取舍逻辑。
57+
5. [拜占庭将军问题详解](./protocol/byzantine-generals-problem.md):理解共识问题里的恶意节点、故障假设和 BFT 容错边界。
58+
6. [RPC 远程过程调用详解](./rpc/rpc-intro.md):掌握服务之间如何通信,以及 RPC 框架解决了哪些工程问题。
59+
7. [分布式 ID 生成方案详解](./distributed-id.md)[分布式锁入门](./distributed-lock.md)[分布式事务解决方案详解](./distributed-transaction.md):补齐高频工程实践。
60+
8. [ZooKeeper 入门指南](./distributed-process-coordination/zookeeper/zookeeper-intro.md)[分布式配置中心详解](./distributed-configuration-center.md):理解分布式协调和配置治理。
4861

4962
## 核心文章
5063

@@ -54,6 +67,7 @@ head:
5467

5568
- [分布式系统入门](./distributed-system-intro.md):理解分布式系统的定义、架构演进、典型特征、常见系统和学习路线。
5669
- [分布式理论、算法与协议专题](./protocol/):把 CAP、BASE、Paxos、Raft、ZAB、Gossip 和一致性哈希放在同一条学习线上。
70+
- [分布式协调详解](./protocol/centralized-and-decentralized.md):串起 Leader/Quorum、脑裂、Lease、Fencing Token 和 Gossip,理解“谁来做决定、状态怎么传播”这两个问题。
5771
- [CAP 定理与 BASE 理论详解](./protocol/cap-and-base-theorem.md):理解一致性、可用性、分区容错和最终一致性。
5872
- [拜占庭将军问题详解](./protocol/byzantine-generals-problem.md):理解恶意节点场景下的共识难点、`3m + 1` 节点要求和 BFT 容错。
5973
- [Raft 算法详解](./protocol/raft-algorithm.md):用更易理解的共识算法入门 Leader 选举和日志复制。
@@ -102,6 +116,7 @@ API 网关负责统一接入、路由转发、认证鉴权、限流熔断、灰
102116

103117
- 分布式系统为什么不能同时完美满足一致性、可用性和分区容错?
104118
- CAP 和 BASE 是什么关系?最终一致性适合哪些场景?
119+
- 分布式系统为什么需要协调?中心化和去中心化分别适合哪些场景?
105120
- Paxos、Raft、ZAB 有什么区别,分别用在什么地方?
106121
- RPC 和 HTTP 有什么区别?为什么内部服务调用常用 RPC?
107122
- 分布式 ID 如何保证全局唯一、趋势递增和业务可读?

docs/distributed-system/api-gateway.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@ head:
1414

1515
API 网关(API Gateway)是位于客户端与后端服务之间的**统一入口**,所有客户端请求先经过网关,再由网关路由到具体的目标服务。
1616

17+
在这组分布式文章里,网关属于“流量入口”这一层。[RPC](./rpc/) 主要讲服务之间怎么互相调用,网关讲外部请求进入系统后怎么做路由、鉴权、限流、灰度和协议适配。如果你只想看 Spring Cloud Gateway 的路由、Predicate、Filter 和限流细节,可以继续读 [Spring Cloud Gateway 面试题总结](./spring-cloud-gateway-questions.md)
18+
1719
### 核心价值
1820

1921
在微服务架构下,一个系统被拆分为多个服务。像**安全认证、流量控制、日志、监控**等功能是每个服务都需要的。如果没有网关,我们需要在每个服务中单独实现这些功能,导致:

docs/distributed-system/distributed-configuration-center.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,10 @@ head:
2929

3030
当然,不是所有系统都需要上配置中心。单体应用、单环境、配置项很少且变更频率低的场景,`application-{profile}.yml`、环境变量或 Kubernetes ConfigMap + 滚动重启通常就够了。配置中心会带来额外的运维成本、故障域和排查链路,小团队或低频配置场景不必过度工程化。
3131

32+
从分布式系统视角看,配置中心属于典型控制面:它负责决定“当前应该使用哪一份配置”,客户端负责拉取、缓存、监听和刷新。配置发布、灰度、回滚、客户端本地快照,处理的都是集中决策和客户端容灾之间的取舍。这个取舍可以和 [分布式协调详解](./protocol/centralized-and-decentralized.md) 放在一起理解。
33+
34+
配置中心还经常和 [RPC](./rpc/) 以及 [API 网关](./api-gateway.md) 一起出现:RPC 框架需要拿到服务地址、超时、重试、降级等治理配置,网关也可能依赖配置中心做动态路由和灰度规则。它们解决的问题不同,但在真实微服务体系里通常会连在同一条链路上。
35+
3236
## 常见的配置中心有哪些?如何选择?
3337

3438
| 方案 | 状态 | 特点 |

docs/distributed-system/distributed-id-design.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@ head:
2020

2121
本文结合一些使用场景,进一步探讨业务场景中对 ID 有哪些具体的要求。
2222

23+
如果你还没看过 UUID、号段模式、Snowflake、Leaf、Tinyid 这些方案的原理和取舍,建议先读 [分布式 ID 生成方案详解](./distributed-id.md)。这篇更偏业务设计:同样是 ID,订单号更关注可查询和安全,TraceId 更关注调用链透传,短网址更关注长度和可读性。
24+
2325
## 场景一:订单系统
2426

2527
我们在商场买东西一码付二维码,下单生成的订单号,使用到的优惠券码,联合商品兑换券码,这些是在网上购物经常使用到的单号,那么为什么有些单号那么长,有些只有几位数?有些单号一看就知道年月日的信息,有些却看不出任何意义?下面展开分析下订单系统中不同场景的 id 服务的具体实现。

docs/distributed-system/distributed-id.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@ head:
1212

1313
## 分布式 ID 介绍
1414

15+
这篇文章主要讲“ID 生成方案怎么选”,例如 UUID、数据库号段、Redis、Snowflake、Leaf、Tinyid。看完方案对比后,如果你想继续了解订单号、优惠券码、TraceId、短网址这类业务 ID 怎么设计,可以读 [分布式 ID 设计实战](./distributed-id-design.md)
16+
1517
### 什么是 ID?
1618

1719
日常开发中,我们需要对系统中的各种数据使用 ID 唯一表示,比如用户 ID 唯一标识一个用户,商品 ID 唯一标识一件商品,订单 ID 唯一标识一笔订单。
@@ -384,7 +386,7 @@ Snowflake 是 Twitter 开源的分布式 ID 生成算法。Snowflake 由 64 bit
384386
| **等待追回** | 保证 ID 唯一性 | 回拨幅度大时会长时间阻塞,可能影响业务 | 回拨幅度极小的场景 |
385387
| **备用 Worker ID** | 高可用 | 实现复杂,需考虑租约、脑裂和旧实例恢复 | 已有可靠注册中心/租约机制的系统 |
386388

387-
备用 Worker ID 是一种可选方案,不是通用推荐。它适合已有可靠注册中心/租约机制的系统;更常见的处理还包括小幅回拨等待、超过阈值拒绝发号、持久化记录 last timestamp、通过注册中心保证 Worker ID 租约唯一。
389+
备用 Worker ID 是一种可选方案,不是通用推荐。它适合已有可靠注册中心/租约机制的系统;更常见的处理还包括小幅回拨等待、超过阈值拒绝发号、持久化记录 last timestamp、通过注册中心保证 Worker ID 租约唯一。这里涉及的租约、脑裂和旧实例恢复问题,可以结合 [分布式协调详解](./protocol/centralized-and-decentralized.md) 一起理解。
388390

389391
#### Snowflake Worker ID 分配难题
390392

docs/distributed-system/distributed-lock-implementations.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@ head:
1212

1313
通常情况下,我们一般会选择基于 Redis 或者 ZooKeeper 实现分布式锁,Redis 用的要更多一点,我这里也先以 Redis 为例介绍分布式锁的实现。
1414

15+
这篇文章默认你已经知道为什么需要分布式锁。如果你还没搞清楚锁粒度、owner token、锁超时和业务临界区,建议先看 [分布式锁入门](./distributed-lock.md)。如果你想把锁过期、旧客户端恢复、Fencing Token 放到更大的协调模型里理解,可以结合 [分布式协调详解](./protocol/centralized-and-decentralized.md)
16+
1517
## 基于 Redis 实现分布式锁
1618

1719
### 如何基于 Redis 实现一个最简易的分布式锁?

docs/distributed-system/distributed-lock.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,8 @@ head:
4848

4949
分布式系统下,不同的服务/客户端通常运行在独立的 JVM 进程上。如果多个 JVM 进程共享同一份资源,使用本地锁就没办法实现资源的互斥访问。这时就需要把锁的状态放到所有进程都能访问的外部系统中,也就是 **分布式锁**
5050

51+
换到分布式协调的视角看,分布式锁其实是在回答一个问题:同一时刻谁是某个资源的唯一 owner?如果你还没搞清楚 Leader/Quorum、Lease 和 Fencing Token 之间的关系,建议先读 [分布式协调详解](./protocol/centralized-and-decentralized.md),再回来看 Redis、ZooKeeper、etcd 这些具体实现会更顺。
52+
5153
举个例子:系统的订单服务一共部署了 3 份,都对外提供服务。为了防止超卖,需要保护的不是单独的“检查库存”,而是“校验库存 → 扣减库存 → 记录购买/创建订单”这段临界区;否则只锁查询、不锁扣减,仍然可能并发写错。由于订单服务位于不同的 JVM 进程中,本地锁在这种情况下就没办法正常工作。我们需要用到分布式锁,这样即使多个线程不在同一个 JVM 进程中,也能获取到同一把锁,进而实现共享资源的互斥访问。
5254

5355
下面是我对分布式锁画的一张示意图。

docs/distributed-system/distributed-process-coordination/zookeeper/README.md

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -32,11 +32,18 @@ ZooKeeper 是经典的分布式协调组件,常用于注册中心、配置管
3232
- 为什么 ZooKeeper 集群通常建议部署奇数个节点?
3333
- Curator 如何简化原生 ZooKeeper 客户端开发和分布式锁实现?
3434

35+
## 和其他文章的关系
36+
37+
[分布式协调详解](../../protocol/centralized-and-decentralized.md) 先讲 Leader、Quorum、脑裂和租约这些通用问题;ZooKeeper 专题把这些问题落到 ZNode、Watcher、Session 和 ZAB 上。
38+
39+
[ZAB 协议详解](../../protocol/zab.md) 只讲 ZooKeeper 的原子广播和崩溃恢复,不展开 ZNode、Curator 命令和应用场景。想看实际命令和客户端代码,可以继续读 [ZooKeeper 实战教程](./zookeeper-in-action.md)
40+
3541
## 建议阅读顺序
3642

37-
1. [ZooKeeper 入门指南](./zookeeper-intro.md):先理解 ZNode、Watcher、ACL 和典型应用场景。
38-
2. [ZooKeeper 进阶详解](./zookeeper-plus.md):再补齐 ZAB、Leader 选举、集群部署和会话机制。
39-
3. [ZooKeeper 实战教程](./zookeeper-in-action.md):最后通过 Docker、zkCli、四字命令和 Curator 做实践。
43+
1. [分布式协调详解](../../protocol/centralized-and-decentralized.md):先理解分布式协调、Leader、Quorum、脑裂和租约这些共性问题。
44+
2. [ZooKeeper 入门指南](./zookeeper-intro.md):再理解 ZNode、Watcher、ACL 和典型应用场景。
45+
3. [ZooKeeper 进阶详解](./zookeeper-plus.md):继续补齐 ZAB、Leader 选举、集群部署和会话机制。
46+
4. [ZooKeeper 实战教程](./zookeeper-in-action.md):最后通过 Docker、zkCli、四字命令和 Curator 做实践。
4047

4148
## 核心文章
4249

@@ -58,6 +65,7 @@ ZooKeeper 是经典的分布式协调组件,常用于注册中心、配置管
5865

5966
- [分布式系统知识体系](../../)
6067
- [分布式理论、算法与协议专题](../../protocol/)
68+
- [分布式协调详解](../../protocol/centralized-and-decentralized.md)
6169
- [ZAB 协议详解](../../protocol/zab.md)
6270
- [分布式锁实现方案详解](../../distributed-lock-implementations.md)
6371
- [分布式配置中心详解](../../distributed-configuration-center.md)

docs/distributed-system/distributed-process-coordination/zookeeper/zookeeper-in-action.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@ head:
1212

1313
这篇文章简单给演示一下 ZooKeeper 常见命令的使用以及 ZooKeeper Java 客户端 Curator 的基本使用。介绍到的内容都是最基本的操作,能满足日常工作的基本需要。
1414

15+
这篇偏实践,不负责解释 ZooKeeper 为什么能做协调。建议先看 [ZooKeeper 入门指南](./zookeeper-intro.md) 了解 ZNode、Watcher、Session,再看 [ZooKeeper 进阶详解](./zookeeper-plus.md)[ZAB 协议详解](../../protocol/zab.md) 补协议和集群机制。
16+
1517
如果文章有任何需要改善和完善的地方,欢迎在评论区指出,共同进步!
1618

1719
## ZooKeeper 安装

0 commit comments

Comments
 (0)