分布式系统(Distributed Systems)就像一个大型交响乐团:虽然乐手散布各处,但必须步调一致。为了让这些分散的机器能协同工作,计算机科学家们总结出了一套坚实的理论基础。
以下是分布式系统中最重要的核心理论:
1. CAP 定理 (CAP Theorem)
这是分布式系统最著名的准则。它指出,在一个分布式系统中,不可能同时满足以下三点:
- 一致性 (Consistency):所有节点在同一时刻看到的数据都是一样的。
- 可用性 (Availability):每次请求都能收到响应(不论成功或失败),且不会报错。
- 分区容错性 (Partition Tolerance):即使部分节点间的网络断开,系统仍能继续运行。
核心结论:在网络可能出现故障(P)的现实中,你必须在 一致性 (CP) 和 可用性 (AP) 之间做权衡。
2. BASE 理论
由于 CAP 定理中 C(强一致性)很难达到,互联网系统通常选择 BASE 理论,它是对 CAP 中 AP 方案的延伸:
- Basically Available(基本可用):系统保证核心可用,但在高峰期可能会有延迟或降级。
- Soft state(软状态):允许数据在一段时间内不一致。
- Eventually consistent(最终一致性):数据最终会在某个时间点达到一致。
3. 一致性模型 (Consistency Models)
除了强一致性和最终一致性,分布式系统还定义了不同的“契约”:
| 模型 | 描述 | 场景建议 |
|---|---|---|
| 强一致性 | 更新后,任何后续访问都能读到最新值。 | 银行转账、金融交易 |
| 最终一致性 | 经过一段时间后,所有副本最终会同步。 | 朋友圈点赞、评论 |
| 因果一致性 | 如果 A 通知了 B 它更新了数据,B 读到的是 A 更新后的值。 | 聊天对话流 |
| 会话一致性 | 保证同一个用户在一次会话中读到自己写的数据。 | 个人资料修改 |
4. 共识算法 (Consensus Algorithms)
在“各执一词”的分布式环境中,如何让所有节点对某个决策达成一致?这就需要共识算法。
- Paxos:被誉为分布式算法的基石,虽然极其复杂,但非常稳健。
- Raft:为了解决 Paxos 难理解的问题而生,现在是工业界最流行的选择(如 etcd, TiDB 都在用)。
5. 时间与顺序 (Time and Ordering)
在分布式系统中,各台机器的物理时钟很难完全同步,因此无法单纯依赖“墙上时间”判断先后。
- 逻辑时钟 (Lamport Clock):不关心具体时间点,只关心事件发生的先后顺序。
- 向量时钟 (Vector Clock):用于发现数据冲突(例如两个节点同时修改了同一个文件)。
6. FLP 不可能性 (FLP Impossibility)
这是一个比较硬核的理论。它指出:在异步网络中,只要有一个节点可能故障,就不存在一种能在有限时间内百分之百达成共识的确定性算法。
这意味着我们设计的算法(如 Raft)在极端恶劣的网络下可能会暂时卡住,但这是为了保证正确性必须付出的代价。
分布式系统理论本质上是在性能、可靠性和复杂性之间玩的一场平衡游戏。