分布式系统

分布式系统的第一性原理

分布式系统的本质问题

分布式系统的本质问题只有一个:

状态、顺序的一致性问题

即:

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

为什么必须引入分布式

分布式系统的存在,源于:用户日益增长的高可用、低延迟、海量数据需求单机算力、存储、网络上限之间的矛盾

这一矛盾驱动的必然选择

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

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

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

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

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

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

因此:

分布式系统中不存在“确定的通信”,只存在“推测”。根本原因是发送方只能通过响应推断对方的状态

超时:主要的判断机制

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

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

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

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

常见失效模型:

工程实践中通常假设:

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

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

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

因此:

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

两类时间认知

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

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

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

多数原则(Quorum)

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

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

假设驱动的系统设计

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

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

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

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

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

一致性越强:

常见一致性模型谱系

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

线性化的本质

线性化的核心目标是:

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

其实现方式本质是:

顺序与逻辑时间

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

逻辑时钟

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

谁先于谁发生。

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

共识的角色

共识解决的是:系统对同一状态是否达成一致判断。

其工程形式通常是:

全序广播

全序广播的目标是:

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

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

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

分布式系统的工程哲学

反直觉事实

设计取舍

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

反模式与误区

核心认知:不确定性不可消除

分布式系统所有反模式都源于一个事实:错误必然发生

系统的应对方式决定了架构质量,而非避免错误的程度。

三个根本性误解

误解真相
可以消除不确定性只能管理,无法消除
一致性是可选特性一致性是代价函数,越强代价越大
存在"正确"算法所有算法都是权衡,无银弹

常见反模式

反模式核心问题典型后果
分布式单体服务间高耦合改一处动全身
级联故障故障扩散雪崩
过度信任超时超时≠失败重复操作、幂等破坏
一致性模型错配场景与一致性不匹配支付丢数据 / Feed响应慢
循环依赖调用环局部故障→全链路瘫
无界重试故障流量无管控下游过载

关联内容(自动生成)