← [ BACK_TO_NOTES ]

数据复制

解释分布式系统为什么维护多个数据副本,以及 leader-follower、多 leader 与 leaderless 复制在一致性、可用性和故障恢复上的取舍。

#concept #growing #backend #architecture

[!info] related notes

数据复制

[!abstract] 一句话定义 Replication 在多个节点保存同一逻辑数据的副本,用冗余换可用性、读扩展或地域容灾。真正难点不是“多拷贝几份”,而是写入顺序、确认条件、延迟、冲突、故障切换和旧 Leader 隔离。

为什么需要复制

  • 节点或磁盘故障后继续服务;
  • 读请求分散到多个副本;
  • 数据靠近不同地区用户;
  • 提供灾难恢复副本;
  • 为维护和升级留切换空间。

高可用副本与独立备份解决的问题不同:错误删除也可能快速复制到所有副本。

三种常见拓扑

Leader–Follower

Client writes → Leader
                 ├→ Follower A
                 └→ Follower B

写路径简单、顺序清晰;Leader 是写瓶颈和故障切换中心。MySQL 主从、Kafka Partition Replica 常采用类似思想。

Multi-Leader

多个 Leader 可接受写入,再相互同步。适合多地域或离线场景,但并发冲突、循环复制和顺序更加复杂。

Leaderless / Quorum

Client 将写入发给多个副本,并从多个副本读取:

N replicas
W write acknowledgements
R read responses

常通过 Quorum、Version 和 Repair 提高读到新值的概率,但 R + W > N 不是在所有故障和实现中自动等于线性一致。

同步与异步复制

同步

提交前等待足够副本确认。

lower data-loss window
↔ higher latency / lower availability during replica issues

异步

Leader 本地提交后立即响应,副本稍后追赶。

lower write latency
↔ replication lag / possible loss on failover

实际系统常采用一个同步副本 + 其他异步副本等混合策略。

Replication Lag

Lag 会导致:

  • 刚写完从 Replica 读不到;
  • 用户读到倒退状态;
  • Failover 后丢失已确认但未复制写入;
  • 缓存/搜索投影继续消费旧位置。

常见缓解:

  • Read-your-writes 路由到 Leader;
  • 记录 Commit Position / LSN 并等待 Replica 追上;
  • Bounded Staleness;
  • 对关键读使用强一致路径;
  • 监控 Lag 的时间和字节/Offset,而不只看单一数值。

Failover 的核心问题

Leader fails
→ detect failure
→ choose new leader
→ ensure new leader has acceptable state
→ fence old leader
→ redirect clients
→ reconcile divergent data

只完成“选出新 Leader”还不够。旧 Leader 恢复后若仍接受写入,会形成 Split Brain。

冲突处理

Multi-Leader / Leaderless 可能产生并发版本:

  • Last-write-wins;
  • Version / Vector Clock;
  • Merge Function;
  • CRDT;
  • 用户或业务人工解决。

冲突策略必须维护业务不变量;按墙钟“最后时间戳胜出”可能因时钟偏差和覆盖更新而丢数据。

复制与分片

Replication → 同一 Shard 多副本
Sharding    → 不同数据分到不同 Shard

生产集群常同时使用:先分片扩容量,再为每个 Shard 复制以容错。

观测重点

replication lag / apply lag
replica health and role
commit / quorum latency
under-replicated data
leader changes / failover time
conflict / repair rate
network and disk throughput
backup / restore verification

设计检查表

  • 业务能接受多少数据丢失与读旧窗口。
  • 提交成功需要多少副本确认。
  • Replica Read 的一致性契约明确。
  • Failover 有新 Leader 资格和旧 Leader Fencing。
  • 冲突检测与合并符合业务不变量。
  • 高可用、副本和 Backup 分开设计。
  • Lag、Failover 和 Recovery 有演练与指标。
创建于 2026/9/4 更新于 2026/9/4
Digital Biome
Access

键盘导航

j / k / ↑ / ↓
选择对象
Enter / o
打开选择
/ 或 Ctrl+K
全站搜索
i / f / 1–4
筛选当前列表
g → h / l / p / t / a
首页 / 笔记 / 项目 / 工具 / About
r → 1–9
打开所选对象的关联
u
返回上一页
Esc
关闭浮层 / 取消命令;输入框内清空文本