知识卡片
空洞阻塞状态机
内容
Paxos 实例可并发运行,可能出现位置 2 未确定而位置 3 已确定的空洞;复制状态机必须按序执行,等待或用空操作填洞。发散:日志有序性比单个槽位成功更重要,跳过空洞会让状态机分叉。
参考来源
- 位置:《分布式系统与一致性》第10章《共识算法Paxos》"10.6.2 空洞处理"一节(源文件:_epub-src/OEBPS/Text/chapter14.xhtml)
- 结论依据:原文明确Paxos实例可并发导致"如果在第一个实例的值的确定过程中出现消息丢失……第一个实例的值没有确定,同时……第二个实例的值成功确定……这种情况被称为空洞",而复制状态机的处理方式是"如果在某个命令序列位置未发现值,也就是出现了空洞,则状态机不会继续执行,它会一直等待这个位置被填入值,即便在这个空洞之后的位置上有命令,状态机也不会继续执行"。
- 原始内容:这种情况被称为空洞……这种处理空洞的机制非常简单,就是所有进程都要严格按照命令序列执行每一个命令,如果在某个命令序列位置未发现值,也就是出现了空洞,则状态机不会继续执行,它会一直等待这个位置被填入值,即便在这个空洞之后的位置上有命令,状态机也不会继续执行。