分布式系统

分布式系统的第一性原理

分布式系统的本质问题

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

状态、顺序的一致性问题

即:

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

为什么必须引入分布式

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

这一矛盾驱动的必然选择

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

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

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

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

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

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

因此:

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

超时:主要的判断机制

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

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

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

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

常见失效模型:

工程实践中通常假设:

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

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

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

因此:

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

两类时间认知

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

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

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

多数原则(Quorum)

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

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

假设驱动的系统设计

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

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

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

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

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

一致性越强:

常见一致性模型谱系

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

线性化的本质

线性化的核心目标是:

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

其实现方式本质是:

顺序与逻辑时间

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

逻辑时钟

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

谁先于谁发生。

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

共识的角色

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

其工程形式通常是:

全序广播

全序广播的目标是:

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

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

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

分布式系统的工程哲学

反直觉事实

设计取舍

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

适用边界

核心原则:代价先验

分布式架构的本质是代价交换,而非能力增强。引入分布式之前,必须明确你愿意为之付出的代价。

驱动因素:为什么必须分布式

只有以下力量能驱动分布式架构的引入——缺少任何一个,分布式就是过度设计:

驱动力 本质
规模压力 单机算力/存储/带宽无法承载业务量
可用性要求 单点故障不可接受,业务中断代价极高
独立演进 业务领域边界清晰,需并行开发与发布
地域分布 用户或数据有物理位置约束

主要代价

分布式系统引入的代价是不可消除的根本性成本

不适用场景的原则判断

以下场景天然不适合分布式,应优先选择单体:

  1. **业务规模未超出单机上限** — 分布式解决的是规模问题,规模未达瓶颈时分布式徒增复杂性
  2. **强一致性事务频繁** — 分布式事务的代价极高,频繁跨服务强一致性场景下分布式是反模式
  3. **团队能力或基础设施不足** — 分布式需要配套的 CI/CD、监控、服务治理能力;能力不足时分布式反而降低可靠性
  4. **业务边界模糊** — 服务拆分依赖清晰的领域边界;边界模糊时的分布式拆分只会制造"分布式单体"

反模式与误区

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

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

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

三个根本性误解

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

常见反模式

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

关联内容(自动生成)