分布式系统的协调结构大体分两派:集中式把决策权交给中心节点,简单直观;去中心化让节点对等协商,没有单点。两派各有账要算——前者怕中心挂、怕中心挤,后者怕协调贵、怕脑裂。现实系统几乎从不二选一,而是混合形态。本文给出对比、代价与选型思路。

两种结构各自在解决什么

集中式结构里存在一个承担决策职责的中心:主节点、调度器、协调者。它决定谁干活、写入按什么顺序生效,其余节点负责执行和复制。好处是系统行为有一条清晰的决策主线:关键变更都经过同一个点,顺序天然可排,排查问题知道该看谁。

去中心化结构没有固定中心,节点地位对等,靠交换消息逐步收敛出一致视图,典型代表是 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。