MIT6.824课程的简介以及学习的原因

MIT6.824

MIT6.824是一门对于分布式系统的讲解和实验的课程。

课程自述

1
2
3
4
5
6
7
6.824 is a core 12-unit graduate subject with lectures, readings, programming labs, an optional project, a mid-term exam, and a final exam.
It will present abstractions and implementation techniques for engineering distributed systems.
Major topics include fault tolerance, replication, and consistency. Much of the class consists of studying
and discussing case studies of distributed systems.

翻译:
6.824是一门集合了讲座、阅读、编程实验、附加课程、中期考试和期末考试的课程。他会展示能够为构建一个分布式系统的抽象和实现的技巧。本课程主要讨论的是容错、副本冗余、以及一致性相关的问题。大部分的课程都是由学习和讨论分布式系统的案例来组成的。

因此MIT6.824是一门学习分布式系统的一门比较好的课程。

所需能力

完成了整个实验之后,我总结了一下学习整个过程所需要的基础的能力(在后面的文章中也会继续提及到,此处只是为了做一个简单的Summary)

  1. 阅读论文的能力
    阅读论文不仅仅是快速阅读论文,掌握大意的能力,并且需要当实现遇到问题时,回顾论文是否能够找出代码实现中与论文描述的细节中是否一致的能力

  2. 根据日志进行Debug的能力
    因为在此实验中,Debug是不可能使用Ide来进行大量的打点操作来进行Debug。(实验中会有多个实例并且可能会出现多个并发操作的情况)因此需要学会在运行项目给的测试中去尝试打有用的Log来进行Debug。

此外,还需要在脑中浮现出一个整个代码运行的逻辑图和实际代码执行的走向图的对比(如果暂时没用这种能力的话,可以先用纸和笔全部把它画出来。俗话说的好:好记性不如烂笔头),这样能快速定位到代码的问题可能会在哪一部分出现问题。

  1. 耐心&细致
    因为这其实是我第二次做这个实验,第一次只是做完lab2就已经放弃了。究其原因,一个很重要的部分是之前并没有仔细的阅读lab代码中的上面的很多注释和MITLab实验页的上面的Hint和注意的点。所以先把那些全部看完,然后全局思考完成之后再开始动手写代码的实现。

并且遇到困难的时候,跑到失败的TestCase上面去详细的Debug问题是什么原因。本实验中可能出现很多的实现问题是与锁和Go Channel的使用相关的问题。

课程中需要实现的代码

  1. 完成简易版的MapReduce
  2. 根据论文完成Raft的协议的实现(工业版的实现可以查看(2)Tikv和(3)Etcd上面的实现)
  3. 基于2中的Raft共识层,实现一个简易版的带副本冗余的KV数据库
  4. 基于2中的Raft共识层,实现一个带调度的Multi-raft的简易实现

ShareNote:

  1. HomePage for MIT6.824
  2. tikv
  3. etcd
  4. 知乎上关于分布式课程的推荐
  5. 知乎上关于学习MIT6.824的建议