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

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

  •  3
     
  •   wuYin · 177 天前 · 2962 次点击
    这是一个创建于 177 天前的主题,其中的信息可能已经有所发展或是发生改变。

    课程目标

    从 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=

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

    https://thesquareplanet.com/blog/students-guide-to-raft
        15
    forever139   174 天前
    正想学习下这个方向,赞一个👍 。
        16
    wlgq2   21 天前
    吐槽下,我卡在 RPC 请求乱序,私以为不太合理,合理的网络程序,同一个 socket 总是唯一线程访问,只要写如 TCP 缓存数据没有交叠,TCP 只会延时,不会乱序。
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   4339 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 19ms · UTC 01:45 · PVG 09:45 · LAX 17:45 · JFK 20:45
    ♥ Do have faith in what you're doing.