Day05|用生产硬核笔记逆向解构《DDIA》:Quorum、LWW 与读写分离背后的三场一致性幻觉

发布时间:2026/5/29 1:09:02

Day05|用生产硬核笔记逆向解构《DDIA》:Quorum、LWW 与读写分离背后的三场一致性幻觉 文章目录Day05|Replication:Quorum、LWW 与读写分离背后的三场一致性骗局0. 本篇边界:哪些案例必须砍掉?本篇保留本篇不讲1. 案例原文 / 关联原文链接映射2. Day05 总纲:Replication 不是高可用技术,而是对不一致性的工程化包装3. 单主复制:MySQL / PostgreSQL / Oracle ADG 的真正问题不是延迟,而是读一致性3.1 生产表象与链路3.2 认知盲区一:把复制延迟当性能指标,忽略客户端语义3.3 幽灵状态一:读己之所写断层3.4 用 GTID / LSN 做 Causal Token:正确,但不是银弹MySQL GTIDPostgreSQL LSNOracle ADG3.5 第六刀:砍掉应用层托底的“路由幻觉”4. 幽灵状态二:单调读断层 —— 用户刷新页面,时间反而倒退4.1 生产表象4.2 分布式本源4.3 治理机制:Session Stickiness 与水位线方案一:Session 绑定方案二:会话水位线方案三:延迟感知读路由4.4 反证思维:负载均衡越均匀越好吗?5. 幽灵状态三:一致前缀读断层 —— 因果顺序被副本延迟打乱5.1 生产表象5.2 单主复制里也可能出现一致前缀问题6. 多主复制:真正的问题不是双写,而是冲突语义6.1 多主复制的诱惑6.2 第五刀:砍掉 LWW 的遮羞布6.3 并发的真正定义:不是物理时间,而是 Happens-Before7. 无主复制:Quorum 不是强一致,而是概率性求生7.1 生产表象与模型7.2 第四刀:砍掉 W + R N 的数学乌托邦漏洞一:Sloppy Quorum 的背叛漏洞二:并发写覆盖的无解漏洞三:半成功写污染7.3 Quorum 到底保证了什么?7.4 Vector Clock:不是时间戳,而是因果关系记录7.5 Read Repair:读不是只读,而是修复的一部分7.6 Sloppy Quorum 与 Hinted Handoff:高可用背后的债务7.7 反证思维:最终一致性是不是“迟早会对”?8. Day05 提炼出的新复制模板示例一:MySQL 主备读延迟导致读己之所写断层示例二:PostgreSQL 备库读导致单调读断层示例三:多主复制导致冲突覆盖示例四:无主复制并发写产生 siblings9. Day05 最终收束10. Day06 预告:第六章 PartitioningDay05|Replication:Quorum、LWW 与读写分离背后的三场一致性骗局Day01 讨论故障传播、负载放大、状态不可见。Day02 讨论数据模型如何决定系统能看见什么关系。Day03 讨论存储结构如何决定状态复制、状态迁移和恢复边界。Day04 讨论编码演进如何保证新旧组件共同理解同一份状态。Day05 进入 DDIA 第五章:Replication。这一章不能写成“主备同步配置手册”,也不能把 Sentinel、Lease、Raft、Paxos 全塞进来。第五章真正要讲的是:复制不是让数据天然一致,而是在多个副本必然不一致的物理现实下,设计一套可接受的谎言边界。0. 本篇边界:哪些案例必须砍掉?为了不把第五章写成概念乱炖,先明确本篇边界。本篇保留单主复制: MySQL、PostgreSQL、Oracle ADG。 多主复制: 跨机房多活、双写、冲突解决。 无主复制: Dynamo 风格系统、quorum 读写、vector clock、read repair、sloppy quorum、hinted handoff。本篇不讲Redis Sentinel: 它是主身份裁决与故障转移机制,不是用户数据复制模型本身。 K8s Lease: 它是控制面心跳 / 分布式锁 / 身份观测机制,不是数据复制。 etcd / Raft: 它属于共识复制,应该放到 Day09 Consistency and Consensus。 OceanBase / Paxos: 它属于多副本共识与事务一致性,不应该在第五章提前透支。这不是说 Sentinel、Lease、Raft、Paxos 不重要。恰恰相反,它们太重要,所以不能在第五章提前抢跑。第五章必须先把最基础、最危险、最普遍的异步复制异常讲透:副本滞后时,客户端到底会看到哪些鬼故事?1. 案例原文 / 关联原文链接映射正文案例原文 / 关联原文链接说明技术笔记总入口喝醉酒的小白 CSDN 主页公开主页MySQL 主备读延迟MySQL 中间件+主备读延迟问题说明读写分离、主备延迟MySQL 主从 / 主备MySQL 主从和主备的区别主从、主备语义差异MySQL GTID 差异MySQL:主备库的 GTID 差异,从而判断主备库的同步状态GTID 集合与同步状态MySQL 增强半同步切换MySQL 增强半同步模式下主备切换后原主 GTID 更大的原因分析半同步、GTID、切换边界MySQL 主从切换 GTIDMySQL 主从切换 GTID 不一致问题分析与解决方案切换前后 GTID 一致性MySQL 多线程复制MySQL 多线程复制(MTS)性能统计并行回放、复制延迟MySQL GTID 官方文档MySQL Replication with Global Transaction IdentifiersGTID 用于事务标识与复制MySQL GTID 函数MySQL GTID Functions等待副本到达指定复制位置PostgreSQL 流复制和 Oracle ADG 归档对比PostgreSQL 流复制和 Oracle ADG 关于归档的要求对比WAL / redo / archive 差异PostgreSQL 官方流复制PostgreSQL Log-Shipping Standby ServersWAL shipping、standby、级联复制PostgreSQL LSN 函数PostgreSQL Admin FunctionsWAL LSN、replay LSN、flush LSNOracle Data Guard 日志传输Oracle Data Guard 日志传输的底层协议解析LGWR / ARCH / RFS / MRPOracle ADG FALOracle ADG FAL 参数配置与验证指南归档缺口自动拉取Oracle Data Guard 官方概念Oracle Data Guard ConceptsRedo Transport Services / Apply ServicesOracle Apply ServicesOracle Data Guard Apply Servicesredo apply 与同步Dynamo PaperDynamo: Amazon’s Highly Available Key-value Storequorum、vector clock、sloppy quorum、hinted handoffRiak ConceptsRiak Conceptsvector clock、siblings、eventual consistencyCassandra ConsistencyApache Cassandra ConsistencyDynamo 风格复制、quorum、一致性级别MySQL / PG 读己之所写异常内部案例,暂无公开原文GTID / LSN 作为因果令牌跨机房多主写冲突内部案例,暂无公开原文冲突检测、冲突解决、业务合并无主复制并发写冲突内部案例,暂无公开原文vector clock、read repair、last write wins 风险高峰期备库延迟击穿主库内部案例,暂无公开原文causal token 读路由、主库读放大、降级取舍2. Day05 总纲:Replication 不是高可用技术,而是对不一致性的工程化包装DDIA 第五章讲 Replication。普通读法容易把它读成:

相关新闻