{T}

分布式协调

0. 引言

分布式数据库的副本一致性、故障切换、事务提交,都依赖一组底层协调机制:错误侦测判断节点是否存活、领导选举决定谁来做主、可靠传播让变更到达所有副本、共识让多个节点就同一值达成一致。本文按"问题 → 机制 → 算法"的脉络展开这四层。

1. 核心问题与失败模型

分布式协调要解决的核心问题:

问题要回答什么对应机制
故障检测节点还活着吗?心跳、Gossip 探测
领导选举谁来做主?Bully / Raft 选举
一致性副本读到什么状态?一致性模型(详见《一致性:CAP 与一致性模型》)
共识多个节点就某值达成一致?Paxos / Raft / ZAB
数据传播变更如何可靠到达所有副本?原子广播、反熵
事务跨节点操作如何原子?2PC / 共识化提交(详见《事务与恢复》)

讨论上述问题前需明确失败模型

模型行为典型假设
崩溃-停止(Crash-Stop)节点永久停止,不发送任何消息简单理论模型
崩溃-恢复(Crash-Recovery)节点停止后可重启,丢失内存状态数据库节点的常见假设
遗漏(Omission)消息可能丢失网络不可靠
拜占庭(Byzantine)节点可任意行为,包括发送矛盾消息区块链等对抗场景

数据库节点通常假设为崩溃-恢复 + 非拜占庭模型,从而可使用较简单的共识算法。

2. 错误侦测

错误侦测是分布式系统感知节点存活的机制,是领导选举、复制、共识的前提。系统必须区分"节点已崩溃"与"节点只是响应慢":误判会把健康节点剔除(降低可用性),漏判会向已死节点持续发请求(浪费资源)。

2.1 心跳与准确性权衡

最基础的侦测是心跳:节点周期性发送心跳,接收方在超时窗口内未收到即判定失败。超时应大于网络最大延迟与处理抖动,否则误判率升高。

错误侦测存在根本性权衡:

  • 强完整(Complete):每个真实失败的节点最终都被检测到;
  • 强准确(Accurate):被判定失败的节点确实失败了。

在异步网络中二者无法同时完美保证,实际系统采用概率性侦测:以一定误判率换取及时性。

2.2 Gossip 风格的成员探测

节点间通过 Gossip 交换彼此的存活信息,每个节点维护对其它节点的怀疑度:多次未达的心跳使怀疑度累积,超过阈值才判定失败,降低瞬时抖动导致的误判。

侦测结果与上层协作:侦测到 Leader 失败 → 触发选举;侦测到副本失败 → 移出可用集合,剩余副本仍满足 Quorum;侦测结果是共识中判定"诚实节点"的输入。

3. 领导选举

许多操作只适合由单一节点执行:分配分片、决定事务提交顺序、协调复制。若多个节点同时担任协调者,会产生冲突与脑裂(Split-Brain)。选举机制保证任一时刻至多一个有效 Leader。

3.1 基本要求

  • 安全性(Safety):不会出现两个节点同时自认为 Leader;
  • 活跃性(Liveness):旧 Leader 失效后,系统最终能选出新 Leader;
  • 唯一性:集群视角下 Leader 唯一。

3.2 选举算法

算法机制优点缺点
Bully节点按 ID 排序,大 ID 发起选举,无更大响应则自任 Leader 并广播实现简单、收敛快高 ID 节点频繁触发选举,消息多
Ring节点逻辑成环,选举消息沿环传递,ID 最大者胜出结构简单环断裂需自愈
基于共识选举融入共识算法(如 Raft 的任期选举),Leader 兼负日志复制选举与复制统一,避免脑裂依赖共识实现

3.3 租约(Lease)机制

Leader 通过租约向其他节点证明自己仍然有效:定期刷新租约,超时未刷新则其他节点可发起新选举。租约避免持续心跳的开销,并提供明确的 Leader 权威窗口。侦测延迟决定了故障切换(Failover)的时长,过度敏感的侦测会引发频繁选举(抖动)。

4. 可靠传播与反熵

复制把数据放到多节点,但网络会丢包、乱序、节点会离线——可靠传播保证变更最终到达所有副本,反熵保证副本间状态收敛一致。

4.1 广播与原子广播

广播将一份数据从一个节点同步到多个节点。**原子广播(Atomic Broadcast)**额外保证:

  • 全序(Total Order):所有节点以相同顺序收到消息;
  • 可靠性:消息要么被所有节点接收,要么都不接收。

原子广播与共识等价(可相互归约),是 ZAB、Raft 的核心能力。

4.2 Gossip 与反熵

Gossip 让每个节点周期性地随机选若干节点交换状态,信息以"传染病"方式指数级扩散:

  • 优点:去中心、可扩展、容错好;
  • 缺点:传播有延迟,达到一致需若干轮。

反熵是修复副本分歧的过程:副本间定期比对摘要(如 Merkle 树——将数据集分层哈希,比对根与分支哈希即可定位差异分片,避免全量比对),发现差异后同步缺失或过期的数据。配套机制:

  • 读修复(Read Repair):读取时若发现副本不一致,立即修复落后副本;
  • Hinted Handoff:临时不可达的副本,由其他节点暂存其应得更新,恢复后补发。

反熵驱动的系统通常提供最终一致性(详见《一致性:CAP 与一致性模型》),修复速度决定了"最终"的时限。

5. 共识算法

共识是多个节点就某个值(如日志顺序、Leader 身份)达成一致的过程,是复制、选举、事务的底层支柱。

5.1 三属性

  1. 正确性(Validity):达成共识的值必须来自某个诚实节点的提议;
  2. 一致性(Agreement):所有诚实节点就相同值达成共识;
  3. 终止性(Termination):诚实节点最终就某值达成共识。

正确性 + 一致性对应安全性(Safety),终止性对应活跃性(Liveness)

5.2 主要算法

图表渲染中…
算法特点工程代表
Paxos理论上最严谨,Prepare/Accept 两阶段 + Quorum;难理解与实现,Multi-Paxos 工程复杂Spanner
Raft以可理解性为目标:Leader 选举 + 日志复制 + 任期(Term)安全;等价于 Multi-Paxos,结构清晰etcd、TiKV、Consul
ZABZooKeeper 的原子广播协议,偏主备模型:单一 Leader 广播事务,Follower 按序应用ZooKeeper
VR早于 Raft 的共识方案,Leader + 日志复制 + 视图切换学术系统

5.3 性能与代价

  • 共识通常需多数派往返,跨地域延迟高;
  • 写入吞吐受 Leader 单点限制(可批处理缓解);
  • 读若要求线性一致,需经 Leader 或读多数派(Read Index / Lease Read)。

6. 小结

  • 协调四层:侦测(活着吗)→ 选举(谁做主)→ 传播(变更到齐)→ 共识(顺序一致);
  • 失败模型决定算法选择:数据库常用崩溃-恢复 + 非拜占庭;
  • 心跳是侦测基座,Gossip + 怀疑度降低误判;租约给 Leader 明确的权威窗口;
  • 原子广播 ≡ 共识,反熵(Merkle 树/读修复/Hinted Handoff)兜底最终一致;
  • 共识主流实现:Paxos(严谨)、Raft(可理解)、ZAB(主备)、VR(先驱)。

下一章讲解系统实践:从案例与传统方案看分布式数据库的落地演进。