← [ BACK_TO_NOTES ]

分布式系统

解释分布式系统为什么因网络、时钟和节点故障而产生部分失败,以及复制、一致性、分片和协调问题从哪里出现。

#concept #growing #backend #architecture

[!info] related notes

分布式系统

[!abstract] 一句话定义 分布式系统由多个通过网络协作的独立节点组成。每个节点只有局部视角,网络延迟没有可靠上界,节点可能部分失败,因此系统必须在不确定性下处理复制、一致性、协调、扩展与恢复。

为什么一旦跨节点,问题就变了

单进程内通常可以直接观察函数返回、共享内存和锁状态;跨节点后:

no response
→ request lost?
→ response lost?
→ server slow?
→ server crashed?
→ network partition?
→ operation already committed?

调用方无法仅凭 Timeout 判断远端是否执行成功。这是幂等、Retry、Reconciliation 和共识存在的根因之一。

最重要的心智模型:Partial Failure

Node A healthy
Node B healthy but unreachable from A
Node C crashed
Client can reach A but not B

系统不是简单的“全好”或“全坏”。不同参与者可能同时持有不同、但各自合理的观察。

[!warning] 网络分区不是断网这么简单 只要一组节点之间无法在业务要求的时间内可靠通信,就必须按 Partition 风险处理;延迟过高在工程上也可能等价于不可达。

四类核心问题

1. Communication

消息会延迟、重复、丢失、乱序;连接断开不等于操作未执行。

对应:Timeout、Retry、Idempotency、Delivery Semantics。

2. State

同一逻辑数据存在多个副本,不同节点更新与可见时间不同。

对应:Replication、Consistency Model、Conflict Resolution。

3. Coordination

多个节点需要决定谁能推进共享状态、谁拥有任务或资源。

对应:Quorum、Leader Election、Lease、Fencing、Consensus。

4. Scale

单节点容量、吞吐或故障域不足,需要 Sharding、Load Balancing 和并行处理。

扩展会进一步增加跨分片查询、再平衡和事务成本。

没有完美全局时钟

节点时钟可能偏移,网络延迟也不稳定。因此:

  • Wall Clock 适合展示时间,不一定足以决定因果顺序;
  • Timestamp 相同或更大,不自动证明事件更晚发生;
  • TTL / Lease 需要考虑时钟和 Pause;
  • 顺序常由 Log Position、Term / Epoch、Revision 或 Logical Clock 表达。

并发与分布式的区别

并发分布式
多个执行单元可能共享进程/内存节点通过网络通信,没有共享内存假设
锁和内存可见性是主要问题Partial Failure、消息不确定和多副本是额外问题
进程崩溃常影响整个地址空间节点可独立故障,其他节点继续运行

分布式系统一定涉及并发,但并发程序不一定分布式。

微服务不等于分布式理论本身

微服务是一种部署和组织架构;分布式系统是它必须面对的底层问题集合。数据库复制、Kafka、etcd、CDN 即使不是“业务微服务”,同样是分布式系统。

一条设计主线

先定义业务不变量与故障容忍
→ 决定是否需要 Replication / Sharding
→ 选择 Consistency Model
→ 明确 Leader / Quorum / Ownership
→ 设计 Timeout / Retry / Idempotency
→ 设计 Recovery / Reconciliation
→ 建立 Observability and Operations

不要从“选 Kafka、Redis 还是 Kubernetes”开始设计。

最小故障推演

假设 Client 请求创建订单:

Client → Service A → DB commit succeeds
                       ↓
                 response lost
Client times out and retries to Service B

系统必须回答:

  • 两个实例如何识别同一逻辑请求?
  • 第二次请求会不会再创建订单?
  • 结果从哪里查询?
  • Trace 怎样把两次 Attempt 关联?

这就是分布式正确性落到业务层的方式。

掌握标准

  • 能解释 Partial Failure 和 Unknown Outcome。
  • 能说明为什么跨节点没有可靠共享内存和全局时钟。
  • 能区分 Replication、Sharding、Coordination 与 Transaction。
  • 能推演 Timeout + Retry 如何产生重复副作用。
  • 能先定义不变量和故障模型,再谈具体中间件。
创建于 2026/9/4 更新于 2026/9/4
Digital Biome
Access

键盘导航

j / k / ↑ / ↓
选择对象
Enter / o
打开选择
/ 或 Ctrl+K
全站搜索
i / f / 1–4
筛选当前列表
g → h / l / p / t / a
首页 / 笔记 / 项目 / 工具 / About
r → 1–9
打开所选对象的关联
u
返回上一页
Esc
关闭浮层 / 取消命令;输入框内清空文本