分布式协调详解:Leader、Quorum、Lease、Fencing Token 与 Gossip
分布式系统的协调结构大体分两派:集中式把决策权交给中心节点,简单直观;去中心化让节点对等协商,没有单点。两派各有账要算——前者怕中心挂、怕中心挤,后者怕协调贵、怕脑裂。现实系统几乎从不二选一,而是混合形态。本文给出对比、代价与选型思路。
两种结构各自在解决什么
集中式结构里存在一个承担决策职责的中心:主节点、调度器、协调者。它决定谁干活、写入按什么顺序生效,其余节点负责执行和复制。好处是系统行为有一条清晰的决策主线:关键变更都经过同一个点,顺序天然可排,排查问题知道该看谁。
去中心化结构没有固定中心,节点地位对等,靠交换消息逐步收敛出一致视图,典型代表是 Gossip 式传播。好处是没有单点、加节点几乎不增加谁的负担,规模可以拉得很大。
优势与代价对比
| 维度 | 集中式 | 去中心化 |
|---|---|---|
| 决策路径 | 单点拍板,路径短 | 多节点协商,路径长 |
| 一致性 | 容易做强一致 | 通常只到最终一致 |
| 单点风险 | 中心宕机即停摆,需选举兜底 | 天然无单点 |
| 扩展性 | 中心易成瓶颈 | 接近水平扩展 |
| 实现复杂度 | 低,心智负担小 | 高,收敛与冲突处理复杂 |
| 典型代表 | 主从复制、调度中心 | Gossip、DHT、Cassandra 反熵 |
去中心化的隐藏成本:共识与脑裂
去中心化”无单点”的代价,往往被低估。
共识不是免费的
没有中心,遇到”必须只有一个正确答案”的问题——谁是主、某条日志是否提交——就得靠节点间投票解决,这就是共识。多数派(Quorum,N/2+1)是常用裁决工具:任意两个多数派必有交集,交集保证新决定能感知旧决定。代价是容错受限于票数:3 台与 4 台都只能容忍 1 台故障,因此协调集群普遍部署奇数台。
脑裂:两个”中心”比没有中心更糟
网络分区时,两侧节点各自联系不上对方,可能各自选出自己的 Leader 并同时对外收写,分区愈合后出现两条互相冲突的状态线——这就是脑裂。防御靠组合拳:
- Quorum:拿不到多数派的一侧停止提交,从根上掐断双主;
- 任期(Term/Epoch):每次选举产生递增任期,节点拒绝旧任期的请求,旧主醒来也无法以旧身份发号施令;
- Fencing Token:任期只管协议内部,旧客户端绕过协议直接写数据库时,需要资源端校验单调递增的 token、拒绝小号写入。
心跳和 Lease 只能做存活判断,不能当脑裂防线:超时只能说明”这段时间没收到消息”,证明不了对方已死。把心跳当共识,是脑裂事故的经典配方。
现实系统几乎都是混合形态
教科书式的纯集中或纯去中心化在生产里很少见,主流是分层混合:
- 主从 + 选举:平时主节点集中决策,主挂了由多数派选出新主兜底。ZooKeeper、etcd、Redis 哨兵都是这个套路。
- 控制面集中 + 数据面分散:元数据、选主、分片迁移走 Leader 与共识链路;普通读写分散到各节点,避免中心被流量压垮。
- Gossip 传播 + Quorum 决策:Redis Cluster 用 Gossip 扩散故障观察与槽位信息,但主从切换仍要多数 Master 投票。传播可以最终一致,决策必须共识。
选型思路
先看写错的后果:资金、库存、锁归属这类错了要修数据的场景,果断选集中决策加共识;状态传播、成员发现这类允许短暂不一致的场景,去中心化的 Gossip 更划算。再看规模与延迟预算:小规模控制面用 Leader 管理最省心;节点成千上万、每个节点只需要近似视图时,对等传播才撑得住。
小结
- 集中式赢在决策简单、一致性强,输在单点与瓶颈;去中心化反之。
- 去中心化的主要成本是共识(Quorum 投票)与脑裂防御(Term/Epoch + Fencing Token)。
- 心跳与 Lease 是存活检测,不是共识,不能单独防脑裂。
- 生产系统多为混合形态:主从打底、选举兜底,传播用 Gossip、决策用 Quorum。

