V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
duduscript
V2EX  ›  程序员

有没有在刷 MIT 6.824 分布式系统 的朋友?

  •  1
     
  •   duduscript · 2017-05-04 04:41:44 +08:00 · 17529 次点击
    这是一个创建于 2521 天前的主题,其中的信息可能已经有所发展或是发生改变。
    有没有在刷 MIT 6.824 分布式系统的朋友,这门课的 lab 和论文 list 都挺有难度(大神请无视。。。),想和别人交流又没有环境,课程也不允许去看别人的代码,不知道有没有在刷这门课的朋友,大家建了群一起交流。

    http://nil.csail.mit.edu/6.824/2017/index.html
    46 条回复    2020-05-27 00:50:01 +08:00
    ryd994
        1
    ryd994  
       2017-05-04 04:48:26 +08:00 via Android
    没上过这门公开课,但我去年学过相关的课程
    lsmgeb89
        2
    lsmgeb89  
       2017-05-04 05:27:07 +08:00 via Android
    MIT 的很难,作业全是证明
    bxgty
        3
    bxgty  
       2017-05-04 06:44:07 +08:00
    lab 改成 raft 之前刷过一部分。
    按说 github 上面会有人发代码的啊,lz 可以参考的。
    yuyueMJ
        4
    yuyueMJ  
       2017-05-04 08:08:59 +08:00 via iPhone
    同想!
    lyief
        5
    lyief  
       2017-05-04 09:22:42 +08:00
    有公开的课程视频吗? youtube 上貌似只有一个很久之前的。
    iHge2k
        6
    iHge2k  
       2017-05-04 09:32:59 +08:00
    做过 15 年的 6.824
    skyitachi
        7
    skyitachi  
       2017-05-04 09:47:24 +08:00
    话说你学到哪了,我目前只刷了 mapreduce 那块,群在哪。。。
    djx339
        8
    djx339  
       2017-05-04 09:47:37 +08:00
    我在做 17 年的,不过我一边上班一边学,进度比较慢, 两三周了刚把 lab1 做完.
    djx339
        9
    djx339  
       2017-05-04 09:56:16 +08:00
    同问, 群在哪........
    PhilC
        10
    PhilC  
       2017-05-04 10:18:21 +08:00
    我刷完了,代码放在 github 被 mit 的人看到,要求我给删了😄
    duduscript
        11
    duduscript  
    OP
       2017-05-04 13:11:21 +08:00 via iPhone
    @skyitachi 您好,我 lab1 搞定了,目前在做 lab2,对论文的一些细节不太理解,想找人讨论。还有其他的一些关于论文方面的理解感觉也不是非常好,如果可以的话我可以建一个 QQ 或者微信群
    duduscript
        12
    duduscript  
    OP
       2017-05-04 13:12:06 +08:00 via iPhone
    @djx339 我也是把 lab1 搞定在啃 raft,没有群,我可以建一个
    skyitachi
        13
    skyitachi  
       2017-05-04 13:14:03 +08:00 via iPhone
    @duduscript 可以啊,一起讨论讨论很不错,弄个 GitHub repo 以 issue 的方式搞吧
    duduscript
        14
    duduscript  
    OP
       2017-05-04 13:15:59 +08:00 via iPhone
    @skyitachi 这也可以,这样大家把自己的问题发上来,然后一起解决?
    jukka
        15
    jukka  
       2017-05-04 13:21:20 +08:00
    这个有老师上课的视频么。?
    duduscript
        16
    duduscript  
    OP
       2017-05-04 13:24:26 +08:00
    @jukka @lyief 上课是讲论文,每周 1 到 2 篇,油管上边有,但没有字幕(英语的也没有)
    duduscript
        17
    duduscript  
    OP
       2017-05-04 13:25:36 +08:00
    @bxgty 这门课上强调了不要看别人的实现,我觉得按照他的要求来比较好,最后实在写不好再去看代码
    954880786
        18
    954880786  
       2017-05-04 14:13:34 +08:00 via iPhone
    资兹建一个 qq 群
    duduscript
        19
    duduscript  
    OP
       2017-05-04 14:22:45 +08:00
    @954880786 已经建好群 群号:575983415
    jukka
        20
    jukka  
       2017-05-04 14:43:12 +08:00   ❤️ 1
    没有字幕问题不大,应该就是这个没跑了。

    https://www.youtube.com/playlist?list=PLpl804R-ZwjKCOwWpTZ21eeaBS3uBrMfV

    楼主 Good !
    最近在玩 Elixir,一直觉得应该学一门理论知识课作为知识框架把东西串起来。:)
    zhangyifei216
        21
    zhangyifei216  
       2017-05-04 18:40:30 +08:00
    @duduscript 我正在学习,可以相互督促
    tinylcy
        22
    tinylcy  
       2017-05-04 18:47:20 +08:00
    刚做完 Lab 1,写了篇博客: http://tinylcy.me/2017/05/03/6-824-Lab-1-MapReduce/
    lins05
        23
    lins05  
       2017-05-04 22:39:37 +08:00
    路过, CMU 这门 advanced distributed system 列出的 paper 也挺全的 https://www.cs.cmu.edu/~15712/syllabus.html
    bxgty
        24
    bxgty  
       2017-05-05 09:09:36 +08:00
    @duduscript 我倒觉得没关系。重点是看别人的代码不是为了过 test,而是看看和自己的思路有什么不一样。
    另外,如果实在是不想看别人 Raft 代码,可以先写写以前 Paxos 的作业~
    erenno1
        25
    erenno1  
       2017-05-05 10:36:58 +08:00
    之前完成到 Lab3A 了,感觉还是很过瘾的
    duduscript
        26
    duduscript  
    OP
       2017-05-05 12:27:07 +08:00
    @lins05 thx!
    duduscript
        27
    duduscript  
    OP
       2017-05-05 12:28:48 +08:00
    @erenno1 raft 实现我有几个点有点模糊,可以交流下 raft 论文里边的一些实现细节吗!?
    erenno1
        28
    erenno1  
       2017-05-05 17:09:56 +08:00
    @duduscript
    可以说出来听听。

    我的经验是很多问题多读几遍论文。
    多读几遍他们写的 advice https://thesquareplanet.com/blog/students-guide-to-raft/ 基本就清楚了。
    另外就是并发的问题仔细想清楚。
    duduscript
        29
    duduscript  
    OP
       2017-05-05 19:05:12 +08:00
    @erenno1 目前实现 lab2 中有几个点还是不清晰,比如 server 的 commitIndex 和 lastApplied 的区别,RequestVoteRPC 中的 lastLogTerm 和 term 的具体是哪一个,还有比较 candidate 的 term 为什么是 term>=currentTerm,而不是 term>currentTerm...
    duduscript
        30
    duduscript  
    OP
       2017-05-05 19:06:25 +08:00
    @erenno1 我感觉可能是我论文还是没完全看懂,但我带问题去找也没有找到具体的 point...
    erenno1
        31
    erenno1  
       2017-05-05 20:01:23 +08:00
    @duduscript
    1. commitIndex 只是代表这个 index 已经被总数过半确认了,并不代表着写入 state machine,工程实现上 apply 可以批量完成,不用太纠结在这里
    2. lastLogTerm 就是当前 replica 的日志中最后一个 entry 的 term,这个 term 小于等于 replica 的 current_term ;以保证选出的 leader 肯定持有已经 commit 的 log entry
    3. 很明显去掉等于也是可以的,但是等于的意义在于可以让投票尽快完成(不浪费投票权);为什么这么说呢? 因为票是否投出是由 term + votefor 一起决定的,term 的增长有两种方式,一种是自己加 1 变成 candidate 去选举,此时 votefor 等于自己,意味着自己先投自己一票;另一种情况是 term 通过接收心跳( AppendEntries )和投票请求( RequestVote )发现了比自己 term 更大的 term 而发生的增长,要知道收到了 RequestVote,即要满足 term >= currentTerm 同时又要满足 LogUpToDate 才会真正投赞成票,更新 voteFor ;试想如果只是 term>currentTerm, logUpToDate 不满足,那就意味着只更新了自己的 term,后续针对这个 term 是依然有投票权的,因为 voteFor 没有更改;


    3 的不理解是因为你还没有理解 2 ( LogUpToDate )的意义。
    erenno1
        32
    erenno1  
       2017-05-05 20:01:53 +08:00
    @duduscript
    再多读几遍,打日志调试调试就理解了
    erenno1
        33
    erenno1  
       2017-05-05 20:03:45 +08:00
    @duduscript
    针对 2 补充一下:LogUpToDate 的意义是用以保证选出的 leader 肯定持有已经 commit 的 log entry,否则 failover 就丢数据了
    duduscript
        34
    duduscript  
    OP
       2017-05-05 20:36:12 +08:00
    @erenno1 Orz..
    duduscript
        35
    duduscript  
    OP
       2017-05-05 20:44:04 +08:00
    @erenno1 3 我明白了
    对于 2,我可不可以这么理解,其实 term 也有 commit 和没有 commit 的区别
    比如一个成为 candidate 的 follower,他的 term 会+1,+1 以后的 term 就是 lastLogTerm,这个 term 是没有 commit 的 term,而 commit 的 term 是要小于 lastLogTerm 的
    erenno1
        36
    erenno1  
       2017-05-05 22:07:58 +08:00
    @duduscript
    刚下班路上想了下问题 1,我先再补充一下 1 吧。 如果将 commitIndex 和 lastApplied 合二为一的话,新的达成一致的 log entry 可能会需要阻塞等待前一个 log entry apply 结束(落盘)然后才能记录下来该 entry 已经达成一致了(即总数过半已经同步)才能响应客户端请求,而且等待的时候如果发生宕机之类的事情,会导致该 entry 的状态不明确,虽然日志不会丢失,但是需要后续 client 重试来确认该 entry 是提交。 毕竟 raft 是给出明确的实现方案的一致性算法,这里的 commitIndex 不是必须的,但是是一种高质量的优化。nextindex 也是一种优化;

    以上是我的理解,供参考
    erenno1
        37
    erenno1  
       2017-05-05 22:14:45 +08:00
    @duduscript

    2 这样理解是不对的,假设当前一个 replica 为 S1 是 folower,其 current term 是 7, 假设当前的 leader 向 S1 成功同步日志,leader 的 current term 也是 7,所以 S1 的 last log entry 里的 term 一定是 7,对应的 index 是 10

    之后 leader 挂了,S1 变成 candidate,current term + 1 为 8,这时发送 requestVote 的时候,需要告诉投票人当前的 current term 是 8 (即参数 term ),同时告诉对方 LastLogTerm 是 7,lastLogIndex 就是 10 ;

    至于 lastlogterm lastlogindex 的作用就是为了所谓 LogUpToDate 了
    erenno1
        38
    erenno1  
       2017-05-05 22:16:27 +08:00
    “对应的 index 是 10 ” 是假设 index 是 10
    7 也是假设,即假设 leader 的 current term 是 7,所以 S1 也是 7,起同步的日志的 term 也一定是 7
    duduscript
        39
    duduscript  
    OP
       2017-05-05 23:52:24 +08:00
    @erenno1
    2 我们的理解是一致的,我说的可能不准确
    对于 1
    如果 leader 发出 AppendEntry,但是堵塞期间 down 掉,那么可能会使得这条 log 在超过半数的机器上存在(commit),但是却没有返回给 client,导致不一致。
    那是不是这样,如果在比较稳定的情况下,commitIndex 应该是最大的一个被 commit 的 index,那 follower 接收到 appendEntries 的那个 index 就是 lastApplied,比这个 index 小都是 commit 的 index,commitIndex 通常比 lastApplied 小 1 ?
    erenno1
        40
    erenno1  
       2017-05-06 00:02:21 +08:00 via iPhone
    @duduscript
    稳定 leader 没有并发写的情况是这样的,但是并发写的时候就不一定小 1 了
    duduscript
        41
    duduscript  
    OP
       2017-05-06 00:23:24 +08:00
    @erenno1 非常感谢大神!
    erenno1
        42
    erenno1  
       2017-05-06 00:29:10 +08:00 via iPhone
    @duduscript 😬 不客气,你有新的见解也希望分享一下,共同学习
    opiviqo
        43
    opiviqo  
       2019-01-02 10:10:32 +08:00
    战略性 mark 谢谢
    razertory
        44
    razertory  
       2019-08-01 22:55:37 +08:00
    现在是 9102 年。。我正在刷 Lab2。。好渴望有人一起交流哦
    enaxm
        45
    enaxm  
       2019-08-06 13:59:16 +08:00
    。。。github 一堆讨论,各种群你说没法交流 emm。。。
    qingtengmuniao
        46
    qingtengmuniao  
       2020-05-27 00:50:01 +08:00
    我最近在跟 2020 年的,课程笔记和实验新的会发在我博客: https://www.qtmuniao.com/categories/%E5%88%86%E5%B8%83%E5%BC%8F%E7%B3%BB%E7%BB%9F/ 欢迎交流。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1460 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 23:50 · PVG 07:50 · LAX 16:50 · JFK 19:50
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.