V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
wuYin
V2EX  ›  分享创造

MIT6.824 分布式系统课程总结

  •  9
     
  •   wuYin · 2019-06-16 22:36:42 +08:00 · 11004 次点击
    这是一个创建于 865 天前的主题,其中的信息可能已经有所发展或是发生改变。

    课程目标

    从 MapReduce 计算模型入门,到实现 Raft 一致性算法,并进一步构建容错的分布式 kvDB

    课程结构

    6.824 是 MIT 开设的分布式系统课程,主页:https://pdos.csail.mit.edu/6.824/schedule.html,课程共计 22 节,每堂课都有 lecture 讲义、Paper 阅读及 FAQ 答疑。

    课程有 4 个 Lab 实验:

    • Lab1 MapReduce:熟悉分布式基础概念

      阅读论文并梳理 MR 模型的执行流程,实现单机版、分布式版的 word count,最后使用模型来生成倒排索引。

    • Lab2 Raft:分三个模块实现 Raft 一致性算法

      • 2A Leader Election:实现 leader 选举和心跳通信,处理好网络分区、多节点失效及 split vote
      • 2B Log Replication:实现日志复制和一致性检查,在少部分节点失效时依旧能 commit 日志,并解决好日志冲突。
      • 2C Network Unavailable:实现节点状态的持久化和重启读取,应对 RPC 请求乱序、延迟甚至丢失的网络环境、节点频繁崩溃和重启的情况。
    • Lab3 kvDB:基于 Raft 实现线性一致的分布式容错 kv 数据库

      • 3A:基于 Raft 库保证在并发请求下数据的线性一致性,处理 RPC 超时重试,实现请求去重等逻辑。
      • 3B:实现 Raft 的日志压缩及数据快照,实时监测日志大小并剪切,切换 RPC 加速日志回放。
    • Lab4 Sharded kv:实现 Raft 的 Membership Change 配置更新,构建 kvDB 集群。实现中 …

    每个 Lab 的环境代码都有注释提示,都有写好的单元测试,目标是每个测试跑 go test -race -count 多次都能 pass

    课程难点

    论文阅读

    MR、Raft 等 lab 相关的论文要反复阅读,尤其是 Raft 论文的图 2,一定要把每个细节理解透彻。

    调试代码

    坑真的非常多。所以写代码前认真阅读 Lecture 并思考,参考其中的 Hint 提示,阅读课程对 Raft 结构的解析。此外,课程助教写的 Students' Guide to Raft 值得参考。

    课程笔记

    目前我只完成前三个 Lab,工作之余耗时近三个月。实验遇到的坑记录在了博客,希望有所帮助:

    自己也想在分布式存储方面多折腾,感兴趣的同学可以一起交流,共同进步:aW1hZ2VzLnlpbnppZ2UuY29tL21lLmpwZWc=

    18 条回复    2021-01-28 09:26:46 +08:00
    xiaoyaocmx
        1
    xiaoyaocmx   2019-06-16 22:53:37 +08:00
    这个课貌似需要相关的先修知识?讲义怎么打开是 txt ……
    wuYin
        2
    wuYin   2019-06-16 23:04:30 +08:00 via Android
    @xiaoyaocmx 掌握 Go 基础语法,了解 IPC 通信。讲义和 FAQ 都是纯文本,重在内容~
    jiezhi
        3
    jiezhi   2019-06-16 23:07:44 +08:00 via iPhone
    收藏先,明天起来有空看看
    abelce
        4
    abelce   2019-06-16 23:07:51 +08:00 via iPhone
    我以前也学过 但是后来链接失效了,今天终于又看到了
    wisej
        5
    wisej   2019-06-16 23:18:56 +08:00 via Android
    棒~两个月前完成了 LAB1,然后就搁置了
    0044200420
        6
    0044200420   2019-06-16 23:19:56 +08:00
    lab 2b 我卡了 1 个月。。
    wuYin
        7
    wuYin   2019-06-16 23:29:37 +08:00 via Android
    @0044200420 Lab2C 网络延迟会导致 RPC 请求乱序,论文里没明说。忽视了这点让我卡了两星期……好在看了助教的文章得到指点,其实课程 QA 也有提到,认真阅读讲义才是~
    wuYin
        8
    wuYin   2019-06-16 23:34:01 +08:00 via Android
    @wisej lab2 和 lab3 都挺有意思,做完收获挺大的,加油~
    leonme
        9
    leonme   2019-06-17 08:57:43 +08:00 via Android
    很棒~希望 v2 多一些这样的帖子
    wuYin
        10
    wuYin   2019-06-17 09:25:32 +08:00
    @leonme 希望有所帮助~
    auxox
        11
    auxox   2019-06-17 10:02:26 +08:00
    赞~
    wuYin
        12
    wuYin   2019-06-17 17:39:23 +08:00
    @auxox 多谢鼓励~
    petelin
        13
    petelin   2019-06-18 09:25:58 +08:00 via iPhone
    感觉很不错 我是自己学的 raft 可以入坑系统在学下 多谢
    wuYin
        14
    wuYin   2019-06-18 09:57:06 +08:00
    @petelin 赞~ 做 lab 卡住了可参考助教的博客,记录了大部分学生都会犯的错:

    https://thesquareplanet.com/blog/students-guide-to-raft
    forever139
        15
    forever139   2019-06-19 14:26:46 +08:00
    正想学习下这个方向,赞一个👍 。
    wlgq2
        16
    wlgq2   2019-11-19 16:42:41 +08:00
    吐槽下,我卡在 RPC 请求乱序,私以为不太合理,合理的网络程序,同一个 socket 总是唯一线程访问,只要写如 TCP 缓存数据没有交叠,TCP 只会延时,不会乱序。
    jackgoudan
        17
    jackgoudan   314 天前
    lz,请问可以给一份源码吗? raft 实现部分有些地方做不来,思路不清晰。想参考下怎么写的
    luckykev1n
        18
    luckykev1n   273 天前
    看了下 2020 年的 MIT6.824 ,LAB1 没有要求倒排索引和 merge 所有 reduce 的结果,给学生减压了哈哈哈
    关于   ·   帮助文档   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   1065 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 21:44 · PVG 05:44 · LAX 14:44 · JFK 17:44
    ♥ Do have faith in what you're doing.