1
ryd994 2017-05-04 04:48:26 +08:00 via Android
没上过这门公开课,但我去年学过相关的课程
|
2
lsmgeb89 2017-05-04 05:27:07 +08:00 via Android
MIT 的很难,作业全是证明
|
3
bxgty 2017-05-04 06:44:07 +08:00
lab 改成 raft 之前刷过一部分。
按说 github 上面会有人发代码的啊,lz 可以参考的。 |
4
yuyueMJ 2017-05-04 08:08:59 +08:00 via iPhone
同想!
|
5
lyief 2017-05-04 09:22:42 +08:00
有公开的课程视频吗? youtube 上貌似只有一个很久之前的。
|
6
iHge2k 2017-05-04 09:32:59 +08:00
做过 15 年的 6.824
|
7
skyitachi 2017-05-04 09:47:24 +08:00
话说你学到哪了,我目前只刷了 mapreduce 那块,群在哪。。。
|
8
djx339 2017-05-04 09:47:37 +08:00
我在做 17 年的,不过我一边上班一边学,进度比较慢, 两三周了刚把 lab1 做完.
|
9
djx339 2017-05-04 09:56:16 +08:00
同问, 群在哪........
|
10
PhilC 2017-05-04 10:18:21 +08:00
我刷完了,代码放在 github 被 mit 的人看到,要求我给删了😄
|
11
duduscript OP @skyitachi 您好,我 lab1 搞定了,目前在做 lab2,对论文的一些细节不太理解,想找人讨论。还有其他的一些关于论文方面的理解感觉也不是非常好,如果可以的话我可以建一个 QQ 或者微信群
|
12
duduscript OP @djx339 我也是把 lab1 搞定在啃 raft,没有群,我可以建一个
|
13
skyitachi 2017-05-04 13:14:03 +08:00 via iPhone
@duduscript 可以啊,一起讨论讨论很不错,弄个 GitHub repo 以 issue 的方式搞吧
|
14
duduscript OP @skyitachi 这也可以,这样大家把自己的问题发上来,然后一起解决?
|
15
jukka 2017-05-04 13:21:20 +08:00
这个有老师上课的视频么。?
|
16
duduscript OP |
17
duduscript OP @bxgty 这门课上强调了不要看别人的实现,我觉得按照他的要求来比较好,最后实在写不好再去看代码
|
18
954880786 2017-05-04 14:13:34 +08:00 via iPhone
资兹建一个 qq 群
|
19
duduscript OP @954880786 已经建好群 群号:575983415
|
20
jukka 2017-05-04 14:43:12 +08:00 1
没有字幕问题不大,应该就是这个没跑了。
https://www.youtube.com/playlist?list=PLpl804R-ZwjKCOwWpTZ21eeaBS3uBrMfV 楼主 Good ! 最近在玩 Elixir,一直觉得应该学一门理论知识课作为知识框架把东西串起来。:) |
21
zhangyifei216 2017-05-04 18:40:30 +08:00
@duduscript 我正在学习,可以相互督促
|
22
tinylcy 2017-05-04 18:47:20 +08:00
刚做完 Lab 1,写了篇博客: http://tinylcy.me/2017/05/03/6-824-Lab-1-MapReduce/
|
23
lins05 2017-05-04 22:39:37 +08:00
路过, CMU 这门 advanced distributed system 列出的 paper 也挺全的 https://www.cs.cmu.edu/~15712/syllabus.html
|
24
bxgty 2017-05-05 09:09:36 +08:00
@duduscript 我倒觉得没关系。重点是看别人的代码不是为了过 test,而是看看和自己的思路有什么不一样。
另外,如果实在是不想看别人 Raft 代码,可以先写写以前 Paxos 的作业~ |
25
erenno1 2017-05-05 10:36:58 +08:00
之前完成到 Lab3A 了,感觉还是很过瘾的
|
26
duduscript OP @lins05 thx!
|
27
duduscript OP @erenno1 raft 实现我有几个点有点模糊,可以交流下 raft 论文里边的一些实现细节吗!?
|
28
erenno1 2017-05-05 17:09:56 +08:00
@duduscript
可以说出来听听。 我的经验是很多问题多读几遍论文。 多读几遍他们写的 advice https://thesquareplanet.com/blog/students-guide-to-raft/ 基本就清楚了。 另外就是并发的问题仔细想清楚。 |
29
duduscript OP @erenno1 目前实现 lab2 中有几个点还是不清晰,比如 server 的 commitIndex 和 lastApplied 的区别,RequestVoteRPC 中的 lastLogTerm 和 term 的具体是哪一个,还有比较 candidate 的 term 为什么是 term>=currentTerm,而不是 term>currentTerm...
|
30
duduscript OP @erenno1 我感觉可能是我论文还是没完全看懂,但我带问题去找也没有找到具体的 point...
|
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 )的意义。 |
32
erenno1 2017-05-05 20:01:53 +08:00
@duduscript
再多读几遍,打日志调试调试就理解了 |
33
erenno1 2017-05-05 20:03:45 +08:00
@duduscript
针对 2 补充一下:LogUpToDate 的意义是用以保证选出的 leader 肯定持有已经 commit 的 log entry,否则 failover 就丢数据了 |
34
duduscript OP @erenno1 Orz..
|
35
duduscript OP @erenno1 3 我明白了
对于 2,我可不可以这么理解,其实 term 也有 commit 和没有 commit 的区别 比如一个成为 candidate 的 follower,他的 term 会+1,+1 以后的 term 就是 lastLogTerm,这个 term 是没有 commit 的 term,而 commit 的 term 是要小于 lastLogTerm 的 |
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 也是一种优化; 以上是我的理解,供参考 |
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 了 |
38
erenno1 2017-05-05 22:16:27 +08:00
“对应的 index 是 10 ” 是假设 index 是 10
7 也是假设,即假设 leader 的 current term 是 7,所以 S1 也是 7,起同步的日志的 term 也一定是 7 |
39
duduscript OP @erenno1
2 我们的理解是一致的,我说的可能不准确 对于 1 如果 leader 发出 AppendEntry,但是堵塞期间 down 掉,那么可能会使得这条 log 在超过半数的机器上存在(commit),但是却没有返回给 client,导致不一致。 那是不是这样,如果在比较稳定的情况下,commitIndex 应该是最大的一个被 commit 的 index,那 follower 接收到 appendEntries 的那个 index 就是 lastApplied,比这个 index 小都是 commit 的 index,commitIndex 通常比 lastApplied 小 1 ? |
40
erenno1 2017-05-06 00:02:21 +08:00 via iPhone
@duduscript
稳定 leader 没有并发写的情况是这样的,但是并发写的时候就不一定小 1 了 |
41
duduscript OP @erenno1 非常感谢大神!
|
42
erenno1 2017-05-06 00:29:10 +08:00 via iPhone
@duduscript 😬 不客气,你有新的见解也希望分享一下,共同学习
|
43
opiviqo 2019-01-02 10:10:32 +08:00
战略性 mark 谢谢
|
44
razertory 2019-08-01 22:55:37 +08:00
现在是 9102 年。。我正在刷 Lab2。。好渴望有人一起交流哦
|
45
enaxm 2019-08-06 13:59:16 +08:00
。。。github 一堆讨论,各种群你说没法交流 emm。。。
|
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/ 欢迎交流。
|