首页 > 其他分享 >mit6.824 raft

mit6.824 raft

时间:2023-03-13 23:44:38浏览次数:51  
标签:节点 实现 我们 提交 raft 日志 mit6.824 leader

lab2A

这部分的内容是用来实现leader election过程,按照解释,每个节点创建之初都为follower 都会有一个超时时间,超时之后我们进入leader election状态。过程需要currentTIme++ votedFor=rf.me等等操作,paper上有详细介绍。 在我么能实现过程中遇到的第一个大概了事ticker的实现。其中要实现超时逻辑。一个简单的判断为

 for {  
   if 超时{  
     Election  
   }  
   time.Sleep(Duration)  
 }

当然在go中我们还可以通过timer和chan来实现阻塞唤醒 在上述代码中的第一个问题?Duration事多少?即多久我们检测一次是否超时,在我最早的设计中。100ms才进行一次检测(超时周期200-350),如果剩余还能运行的时间小于了100ms,则是这duraton为这个小的时间段。这样考虑的原因是为了性能,过高检测频率我担心会导致系统性能差。 但是,在实际中经常会发生错误,最常见的就是多个节点经常会一块进入candidate状态。导致谁也无法成为leader。问题出在,当一个candidate发送requestVote时,接受请求节点会重置超时时间,而我们的检测间隔太长无法及时的响应。 所以第一个问题的解决方法就是增加轮询频率,Duration的值设置为了10ms,经过测试并不会导致性能严重下降,现代处理器完全能够应对这样情况。

另外关于RequestVote结果的处理。 最初版本汇总

//简略版  
for i:=0;i<len(rf.peer);i++{  
  args  
  replgy  
  count=1  
  go func(id int){  
    ok:=rf.sendRequestVote(&args,&reply,id)  
    if ok{  
      if reply.success{  
        count++  
      }  
      if count>len(rf.peer)/2  
        rf.convertToLeader()  
        go boardcastHeartBeats()  
    }  
  }(i)     
}  
​

只要超过len(rf.peer)/2立马改变状态,响应非常迅速,这里又个非常明显的缺点,boardcastHeartBeats()会被执行多次,在2A中就算这样也能通过测试

标签:节点,实现,我们,提交,raft,日志,mit6.824,leader
From: https://www.cnblogs.com/beifangcc/p/17213399.html

相关文章

  • Raft算法分析
      Raft是一种更为简单方便易于理解的分布式算法,主要解决了分布式中的一致性问题。相比传统的Paxos算法,Raft将大量的计算问题分解成为了一些简单的相对独立的子问题,......
  • P3574 [POI2014] FAR-FarmCraft 吐槽 + 题解
    洛谷上面的题解写的真的不太好,有很多错误,我来谈谈自己的理解。设\(f[i]\)表示以\(i\)为根节点的子树中(包括节点\(i\))的所有人安装好游戏所需要的时间(与下面的\(g[i]......
  • Kafka3.4:基于kraft集群搭建
    环境准备环境:jdk8,三台centos机器,基于kraft模式(不使用zk)kafka安装包:https://mirrors.aliyun.com/apache/kafka/3.4.0/kafka_2.13-3.4.0.tgz机器iphostname配置......
  • braft资料
    1)leader_apply流程图https://github.com/kasshu/braft-docs/blob/master/images/braft_leader_apply.png相比follower,leader写时,多把response放在内存里 2)braft使用......
  • Raft分布式一致性研究
    Raft分布式一致性研究年前有点时间,决定把Raft分布式一致性协议实现一下,加深理解和认识,发现这件事真的是“纸上得来终觉浅,须知此事要躬行”。照着协议上的规则来写,就短短的......
  • 拜占庭将军问题和 Raft 共识算法讲解
    作者:京东物流郭益如导读在分布式系统中,什么是拜占庭将军问题?产生的场景和解决方案是什么?什么是Raft共识算法?Raft算法是如何解决拜占庭将军问题的?其核心原理和算法......
  • Vulnhub:maskcrafter-1.1靶机
    kali:192.168.111.111靶机:192.168.111.187信息收集端口扫描nmap-A-v-sV-T5-p---script=http-enum192.168.111.187ftp匿名登陆发现两个文件ftp192.168.111.1......
  • 数据库必知必会:TiDB(5)TiKV Raft
    (数据库必知必会:TiDB(5)TiKVRaft)Raft角色介绍TiKV中的Region保存了3份数据,其中一份数据是主数据,称为leader,另外两份是follower。Region中的数据是按照key进行排序的。......
  • Fabric2.x中Raft共识算法核心数据结构
    一、共识算法可插拔的代码体现Chain接口HyperledgerFabric的共识算法是可插拔的,在代码上体现为Chain接口,所有不同的共识算法均可根据Chain接口进行具体实现,目前fabric支......
  • SOFAJRaft源码阅读(伍)-初识RheaKV
    SOFAJRaft的SOFAJRaft-RheaKV是基于SOFAJRaft和RocksDB实现的嵌入式、分布式、高可用、强一致的KV存储类库。SOFAJRaft-RheaKV集群主要包括三个核心组件:PD,Store......