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

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

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

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

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

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

    以上是我的理解,供参考
    erenno1
    erenno1
    May 5, 2017
    37
    @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
    erenno1
    May 5, 2017
    38
    “对应的 index 是 10 ” 是假设 index 是 10
    7 也是假设,即假设 leader 的 current term 是 7,所以 S1 也是 7,起同步的日志的 term 也一定是 7
    duduscript
    duduscript
    OP
    May 5, 2017
    39
    @erenno1
    2 我们的理解是一致的,我说的可能不准确
    对于 1
    如果 leader 发出 AppendEntry,但是堵塞期间 down 掉,那么可能会使得这条 log 在超过半数的机器上存在(commit),但是却没有返回给 client,导致不一致。
    那是不是这样,如果在比较稳定的情况下,commitIndex 应该是最大的一个被 commit 的 index,那 follower 接收到 appendEntries 的那个 index 就是 lastApplied,比这个 index 小都是 commit 的 index,commitIndex 通常比 lastApplied 小 1 ?
    erenno1
    erenno1
    May 6, 2017 via iPhone
    40
    @duduscript
    稳定 leader 没有并发写的情况是这样的,但是并发写的时候就不一定小 1 了
    duduscript
    duduscript
    OP
    May 6, 2017
    41
    @erenno1 非常感谢大神!
    erenno1
    erenno1
    May 6, 2017 via iPhone
    42
    @duduscript 😬 不客气,你有新的见解也希望分享一下,共同学习
    opiviqo
    opiviqo
    Jan 2, 2019
    43
    战略性 mark 谢谢
    razertory
    razertory
    Aug 1, 2019
    44
    现在是 9102 年。。我正在刷 Lab2。。好渴望有人一起交流哦
    enaxm
    enaxm
    Aug 6, 2019
    45
    。。。github 一堆讨论,各种群你说没法交流 emm。。。
    qingtengmuniao
    qingtengmuniao
    May 27, 2020
    46
    我最近在跟 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   ·   Privacy   ·   Solana   ·   1657 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 54ms · UTC 11:37 · PVG 19:37 · LAX 03:37 · JFK 06:37
    ♥ Do have faith in what you're doing.