设为首页|收藏本站|
开启左侧

[问答] mit6.824 Lab2 总结

[复制链接]
26095 0
爱心痛的那一刻 发表于 2022-2-10 17:50:47 | 只看该作者 打印 上一主题 下一主题
 
前言

mit6.824的lab2一共写了两次,第一次写的时候由于实现方式有很多不足,导致代码写的非常复杂,写到一半就弃疗了,后来在参考了一些文章博客之后终于重新写完了lab2,这里总结一下实现lab2过程中碰到的各种问题以及参考的资料。
参考资料

第一个网址里有4个lab核心的代码以及代码解释
第二个网址里是4个lab中常见的一些错误
这里特别感谢 @谭新宇 在GitHub上的文档以及相关的知乎回答
如果对于go的mutex,Cond,channel,timer等概念并不熟悉,建议先简单参考一下别人的代码框架,主要关注不同的线程之间如何通信以及如何上锁等。
因为上述资料写的很详细,这里就不额外介绍Lab2的实现方式了,主要讲一下在完成实验过程中碰到的几个问题
Lab2问题汇总


  • 不要区别对待Heartbeat和正常的AppendEntriesRPC
    在Raft的论文中,Heartbeat是通过AppendEntriesRPC传递0个LogEntries实现的,由于Lab2中2A部分只需要heartbeat,所以很有可能RPC的接收端会有针对Heartbeat的特判(比如发现RPC为Heartbeat则直接返回成功或者失败),此时要么对于Heartbeat设计单独的Response handler,要么删除RPC为heartbeat的特判。原因在于AppendEntriesRPC的功能除去日志复制,还有更新Leader的nextIndex,matchIndex等功能。因此,针对Heartbeat的特判有可能导致Leader有错误的nextIndex,matchIndex。
  • 只有发现Leader与Follower不一致时才删除Follower的日志
    在实现lab2时写出过如下2行代码
// ...
rf.logs = rf.logs[:PrevIndex]
rf.logs = append(rf.logs, newLogEntries...)
// ...
     以上代码是AppendEntriesRPC接收端的一部分,此处的PrevIndex表示Leader与Follower匹配的日志位置,newLogEntries表示要从Leader同步到Follower的新日志。作用就是Follower发现Leader要从PrevIndex的位置写入新的日志,那么首先删除后方的日志,再写入新的日志。这种写法看似合理,但是由于AppendEntriesRPC可能是Heartbeat,会导致Follower删除了原本已经和Leader同步的日志。
    因此可以改成如下写法,确保只有有冲突时才删除Follower的日志
for index, entry := range newLogEntries {
        if entry.Index-firstIndex >= len(rf.logs) || rf.logs[entry.Index-firstIndex].Term != entry.Term {
                rf.logs = rf.logs[:entry.Index-firstIndex]
                rf.logs = append(rf.logs, newLogEntries [index:]...)
                break
        }
}3. 不处理所有Term不一致的RPC回复
有可能某个Server发出RPC且收到回复前就变更了状态(Term发生变化),此时直接不处理这部分RPC
4. nextIndex的快速回退
如果完全按照论文中的方式实现raft会发现lab2C一个叫做Figure8(unreliable)的测试点无法通过,打印运行时的状态会发现,该测试点的测试数据会使得不同的server之间有上百个日志不匹配,最终不能在测试时间内使不同server之间达成一致。优化方式请参考上文资料Students' Guide to Raft An aside on optimizations
5. CommitIndex的更新

mit6.824 Lab2 总结 第1张图片

Raft Figure 2

上图为Raft论文图2AppendEntries的第5条,之前一直错误的认为last new entry表示Follower的最后一个log entry。但是结合错误2会发现这样的理解是错的,这里的last new entry表示的是AppendEntriesRPC中发来的所有日志里的最后的一个日志。


上一篇:美籍+台胞证赴美回国攻略
下一篇:麻省理工大学等美国知名大学正教授收入怎么样?真的只有 ...
@



1.西兔生活网 CTLIVES 内容全部来自网络;
2.版权归原网站或原作者所有;
3.内容与本站立场无关;
4.若涉及侵权或有疑义,请点击“举报”按钮,其他联系方式或无法及时处理。
 
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

排行榜
活跃网友
返回顶部快速回复上一主题下一主题返回列表APP下载手机访问
Copyright © 2016-2028 CTLIVES.COM All Rights Reserved.  西兔生活网  小黑屋| GMT+8, 2024-5-23 11:32