Raft之日志复制的安全性

安全性

安全性是指Raft需要保证每个状态机需要以相同的顺序执行相同的命令。我们前面所说的领导者选举和日志复制的机制并不足以保证这个要求。

选举约束

前面所讲的选举机制,还存在一个问题。例如,当一个跟随者不可用时,领导者提交了几个日志(注:只要有大多数机器存活,raft算法就能正常运转并且保证数据一致性)。然后,这个跟随者从故障中恢复并且被选举为领导者。此时,领导者的日志跟其他跟随者的日志存在冲突。根据前面的日志复制章节,对于这种情况,领导者会强制跟随者复制自己的日志来解决不一致的问题。但是,现在这样做会使得不同服务器的状态机没有以相同的顺序执行相同命令。

所以,对于这种情况,简单的做法就是:不允许这样的跟随者或者候选者称为领导者。
也就是说,新的领导者必须包含所有已提交的日志
也就是说,一个候选者必须包含所有已提交的日志,才能赢得选举
也就是说,RequestVote消息中应该包含候选人的日志信息。如果投票的人发现它的日志比候选人的日志新,它可以拒绝投票

那怎么判断两个日志哪个是最新的呢?通过日志中最后一个日志项的任期和索引来比较。比较过程为:

  • 如果任期不同,那么拥有更大编号任期的日志是最新的。
  • 如果任期相同,那么拥有更大索引的日志是最新的。

基于这个问题,我们对选举过程提出了一个约束:

领导者的完整性:
如果一个日志项在某个任期已经被提交了,那么这个条目一定会出现在更大编号任期内的领导者的日志中。

提交先前任期的日志项

raft中,新的领导者不会提交先前任期的日志(来自先前领导者)。一旦一个来自当前任期的日志项被提交后,(在这个日志项)之前的所有日志项都会被间接提交,因为日志复制章节的日志匹配特性。

相比其他一致性算法,raft算法保持了先前任期日志项的任期,

  • 由于日志项在不同时间、不同日志之间保持相同任期,使得我们更容易推理日志项,使得系统行为可预测。
  • 不需要发送多余的日志项来重新编号先前任期的日志项,减少了网络通信。

安全性证明

  1. 证明领导者完整性。
  2. 由领导者完整性证明状态机安全性。
  3. 状态机安全性 + 按日志索引应用日志 --> 所有状态机以相同的顺序执行相同的命令。

领导者完整性特性

领导者完整性特性:如果某个任期内的某个日志项已提交,那么后面任期的领导者的日志中都会包含这个日志项。

假设 leaderT 在它的任期T内提交了一个日志项,但是这个日志项没有被一些未来任期的领导者存储。假设大于任期 T 的所有任期中,存在一个最小任期 U,它的领导者 leaderU 没有存储这个日志项。

  1. 在选举 leaderU 的时候,它的日志中没有这个已提交的日志项。因为领导者不能删除覆盖或删除自己的日志项。
  2. leaderT 把这个日志项复制给了集群中的大多数服务器,而 leaderU 接收到了集群中大多数服务器投的赞同票。因此,至少有一个服务器即接受了 leaderT 的日志项,也为 leaderU 投了票。这个投票者是达到矛盾的关键点。
  3. 这个投票者一定是先接受了 leaderT 的日志项,再为 leaderU 投了票。如果不是这样的话,这个投票者会拒绝存储 leaderT 的日志项,因为它的当前任期比 leaderT 的当前任期大。相比步骤2,步骤3强调了投票者这两个操作的顺序性
  4. 这个投票者为 leaderU 投票时,它的日志中仍然存储了 leaderT 提交的日志项。因为每个在 [T,U) 的领导者不会移除日志项,跟随者只会移除它们跟领导者冲突的日志。相比步骤3,步骤4强调了投票者投票时的日志内容
  5. 投票者把它的票投给了 leaderU,说明 leaderT 的日志至少是跟投票者是一样新的,也就是说,投票者的日志内容要么跟 leaderT 的日志内容完全一样,要么是 leaderT 日志内容的子集。这个导致了两个矛盾点中的一个。
  6. 首先,如果投票者和 leaderU 的最后一个日志项的任期相同(加上步骤5这个大前提),那么 leaderU 的日志至少跟投票者的日志一样长,所以 leaderU 的日志包含了投票者日志中的每一项。这是个矛盾,因为我们已经假设了leaderU 没有存储这个日志项。
  7. 否则,leaderU 的最后一个日志项的任期大于投票者的。这个日志项的任期是大于 T 的,因为投票者的最后一个日志项的任期至少是 T(从步骤2知道,它包含了任期T内已提交的日志项)。创建 leaderU 最后一个日志项的领导者一定已经包含了任期 T 内已提交的日志项(从假设得知)。然后,根据日志匹配特性,leaderU 的日志一定也包含了这个已提交的日志项,跟假设冲突了。
  8. 因此,所有任期大于 T 的领导者一定包含了任期 T 提交的所有日志项。
  9. 日志匹配特性保证了未来的领导者也将包含那些间接提交的日志项,即大多数服务器存储了这个日志条目,还没有应用到状态机。那么,新的领导者一定是从这些服务器产生,并且他们提交自己任期的日志条目时,也会根据日志匹配特性,一并提交先前任期的日志条目。

状态机安全性

状态机安全性:如果一个服务器已经把某个给定索引的日志项应用到状态机了,那么没有其它服务器会为相同的索引应用不同的日志项。

如果一个服务器应用了某个给定索引的日志项,那么这个日志项一定是已经被提交了的,并且在这个日志项之前,包括这个日志项,服务器的日志和领导者的日志是保持一致的。

根据日志完整性特性,后面任期的领导者也保存了相同的日志项,所以,在后面任期应用这个索引的服务器也会应用同样的值。

不是很理解

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,014评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,796评论 3 386
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,484评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,830评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,946评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,114评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,182评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,927评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,369评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,678评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,832评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,533评论 4 335
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,166评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,885评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,128评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,659评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,738评论 2 351