首页   注册   登录

erenno1

智商不高, 情商为零
V2EX 第 19049 号会员,加入于 2012-04-03 22:53:56 +08:00
窝里横~
erenno1 最近回复了
2018-07-20 13:38:55 +08:00
回复了 1ku 创建的主题 问与答 就想做个收入的投票
语言和去向竟然不是多选
2017-05-06 00:29:10 +08:00
回复了 duduscript 创建的主题 程序员 有没有在刷 MIT 6.824 分布式系统 的朋友?
@duduscript 😬 不客气,你有新的见解也希望分享一下,共同学习
2017-05-06 00:02:21 +08:00
回复了 duduscript 创建的主题 程序员 有没有在刷 MIT 6.824 分布式系统 的朋友?
@duduscript
稳定 leader 没有并发写的情况是这样的,但是并发写的时候就不一定小 1 了
2017-05-05 22:16:27 +08:00
回复了 duduscript 创建的主题 程序员 有没有在刷 MIT 6.824 分布式系统 的朋友?
“对应的 index 是 10 ” 是假设 index 是 10
7 也是假设,即假设 leader 的 current term 是 7,所以 S1 也是 7,起同步的日志的 term 也一定是 7
2017-05-05 22:14:45 +08:00
回复了 duduscript 创建的主题 程序员 有没有在刷 MIT 6.824 分布式系统 的朋友?
@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 了
2017-05-05 22:07:58 +08:00
回复了 duduscript 创建的主题 程序员 有没有在刷 MIT 6.824 分布式系统 的朋友?
@duduscript
刚下班路上想了下问题 1,我先再补充一下 1 吧。 如果将 commitIndex 和 lastApplied 合二为一的话,新的达成一致的 log entry 可能会需要阻塞等待前一个 log entry apply 结束(落盘)然后才能记录下来该 entry 已经达成一致了(即总数过半已经同步)才能响应客户端请求,而且等待的时候如果发生宕机之类的事情,会导致该 entry 的状态不明确,虽然日志不会丢失,但是需要后续 client 重试来确认该 entry 是提交。 毕竟 raft 是给出明确的实现方案的一致性算法,这里的 commitIndex 不是必须的,但是是一种高质量的优化。nextindex 也是一种优化;

以上是我的理解,供参考
2017-05-05 20:03:45 +08:00
回复了 duduscript 创建的主题 程序员 有没有在刷 MIT 6.824 分布式系统 的朋友?
@duduscript
针对 2 补充一下:LogUpToDate 的意义是用以保证选出的 leader 肯定持有已经 commit 的 log entry,否则 failover 就丢数据了
2017-05-05 20:01:53 +08:00
回复了 duduscript 创建的主题 程序员 有没有在刷 MIT 6.824 分布式系统 的朋友?
@duduscript
再多读几遍,打日志调试调试就理解了
2017-05-05 20:01:23 +08:00
回复了 duduscript 创建的主题 程序员 有没有在刷 MIT 6.824 分布式系统 的朋友?
@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 )的意义。
2017-05-05 17:09:56 +08:00
回复了 duduscript 创建的主题 程序员 有没有在刷 MIT 6.824 分布式系统 的朋友?
@duduscript
可以说出来听听。

我的经验是很多问题多读几遍论文。
多读几遍他们写的 advice https://thesquareplanet.com/blog/students-guide-to-raft/ 基本就清楚了。
另外就是并发的问题仔细想清楚。
关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   3354 人在线   最高记录 5043   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.3 · 11ms · UTC 01:05 · PVG 09:05 · LAX 17:05 · JFK 20:05
♥ Do have faith in what you're doing.