知识卡片
任期修复旧主幻觉
内容
仅用 optime 选主会受 A-B-A 切换和时钟偏斜影响,旧主未确认写可能压过新主已确认写。protocol v1 把 term 纳入 optime,让新任期天然压过旧任期。发散:时间戳描述新旧,任期描述统治合法性,两者不能混用。
参考来源
- 位置:《分布式系统与一致性》第5章《文档数据库MongoDB》"解决方法:选主协议protocol v1"一节(源文件:_epub-src/OEBPS/Text/chapter9.xhtml)
- 结论依据:原文明确protocol v0仅用optime选主受A-B-A切换和时钟偏斜影响会"错误地保留了unack的更新,而丢失了ack的更新";protocol v1中"optime不仅仅是一个时间戳,它还包括一个任期(term)。每次重新选举时,任期都会增加",使新任期的写入天然压过旧任期。
- 原始内容:这种丢失更新是protocol v0本身的设计导致的……protocol v1中的optime不仅仅是一个时间戳,它还包括一个任期(term)。每次重新选举时,任期都会增加……虽然A在网络分区期间接受了更多的客户端写入,但是这些写入的任期要比B和C上接收的写入的任期小……A上那些没有被确认的写入会发生回滚。