《DDIA》复制

主从复制:
只有主库可写
从库,从快照开始,更新复制日志至赶上主库
同步/异步写,需要对写从库结果确认。半同步:最快的几个从库写确认
故障恢复:
从库追赶;
主库切换:新主库共识
脑裂:

复制日志实现:
WAL:复制与存储引擎紧密耦合
逻辑⽇志复制:关系数据库的逻辑⽇志通常是以⾏的粒度描述对数据库表的写⼊的记录序列
将复制移动到应⽤程序层:触发器,存储过程

复制延迟问题

强⼀致性、最终⼀致性

读⼰之写⼀致性
主库读用户可能修改的内容
监控从库的复制延迟,与用户可能读间隔
客户端时间戳选择查询的从库,或等待从库
路由选择?读取前置检查?

单调读
从单个副本读,重新路由副本则保持相对顺序

一致前缀读
因果相关写入不同分片,写入结果延迟后到达不同从服务器乱序,读从服务器
解决:因果相关写入同一服务器

多主复制:
处理写入冲突
同步冲突检测:使用单主复制
异步:
解决方案:
优先级:LWW,副本Id,
保留冲突,应用级解决冲突(写时执行 || 读时执行)

⽆冲突复制数据类型(Conflict-free replicated datatypes)(CRDT)
可合并的持久数据结构(Mergeable persistent data structures)(Git版本控制系统)
可执⾏的转换(operational transformation)

多主复制拓扑
复制日志排序问题:版本向量

有主:主库决定写⼊的顺序,⽽从库按相同顺序应⽤主库的写⼊

无主:client直接写,协调者写
多读:版本号决定更新值
读修复,后台反熵
法定人数:n, w, r,wr重叠,可区别最新写入

法定人数无法解决的问题:
并发写处理
回滚
节点失效,破坏wrn约束

并发写中因果语义

并发定义:无法意识到对方存在

上一篇:记一次NegativeArraySizeException


下一篇:DDIA阅读笔记