复制与仲裁把读写确认转换为一致性条件
从副本数、读写仲裁、故障域和冲突修复理解复制系统,并说明多数公式之外的延迟与陈旧风险。
复制与仲裁把读写确认转换为一致性条件
数据复制把同一逻辑记录保存在多个节点,以承受故障、扩大读取能力或靠近用户。副本一多,系统就要回答一次写入需要多少确认、一次读取询问哪些节点、并发版本怎样选择。仲裁参数把这些问题转成可配置规则,但公式本身不能覆盖全部一致性条件。
设计复制方案要先确定目标:防止数据丢失、提高可用性、降低延迟,还是提供严格读取。不同目标对同步程度和故障行为的要求不同。
同步复制与异步复制选择确认时点
同步复制在返回成功前等待一定数量副本持久化,减少已确认数据在单点故障中丢失的风险。等待越多,尾延迟越容易受慢节点和网络影响;可用副本不足时,写入会停止。
异步复制由主节点先确认,再把日志发送给其他副本。正常路径延迟低,但主节点在复制前故障可能丢失已确认写入,故障转移也可能让用户看到状态回退。
很多系统采用折中:等待本地持久化和一个远端副本,其他副本异步追赶。保证必须精确说明“确认到内存、操作系统缓存还是稳定介质”,否则同步一词没有可验证含义。
N、W、R 描述副本与确认数量
N 表示一条数据的目标副本数,W 表示写入成功需要的确认数,R 表示读取查询的副本数。若读写集合从同一固定 N 个副本中选择,且 R+W>N,读集合理论上会与最近一次成功写集合相交。
相交只说明至少有一个副本见过新版本,不保证客户端一定选中它。系统还需要版本排序、响应等待和冲突处理。若读取在收齐 R 个响应前就返回,或版本时钟不可靠,公式无法单独提供严格一致性。
W>N/2 可以让两个成功写集合相交,但并发协调、领导者和条件写入仍决定能否阻止冲突。仲裁是构件,不是线性一致性的充分证明。
严格仲裁与宽松仲裁有不同集合
严格仲裁只在该键的指定副本上计数,集合相交条件较清楚。Dynamo 的宽松仲裁在目标副本不可达时,把写入临时存到其他健康节点,以保持可用,这称为提示移交一类机制。
替代节点不属于原固定副本集,读写集合可能不相交。系统需要在目标节点恢复后转交临时数据,期间读取可能看不到刚确认的写入。这是可用性与一致性的明确交换。
运维指标应区分正常副本确认和替代确认。只看写入成功率,会掩盖系统长期处于降级仲裁、积累大量待归还数据。
版本信息用于识别新旧与并发
单调版本、逻辑时钟或向量时钟可以帮助比较副本状态。若一个版本因果上包含另一个,旧版本可被丢弃;若彼此不可比较,则表示并发更新,需要合并或保留冲突。
依赖物理时间的最后写入获胜实现简单,却受时钟偏差和写入延迟影响,可能静默覆盖较新的业务事实。即使时钟同步良好,相同时间也不表达因果关系。
版本元数据会增长,向量时钟还需要处理节点身份变化。系统常压缩或截断信息,因此冲突检测能力也有边界,应在文档中说明。
读修复与反熵推动副本收敛
读取多个副本发现旧值时,可以在返回新值后异步更新落后副本,这称为读修复。它依赖数据被读取,冷数据可能长期不一致。后台反熵则主动比较副本范围,修复未被访问的数据。
修复需要带版本和删除标记。若物理删除记录而某个副本离线,恢复后旧值可能被当成有效版本重新传播。墓碑要保留超过最大离线和修复窗口,并在安全条件下回收。
大规模修复会占用磁盘和网络,可能与在线流量竞争。应限速、分片并监控最老未修复差异,而不是只统计任务完成数量。
故障域比副本数量更重要
三个副本若都在同一机架、电源或区域,无法抵御共同故障。副本放置策略应跨预期故障域,同时考虑跨区域延迟和合规限制。
扩容和再平衡期间,副本可能迁移。若系统过早把新副本计入仲裁,尚未完整同步的数据会参与读写;若旧副本太早删除,又会降低实际冗余。迁移状态必须进入仲裁判断。
备份仍然必要。复制会快速传播误删、逻辑错误和勒索加密,多个相同错误副本不等于可恢复历史。
客户端会话暴露额外一致性需求
用户写入后立刻读取,通常期望读到自己的写入;在不同副本之间路由可能违反这一点。会话粘性、版本令牌或读最低版本可以提供 read-your-writes,而不必让所有读全局线性化。
单调读取要求同一会话不从新版本退回旧版本。客户端可以携带已见版本,服务在本地副本不足时等待或转向更新副本。失败行为要明确,不能悄悄返回旧值。
多键事务又增加原子性要求。单键仲裁无法保证跨键同时可见,需要事务协调或重新设计业务边界。
测试必须覆盖滞后、冲突与恢复
验证应暂停复制、隔离指定副本、并发写同一键并触发节点替换。检查成功响应后的可见性、冲突是否保留、删除会否复活,以及修复后所有副本是否收敛。
监控包括复制滞后分布、可用副本数、仲裁失败、冲突率、提示移交队列、修复带宽和墓碑积压。总体健康无法替代每个分片和故障域状态。
复制与仲裁把可用性、延迟和一致性之间的取舍落到确认集合。正确使用需要固定副本集合、版本比较、修复和客户端会话共同成立。只写 R+W>N,会遗漏决定真实保证的大部分条件。
资料依据
- Amazon:Dynamo: Amazon's Highly Available Key-value Store,https://www.allthingsdistributed.com/files/amazon-dynamo-sosp2007.pdf
- Google:Site Reliability Engineering Books,https://sre.google/books/