Memo/zookeeper-linearizable-reads
1 分钟阅读
ZooKeeper 的 sync + read 不保证严格线性一致读
实现未将 sync 作为空写复制,网络分区边界下可能返回旧数据。
理论上可通过 sync + read 获得线性一致读,但 ZooKeeper 的 sync 实现并未将其作为空写日志复制。leader 直接向 follower 返回 zxid,未像 Raft 的 ReadIndex 或 lease read 一样确认自己仍是 leader。
网络分区或脑裂的边界条件下,这可能返回旧数据。因此它不满足严格的线性一致读语义,尽管该场景罕见且实现上可以修复。
参考:ZooKeeper 论文阅读。
讨论
邮箱用于身份识别和回复通知,并由 Waline 存储。