数据复制
主从、多主、最终一致;对照 pg。
30 分钟
数据复制
分片解决「装不下」,复制(Replication) 解决「不够快、不够稳」:同一份数据在多个节点上维护副本,提升读吞吐与故障容忍。本课对照 postgresql-essentials 的主从架构,理解 building-for-scale 中的数据高可用。
学习目标
- 区分主从复制、多主复制与无主(Quorum)模型
- 理解同步复制与异步复制对延迟、一致性的影响
- 描述故障切换(Failover)时可能的数据丢失窗口
核心概念
| 拓扑 | 写入口 | 典型场景 |
|---|---|---|
| 单主多从 | 仅 Primary | MySQL/PostgreSQL 主从 |
| 多主 | 多节点可写 | 跨地域写入,冲突解决复杂 |
| 无主 | Quorum 读写 | Cassandra、Dynamo 风格 |
写 → Primary →(异步/同步)→ Replica-1, Replica-2
读 → 可路由到 Replica(允许复制延迟)
同步 vs 异步:
- 同步:从库确认才返回,RPO≈0,写延迟上升
- 异步:主库先返回,从库追赶;主宕机可能丢最近几秒
最终一致:读从库可能看到旧数据。业务上可用 版本号、读己之写路由 缓解,详见 scale-read-write。
PostgreSQL 流复制 + Patroni 选主;MySQL GTID 便于 failover。Redis 主从 + Sentinel 是缓存层复制,见 redis-essentials。
与 CAP
复制延迟是 CAP 中 C 与 A 折衷的具象:强同步偏 CP,异步多副本偏 AP。结合 scale-cap 为业务选复制级别。
练习
- 画出主从拓扑,标出写路径、读路径、failover 路径
- 定义你的服务 RPO/RTO,据此选同步还是异步复制
- 模拟:主库宕机 30 秒,异步从库 promotion 后可能丢哪些数据
小结
复制用副本换可用与读能力;同步保数据、异步保速度——failover 方案必须写进 runbook。
加载本节练习…