分布式系统(原理驱动版)

一、分布式系统的第一性原理

1.1 分布式系统的本质问题

分布式系统并不是“多台机器 + 网络”的工程堆叠,其本质问题只有一个:

状态一致性问题

即:

在这样的环境中,系统如何:

所有分布式系统设计,都是在回答这一问题。


1.2 为什么必须引入分布式

分布式并非工程偏好,而是规模驱动下的必然选择

分布式不是为了更快,而是为了可扩展、可持续、可演进


二、不可靠世界:分布式系统的基本假设

分布式系统的所有复杂性,来源于一个前提:

我们生活在一个不可靠的世界中。

这一不可靠性体现在三个不可消除的维度。


2.1 网络不可靠:通信不确定性

节点之间只能通过消息协作,但网络具备以下特性:

因此:

分布式系统中不存在“确定的通信”,只存在“推测”。

超时:唯一可用的判断机制

超时并不代表失败,而是系统做出的一个假设


2.2 节点不可靠:部分失效成为常态

分布式系统中,失效不是“全有或全无”,而是:

部分节点在部分时间失效(Partial Failure)

常见失效模型:

工程实践中通常假设:

非拜占庭故障模型,以换取系统复杂度的可控性。


2.3 时间不可靠:不存在全局时间

计算机中的时间具备以下特征:

因此:

时间顺序无法作为分布式系统的可靠依据。

两类时间认知

分布式系统必须优先使用逻辑顺序而非物理时间。


三、我们能做的唯一事情:假设与多数

在不可靠世界中,分布式系统能依赖的能力极其有限。

3.1 多数原则(Quorum)

当一个状态被多数节点认可时,我们将其视为“当前真相”。

这是共识算法、选主机制、一致性存储的共同基础。


3.2 假设驱动的系统设计

分布式系统并不“知道事实”,而是:

分布式系统是一个持续修正假设的系统。


四、一致性模型:对状态一致性的不同承诺

一致性并非非黑即白,而是一条连续谱。

4.1 一致性不是目标,而是代价函数

一致性越强:


4.2 常见一致性模型谱系

一致性模型本质承诺代价典型场景
线性化单一时间线幻觉可用性锁、选主
顺序一致全局操作顺序延迟日志系统
因果一致因果关系保序复杂度协作系统
最终一致状态最终收敛冲突处理大规模存储

4.3 线性化的本质

线性化的核心目标是:

让系统看起来像只有一个副本。

其实现方式本质只有两种:


五、顺序与逻辑时间

5.1 因果关系是唯一可靠的顺序来源

5.2 逻辑时钟

逻辑时钟解决的不是“什么时候发生”,而是:

谁先于谁发生。


六、共识:分布式系统的中枢能力

6.1 共识的角色

共识解决的不是“是否正确”,而是:

系统对同一状态是否达成一致判断。

其工程形式通常是:


6.2 全序广播

全序广播的目标是:

这是构建一致状态机的基础能力。


七、工程能力模型:从工具到能力

架构能力对抗问题常见手段
扩展性规模增长分片、无共享
可用性节点失败副本、选主
稳定性瞬时冲击限流、降级
一致性状态分歧共识、版本

工具会变化,但能力模型是稳定的。


八、分布式系统的工程哲学

8.1 反直觉事实

8.2 设计取舍

分布式系统不是"选择正确方案",而是明确你愿意付出的代价

关联内容(自动生成)