• 请不要在回答技术问题时复制粘贴 AI 生成的内容
duduscript
V2EX  ›  程序员

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

  •  1
     
  •   duduscript · May 4, 2017 · 18829 views
    This topic created in 3305 days ago, the information mentioned may be changed or developed.
    有没有在刷 MIT 6.824 分布式系统的朋友,这门课的 lab 和论文 list 都挺有难度(大神请无视。。。),想和别人交流又没有环境,课程也不允许去看别人的代码,不知道有没有在刷这门课的朋友,大家建了群一起交流。

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

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

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

    我的经验是很多问题多读几遍论文。
    多读几遍他们写的 advice https://thesquareplanet.com/blog/students-guide-to-raft/ 基本就清楚了。
    另外就是并发的问题仔细想清楚。
    duduscript
        29
    duduscript  
    OP
       May 5, 2017
    @erenno1 目前实现 lab2 中有几个点还是不清晰,比如 server 的 commitIndex 和 lastApplied 的区别,RequestVoteRPC 中的 lastLogTerm 和 term 的具体是哪一个,还有比较 candidate 的 term 为什么是 term>=currentTerm,而不是 term>currentTerm...
    duduscript
        30
    duduscript  
    OP
       May 5, 2017
    @erenno1 我感觉可能是我论文还是没完全看懂,但我带问题去找也没有找到具体的 point...
    erenno1
        31
    erenno1  
       May 5, 2017
    @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  
       May 5, 2017
    @duduscript
    再多读几遍,打日志调试调试就理解了
    erenno1
        33
    erenno1  
       May 5, 2017
    @duduscript
    针对 2 补充一下:LogUpToDate 的意义是用以保证选出的 leader 肯定持有已经 commit 的 log entry,否则 failover 就丢数据了
    duduscript
        34
    duduscript  
    OP
       May 5, 2017
    @erenno1 Orz..
    duduscript
        35
    duduscript  
    OP
       May 5, 2017
    @erenno1 3 我明白了
    对于 2,我可不可以这么理解,其实 term 也有 commit 和没有 commit 的区别
    比如一个成为 candidate 的 follower,他的 term 会+1,+1 以后的 term 就是 lastLogTerm,这个 term 是没有 commit 的 term,而 commit 的 term 是要小于 lastLogTerm 的
    erenno1
        36
    erenno1  
       May 5, 2017
    @duduscript
    刚下班路上想了下问题 1,我先再补充一下 1 吧。 如果将 commitIndex 和 lastApplied 合二为一的话,新的达成一致的 log entry 可能会需要阻塞等待前一个 log entry apply 结束(落盘)然后才能记录下来该 entry 已经达成一致了(即总数过半已经同步)才能响应客户端请求,而且等待的时候如果发生宕机之类的事情,会导致该 entry 的状态不明确,虽然日志不会丢失,但是需要后续 client 重试来确认该 entry 是提交。 毕竟 raft 是给出明确的实现方案的一致性算法,这里的 commitIndex 不是必须的,但是是一种高质量的优化。nextindex 也是一种优化;

    以上是我的理解,供参考
    erenno1
        37
    erenno1  
       May 5, 2017
    @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  
       May 5, 2017
    “对应的 index 是 10 ” 是假设 index 是 10
    7 也是假设,即假设 leader 的 current term 是 7,所以 S1 也是 7,起同步的日志的 term 也一定是 7
    duduscript
        39
    duduscript  
    OP
       May 5, 2017
    @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  
       May 6, 2017 via iPhone
    @duduscript
    稳定 leader 没有并发写的情况是这样的,但是并发写的时候就不一定小 1 了
    duduscript
        41
    duduscript  
    OP
       May 6, 2017
    @erenno1 非常感谢大神!
    erenno1
        42
    erenno1  
       May 6, 2017 via iPhone
    @duduscript 😬 不客气,你有新的见解也希望分享一下,共同学习
    opiviqo
        43
    opiviqo  
       Jan 2, 2019
    战略性 mark 谢谢
    razertory
        44
    razertory  
       Aug 1, 2019
    现在是 9102 年。。我正在刷 Lab2。。好渴望有人一起交流哦
    enaxm
        45
    enaxm  
       Aug 6, 2019
    。。。github 一堆讨论,各种群你说没法交流 emm。。。
    qingtengmuniao
        46
    qingtengmuniao  
       May 27, 2020
    我最近在跟 2020 年的,课程笔记和实验新的会发在我博客: https://www.qtmuniao.com/categories/%E5%88%86%E5%B8%83%E5%BC%8F%E7%B3%BB%E7%BB%9F/ 欢迎交流。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   5569 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 82ms · UTC 01:47 · PVG 09:47 · LAX 18:47 · JFK 21:47
    ♥ Do have faith in what you're doing.