「有没有想过」,有这么一门课程。他不是简单的念PPT,他的老师是「计算机史上五大黑客之一」的罗伯特·塔潘-莫里斯(RobertTappanMorris);
「有没有想过」,有这么一门课程,他会带你阅读GFS、Map Reduce、RAFT、Big Table论文;
来看看他的四个实验作业题:
❝
基于论文思路,实现一个简单的 MapReduce 框架。这个作业的实现前提是你得了解 Unix Domain socket,知道goalng plugin(也就是动态链接)。 实现一个完整的Raft协议。这部分拆成了三个部分,它会分别让你实现 Leader Election、AppendEntry RPC 和 Raft persist。这一部分将使用提供的类库 labrpc 来完成完整的Raft。【其中, labrpc 是一个模拟网络环境的 rpc 框架,它是基于 UDP实现的(注意)】。 根据自己实现的Raft,写一个KV数据库。同时实现 Raft 协议的 Snapshot RPC。 在之前的作业基础上,为KV数据库实现Sharding分片功能,同时实现 multi Raft功能。 ❞
笔者在看到这部分内容的时候惊为天人。这课程,硬核!
这门课就是MIT6.824,由罗伯特·塔潘-莫里斯教授教学。
❝
MIT 6.824 是一门讲解分布式系统的课程。
课程内容包括Golang的学习、分布式系统研究动机、一致性协议算法(Raft)、著名分布式系统软件论文讲解等的实现机制及实验。
可以说是一门不可多得的实践性质比较强的课程。
❞
虽说这门课程受众主要是MIT研究生,但是笔者认为该课程对有一定工作经验的工程师有着更多的指导意义和参考价值。
他可以帮助工程师对自己的知识体系有一个系统性的整理,如果你恰巧是一个动手能力、自学能力强的人,那么这门课程一定适合你。
学习资料
课程是纯英文的,因此对于大多数人而言可能是比较陡峭的门槛,幸运的是,已经有无私的翻译者提供了人工翻译的版本。
❝
B站地址:MIT 6.824 Distributed Systems Spring 2020 分布式系统 中文翻译版合集
https://www.bilibili.com/video/BV1x7411M7Sf?p=5
❞
除此之外,官方课件的地址在这里,包括了上文提到的四个实验:
❝
6.824 Schedule:Spring 2022
https://pdos.csail.mit.edu/6.824/schedule.html
❞
Raft作业难度高?不要怕,这里已经有网友贡献的学生作业指南:
❝
Raft学生指南:一 https://zhuanlan.zhihu.com/p/200903182
Raft学生指南:二 https://zhuanlan.zhihu.com/p/203279804
Raft学生指南:三 https://zhuanlan.zhihu.com/p/205315037
❞
Raft算法不好理解,不够直观?我想这两个可视化呈现Raft算法的网站是你想要的:
❝
https://raft.github.io/ 在该页面的Raft Visualization部分,提供了一个可交互的Raft集群,你可以与该Raft集群进行交互以理解算法。
http://thesecretlivesofdata.com/raft/#intro 动画呈现Raft算法的主要细节与设计思想
https://github.com/maemual/raft-zh_cn/blob/master/raft-zh_cn.md Raft论文中文版:寻找一种易于理解的一致性算法
❞
除了课程本身外,如果你还觉得卷地不够爽,那么推荐一本书,可以搭配这门课程一起看,那就是经典的:《DDIA》,全名是《Design Data-Intensive Application》,中文翻译版本名为:「《数据密集型应用系统设计》」。
笔者曾经在工作早期看过几页,奈何功力不够,且内容硬核,遂放弃。现在笔者准备捡起来,努力往后看。
如果确实没有很多时间看视频,也没有关系,已经有大佬把视频内容用文字+图片方式整理出来,以gitbook方式分享了出来。
❝
MIT 6.824 文字+图片整理版本 https://mit-public-courses-cn-translatio.gitbook.io/mit6-824/
❞
作者将每一节课拆分成若干小节翻译并整理出来,在翻译的同时还加入了自己的理解,可以说是相当诚意的作品了。
上几张图简单感受一下:
学习建议
简单说一下学习建议。
论文是一定得读的!论文是一定得读的!论文是一定得读的!
重要的话说三遍,因为课堂上,莫里斯教授是以思路讲解和答疑为主的,这都是建立在提前阅读了相关论文资料的前提上开展的,如果压根没有读过相关的论文,那么我相信基本上就是在听天书了。
论文的英文版PDF都能够在课程官网下载到,相关的中译版本也都能通过搜索找到,这里笔者就不提供了,相信有能力的读者都能够自己解决。
课程的schedule页面在 https://pdos.csail.mit.edu/6.824/schedule.html,该页面上提供了所有必需的课程资料链接、论文pdf,以及lab作业的资料,甚至是课程视频,都有链接,读者可以按需求下载。
关于LAB作业
关于如何完成作业,及视频中提到的LAB,笔者简单提供几点建议。
笔者看的版本为2020版本,它的开发语言为Golang
,需要学习者提前学习一些go的语法和必需的概念知识。因此开发环境一定需要安装go。莫里斯教授在课堂上也对go语言的设计思想进行了讲解,可以作为参考。
快速学习上手go语言,可以使用以下线上学习指南,你可以在页面上直接写代码并看到直观的运行效果。
❝
https://tour.go-zh.org/welcome/1
❞
操作系统建议使用类Unix
环境(linux、mac均可),使用Windows
需要你做额外的工作以去除环境相关的依赖,既繁琐又不一定保证成功。
建议使用Goland
作为IDE
开发环境,笔者是坚定的JetBrains粉。
结语
题目本身是一种调侃,卷八股文也没什么坏处,尤其是对于换工作的同学而言。
但是从长期看,我们还是需要整理一下自己的知识体系,通过学习一些优秀的论文、课程,做一些有代表性的练习来夯实基础。我想,这应当是破除程序员中年诅咒的方式之一吧。
废话不多说,让我们以梦为马,不负韶华。
学就对了!
(后续笔者也会不定时地发表MIT6.824相关的学习笔记和心得,同时欢迎公众号读者积极投稿,共同交流成长。)
文章评论