MIT 6.824 Lab3B笔记
Lab3B总结
3B的主要目标是给我们基于raft的kvserver增加快照支持,而底层raft的快照我们在2D已经实现了,这次lab的任务就是使用我们的raft底层功能作为支撑,让kvserver能够接受来此底层raft的snapshot install,以及能够在整个raft日志开始变得过大时发送自己状态机作为snapshot给底层raft(因为需要raft将其持久化,以便故障恢复后能发回给上层的kvserver),好让它丢弃之前的日志来自我瘦身。
其实lab 3B的实现思路并不复杂,但由于2D没做好,3B的测试测出来很多底层raft snapshot功能的bug,于是又回去对2D的代码进行了不小的修改。整个lab前前后后断断续续竟花了快一个月。。。具体的复杂性就不赘述了,在下面记录一下测试结果,就算是把整个MIT 6.824的lab暂时完结了,讲道理lab 4作为6.824的期末项目,应该咬咬牙做完它的,但考虑到接下来就要开始新工作了,想想之前每个lab的平均耗时,还是先不开坑为妙,或许将来会重新把它完结掉吧。
总的来说,6.824的Lab确实不负盛名,质量极高。
整体上来说,整个raft系列(2a~)充满了“设计感”——先让学生实现raft最重要的功能:实现选举和日志追加,然后在其之上做快照压缩和的leader跳跃发送日志的优化,等学生完整实现好自己的raft library后,再让他们基于它来实现自己的分布式键值存储服务。如此一来,学生得以循序渐进、自下往上地深入理解分布式系统的内部实现和原理。
具体到每个Lab,它们的guide都写得十分具体清晰,测试更是可以看出授课团队的用心——他们甚至实现了kvraft测试结果的可视化来让学生更方便的debug(虽然我没怎么用上,测试用例到最后都太复杂,可视化了也理不清):
从TA的blog可以管中窥豹出,这门课自己本身是有积累的,授课团队每年根据学生的反馈和作业情况,不断地改进lecture和lab,比如说最近几年,把分布式算法从paxos改为更容易理解的raft,让整个lab的难度曲线平缓了不少。
不得不说,MIT 6.824让我稍稍体会到了CS名校的深厚教育功底,以及教育课程设计的精妙之处,虽然UCSD的CS课也不差,但整体而言还是给了我不少惊艳。十分感谢Robert Morris以及6.824的授课团队,让这么好的课程免费对外公开。在往后的程序员生涯中,在工作之外倘若能坚持一门一门地学习这些由名校公开的cs课,想必受益匪浅,接下来的任务便是,趁着还没上班,赶紧找下一门好课吧。
Lab3B 测试结果
|
|