知识卡片

实现偏离会出错

普通读书笔记卡 · 1727.c

内容

Zab Pre 1.0 少了设计版中的完整 epoch 处理,可能让不同 leader 生成相同 zxid 或保留应跳过提议。发散:被证明正确的是协议模型,不是“差不多”的实现;省掉一个阶段可能省掉的正是安全性。

参考来源

- 位置:《分布式系统与一致性》第12章《原子广播算法Zab》"12.4.4 Zab Pre 1.0算法的缺陷"一节(源文件:_epub-src/OEBPS/Text/chapter16.xhtml) - 结论依据:原文明确"Zab Pre 1.0算法中的提议只包含事务,并不包含epoch……从而也导致了bug的出现",bug1示例中B、C两个不同leader各自独立生成了相同的zxid[2,1];bug2示例中"server1上的Proposal[0,3]不会被删除",即本应被跳过的旧提议被保留。 - 原始内容:与设计的Zab算法不同,Zab Pre 1.0算法中的提议只包含事务,并不包含epoch……这是Zab Pre 1.0算法与设计的Zab算法的一个非常重要的差别,从而也导致了bug的出现……B提出一个新提议,zxid为[2,1]……C也提出一个新提议,zxid为[2,1]……因为[0,3]<[1,1],所以server2不会发送TRUNC请求,server1上的Proposal[0,3]不会被删除。