基础理论

1. CAP 理论 ⭐⭐⭐⭐⭐

1.1 CAP 定义

  • Consistency(一致性)

    • 所有节点在同一时刻看到的数据是一致的

    • 等同于所有节点访问同一份最新的数据副本

    • 强一致性 vs 弱一致性 vs 最终一致性

  • Availability(可用性)

    • 每次请求都能获得非错误响应

    • 不保证获取的数据是最新的

    • 通常用可用率衡量(如 99.99%)

  • Partition Tolerance(分区容错性)

    • 系统在网络分区的情况下仍能继续工作

    • 分区:网络故障导致节点间无法通信

    • 分布式系统必须容忍分区

1.2 CAP 权衡

  • CA(一致性 + 可用性)

    • 单机数据库(MySQL、PostgreSQL)

    • 无法容忍网络分区

    • 不适合分布式场景

  • CP(一致性 + 分区容错)

    • ZooKeeper、etcd、HBase

    • 网络分区时牺牲可用性

    • 适用于强一致性要求的场景

  • AP(可用性 + 分区容错)

    • Cassandra、DynamoDB、Eureka

    • 网络分区时牺牲一致性

    • 适用于高可用要求的场景

1.3 CAP 理论深入理解

为什么只能三选二?

现实中的 CAP

  • 网络分区是必然发生的:所以实际上是在 C 和 A 之间选择

  • 不是非此即彼:可以根据不同的数据类型采用不同策略

  • PACELC 扩展:在无分区时也需要在延迟(L)和一致性(C)之间权衡

1.4 常见误区

  • 不是非此即彼的选择,而是程度问题

  • 实际系统往往在 CP 和 AP 之间权衡

  • 可以针对不同数据采用不同策略

  • CAP 中的 C 是线性一致性,与 ACID 中的 C 不同

2. BASE 理论

2.1 BASE 定义

  • Basically Available(基本可用)

    • 分布式系统出现故障时,允许损失部分可用性

    • 响应时间上的损失(如延迟增加)

    • 功能上的损失(如降级、限流)

  • Soft State(软状态)

    • 允许系统中的数据存在中间状态

    • 该状态不影响系统整体可用性

    • 即允许不同节点间的数据同步存在延迟

  • Eventually Consistent(最终一致性)

    • 系统中所有数据副本经过一定时间后最终能够达到一致状态

    • 不需要实时保证强一致性

    • 允许一定时间窗口内的数据不一致

2.2 BASE vs ACID

特性
ACID
BASE

适用场景

传统数据库

分布式系统

一致性

强一致性

最终一致性

可用性

较低

较高

并发性能

较低

较高

实现复杂度

较低

较高

2.3 BASE 实践案例

3. 分布式一致性级别

3.1 强一致性(Strong Consistency)

  • 任何时刻所有节点数据完全一致

  • 写入后立即可见

  • 实现成本高,性能差

  • 典型实现:Paxos、Raft

线性一致性(Linearizability)

  • 最强的一致性模型

  • 所有操作看起来像是在某个时间点瞬间完成

  • 全局时间顺序一致

3.2 弱一致性(Weak Consistency)

  • 不保证后续访问能返回最新值

  • 尽最大努力使数据趋于一致

  • 系统不保证多久之后数据能够达到一致

3.3 最终一致性(Eventual Consistency)

  • 弱一致性的特殊形式

  • 保证在没有新更新的条件下,最终所有访问都能看到最新值

  • 具体变种:

    • 因果一致性:有因果关系的操作顺序一致

    • 读己之所写:写入后自己能立即读到

    • 会话一致性:同一会话内保证一致性

    • 单调读一致性:读到的数据不会比之前读到的旧

    • 单调写一致性:写操作顺序保证

3.4 一致性级别对比

4. FLP 不可能定理 ⭐⭐⭐⭐

4.1 定理内容

FLP 定理(1985年):在一个异步分布式系统中,即使只有一个进程可能失败,也不存在一个确定性的共识算法能够在有限时间内达成一致。

4.2 定理前提

  • 异步系统:消息传递没有时间上界

  • 进程失败:至少一个进程可能崩溃

  • 确定性算法:不使用随机数

4.3 定理意义

4.4 与其他定理的关系

  • CAP 定理:分布式系统的能力边界

  • FLP 定理:共识问题的可解性边界

  • 两者都揭示了分布式系统的本质限制

5. 拜占庭将军问题 ⭐⭐⭐⭐

5.1 问题描述

5.2 问题结论

  • 3f+1 定理:要容忍 f 个拜占庭故障节点,至少需要 3f+1 个节点

  • 即:拜占庭故障节点不能超过总节点数的 1/3

5.3 拜占庭容错算法

  • PBFT(Practical Byzantine Fault Tolerance)

    • 实用拜占庭容错算法

    • 需要 3f+1 个节点容忍 f 个故障

    • 区块链中广泛使用

  • PoW(Proof of Work)

    • 工作量证明,比特币使用

    • 通过算力竞争达成共识

  • PoS(Proof of Stake)

    • 权益证明,以太坊 2.0 使用

    • 通过持有代币数量和时间达成共识

5.4 拜占庭 vs 非拜占庭

类型
故障模型
节点要求
典型算法

非拜占庭

节点只会宕机

2f+1

Paxos、Raft

拜占庭

节点可能恶意

3f+1

PBFT、PoW

6. 分布式时钟 ⭐⭐⭐⭐

6.1 物理时钟的问题

6.2 逻辑时钟(Lamport Clock)

Lamport 时钟规则

  1. 本地事件:LC = LC + 1

  2. 发送消息:LC = LC + 1,消息携带 LC

  3. 接收消息:LC = max(LC, msg.LC) + 1

Lamport 时钟性质

  • 如果 a → b(a 发生在 b 之前),则 LC(a) < LC(b)

  • 但 LC(a) < LC(b) 不能推出 a → b

  • 只能确定偏序关系,不能确定因果关系

6.3 向量时钟(Vector Clock)

向量时钟优势

  • 可以准确判断因果关系

  • 可以检测并发事件

  • 常用于冲突检测和解决

向量时钟示例

6.4 混合逻辑时钟(HLC)

7. 分布式系统挑战 ⭐⭐⭐⭐⭐

7.1 网络问题

7.2 节点故障

7.3 数据一致性

7.4 分布式协调

8. 面试要点总结

8.1 理论核心

知识点
重要程度
考察频率

CAP 理论

⭐⭐⭐⭐⭐

非常高

BASE 理论

⭐⭐⭐⭐

一致性级别

⭐⭐⭐⭐

FLP 定理

⭐⭐⭐

拜占庭问题

⭐⭐⭐

逻辑时钟

⭐⭐⭐⭐

向量时钟

⭐⭐⭐

8.2 关键记忆点

9. 常见面试题

9.1 CAP 相关

Q1:CAP 理论是什么?为什么只能三选二?

Q2:ZooKeeper 是 CP 还是 AP?

Q3:如何在一个系统中同时满足 CA?

9.2 一致性相关

Q4:最终一致性的变种有哪些?

Q5:如何实现分布式系统的强一致性?

9.3 时钟相关

Q6:为什么分布式系统需要逻辑时钟?

Q7:Lamport 时钟和向量时钟的区别?

9.4 故障容错相关

Q8:拜占庭故障和普通故障有什么区别?

Q9:FLP 定理对工程实践有什么影响?

Last updated