MIT6.824 分布式系统课程总结 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
wuYin
V2EX    分享创造

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

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

    课程目标

    从 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  
    OP
       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  
    OP
       2019-06-16 23:29:37 +08:00 via Android
    @0044200420 Lab2C 网络延迟会导致 RPC 请求乱序,论文里没明说。忽视了这点让我卡了两星期……好在看了助教的文章得到指点,其实课程 QA 也有提到,认真阅读讲义才是~
    wuYin
        8
    wuYin  
    OP
       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  
    OP
       2019-06-17 09:25:32 +08:00
    @leonme 希望有所帮助~
    auxox
        11
    auxox  
       2019-06-17 10:02:26 +08:00
    赞~
    wuYin
        12
    wuYin  
    OP
       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  
    OP
       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  
       2020-12-18 20:51:11 +08:00
    lz,请问可以给一份源码吗? raft 实现部分有些地方做不来,思路不清晰。想参考下怎么写的
    luckykev1n
        18
    luckykev1n  
       2021-01-28 09:26:46 +08:00
    看了下 2020 年的 MIT6.824 ,LAB1 没有要求倒排索引和 merge 所有 reduce 的结果,给学生减压了哈哈哈
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5400 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 29ms UTC 07:34 PVG 15:34 LAX 00:34 JFK 03:34
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86