Raft(4)— 安全性的证明

2018-03-15  本文已影响0人  lqsss

Raft的特性

Raft 在任何时候都保证以上的各个特性。

如何保证特性的

状态机安全特性

最后来讲下这个安全特性的保证

如果某个日志条目在某个任期号中已经被提交,那么这个条目必然出现在更大任期号的所有领导人中

证明

如果 S1 (任期 T 的领导者)提交了一条新的日志在它的任期里,然后 S5 在之后的任期 U 里被选举为领导人,然后至少会有一个机器,如 S3,既拥有来自 S1 的日志,也给 S5 投票了。

文中是通过反证法先证明了领导人完全特性,然后证明安全性。

假设

我们假设领导人完全性特性是不存在的,然后我们推出矛盾来。假设任期 T 的领导人(领导人 T)在任期内提交了一条日志条目,但是这条日志条目没有被存储到未来某个任期的领导人的日志中。设大于 T 的最小任期 U 的领导人 U 没有这条日志条目。

反证领导人完全特性

  1. 由于假设,领导人完全性特性不存在的。term U的领导人S5没有term U的日志条目,收到了来自至少一个拥有term T的日志条目的一T票(图中的S3)
  2. 根据另外一个假设,大于 T 的最小任期 U 的领导人 U 没有这条日志条目。也就是说再[T...U)之间的领导人都是存在term T的该日志的,U是没有此日志的。
  3. 投票者把自己选票投给领导人 U 时,领导人 U 的日志必须和投票者自己一样新。这就导致了两者矛盾。
  1. 如果voter和U的最后的term相同,那么leader U则至少在最后的term的日志和voter的一样长,即包含了leader T提交的log entry;
  2. 如果voter和U的最后的term不相同,那么U的必定大于voter的,则leader U必须包含term T的所有日志,因为U > T;(日志匹配原则)
  1. 因此,假设不成立,不可能存在term U,使得term U中的leader不包含之前leader已经提交过的log entry。

安全性证明

现在我们来考虑在任何一个服务器应用一个指定索引位置的日志的最小任期;领导人完全特性保证拥有更高任期号的领导人会存储相同的日志条目,所以之后的任期里应用某个索引位置的日志条目也会是相同的值。因此,状态机安全特性是成立的。

最后,Raft 要求服务器按照日志中索引位置顺序应用日志条目。和状态机安全特性结合起来看,这就意味着所有的服务器会应用相同的日志序列集到自己的状态机中,并且是按照相同的顺序。

上一篇 下一篇

猜你喜欢

热点阅读