• 松鼠鱼
    2022-03-13
    老师对于最后一张图的解释太粗略了,我贴一个网上看到的比较细致的给大家参考: 情况 a: 服务器 S1 在任期为 2 的时刻仅将日志 <index: 2, term: 2> 发送到了服务器 S2 便崩溃掉。 情况 b: 服务器 S5 在任期为 3 的时刻当选 Leader (S5 的计时器率先超时,递增任期号为 3 因此高于服务器 S3, S4,可以当选 Leader),但没来得及发送日志便崩溃掉。 情况 c: 服务器 S1 在任期为 4 的时刻再次当选 Leader (S1 重启时,任期仍然为 2,收到新的 Leader S5 发送的心跳信息后更新任期为 3,而在 Leader S5 崩溃后,服务器 S1 为第一个计时器超时的,因此发起投票,任期更新为 4,大于网络中其他服务器任期,成功当选 Leader),同时将日志 <index: 2, term: 2> 发送到了服务器 S2, S3,但还没有通知服务器对日志进行提交便崩溃掉。 情况 d: 情况 (a -> d) 如果在任期为 2 时服务器 S1 作为 Leader 崩溃掉,S5 在任期为 3 的时刻当选 Leader,由于日志 <index: 2, term: 2> 还没有被复制到大部分服务器上,并没有被提交,所以 S5 可以通过自己的日志 <index: 2, term: 3> 覆盖掉日志 <index: 2, term: 2>。 情况 e: 情况 (a -> e) 而如果在任期为 2 时服务器 S1 作为 Leader,并将 <index: 2, term:2> 发送到S2, S3,成功复制到大多数成员服务器上,并且成功提交了该日志。那么即便 S1 崩溃掉,S5 也无法成功当选 Leader,因为 S5 不具备网络中最新的已被提交的日志条目。
    展开

    作者回复: 嗯嗯!补充的非常好;感谢这位同学。 不过稍微再补充一句,情况c中,确切来说,不是 `还没有通知服务器对日志进行提交` 而是 不能 `对<index: 2, term: 2>的日志进行提交` 在raft的论文中figure8主要是为了描述 我们不能允许领导提交之前任期的日志;即使他可以把它复制到多数节点中。这正是因为d这样的情况,c中term2的日志即使被复制到多数节点也有可能被新上位的其他节点所覆写;如果允许提交则不符合数据安全的语意了。 我当时写的不是很清楚,已经安排修正了~

    
    2
  • 雨落~紫竹
    2022-07-18
    这篇干货满满
    
    
  • peter
    2022-02-13
    请教老师三个问题: Q1:分布式一致性具体分为哪几种一致性问题? 比如分布式存储一致性等。 Q2:分布式事务算一致性问题吗? Q3:Raft在哪些框架中被使用?
    共 2 条评论
    