Raft 作者亲自出的 Raft 试题,你能做对几道?

用户头像
多颗糖
关注
发布于: 2020 年 10 月 25 日
Raft 作者亲自出的 Raft 试题,你能做对几道?

1.(4 分)下面的每张图都显示了一台 Raft 服务器上可能存储的日志(日志内容未显示,只显示日志的 index 和任期号)。考虑每份日志都是独立的,下面的日志可能发生在 Raft 中吗?如果不能,请解释原因。



a



b



c



d



2.(6 分)下图显示了一个 5 台服务器集群中的日志(日志内容未显示)。哪些日志记录可以安全地应用到状态机?请解释你的答案。





3.(10 分)考虑下图,它显示了一个 6 台服务器集群中的日志,此时刚刚选出任期 7 的新 Leader(日志内容未显示,只显示日志的 index 和任期号)。对于图中每一个 Follower,给定的日志是否可能在一个正常运行的 Raft 系统中存在?如果是,请描述该情况如何发生的;如果不是,解释为什么。





4.(5 分)假设硬件或软件错误破坏了 Leader 为某个特定 Follower 存储的 nextIndex 值。这是否会影响系统的安全?请简要解释你的答案。



5.(5 分)假设你实现了 Raft,并将它部署在同一个数据中心的所有服务器上。现在假设你要将系统部署到分布在世界各地的不同数据中心的每台服务器,与单数据中心版本相比,多数据中心的 Raft 需要做哪些更改?为什么?



6.(10 分)每个 Follower 都在其磁盘上存储了 3 个信息:当前任期(currentTerm)、最近的投票(votedFor)、以及所有接受的日志记录(log[])。

a. 假设 Follower 崩溃了,并且当它重启时,它最近的投票信息已丢失。该 Follower 重新加入集群是否安全(假设未对算法做任何修改)?解释一下你的答案。

b. 现在,假设崩溃期间 Follower 的日志被截断(truncated)了,日志丢失了最后的一些记录。该 Follower 重新加入集群是否安全(假设未对算法做任何修改)?解释一下你的答案。



7.(10 分)如视频中所述,即使其它服务器认为 Leader 崩溃并选出了新的 Leader 后,(老的)Leader 依然可能继续运行。新的 Leader 将与集群中的多数派联系并更新它们的任期,因此,老的 Leader 将在与多数派中的任何一台服务器通信后立即下台。然而,与此期间,它也可以继续充当 Leader,并向尚未被新 Leader 联系到的 Follower 发出请求;此外,客户端可以继续向老的 Leader 发送请求。我们知道,在选举结束后,老的 Leader 不能提交(commit)任何新的日志记录,因为这样做需要联系选举多数派中的至少一台服务器。但是,老的 Leader 是否有可能执行一个成功 AppendEntries RPC,从而完成zai选举开始前收到的旧日志记录的提交?如果可以,请解释这种情况是如何发生的,并讨论这是否会给 Raft 协议带来问题。如果不能发生这种情况,请说明原因。



8.(10 分)在配置变更过程中,如果当前 Leader 不在 C-new 中,一旦 C-new 的日志记录被提交,它就会下台。然而,这意味着有一段时间,Leader 不属于它所领导的集群(Leader 上存储的当前配置条目是 C-new,C-new 不包括 Leader)。假设修改协议,如果 C-new 不包含 Leader,则使 Leader 在其日志存储了 C-new 时就立即下台。这种方法可能发生的最坏情况是什么?



欢迎关注我的公众号,查看答案。





"Paxos/Raft user study" by Diego Ongaro and John Ousterhout is licensed under CC BY 4.0



发布于: 2020 年 10 月 25 日 阅读数: 8
用户头像

多颗糖

关注

还未添加个人签名 2018.05.18 加入

还未添加个人简介

评论

发布
暂无评论
Raft 作者亲自出的 Raft 试题,你能做对几道?