首页 > 其他分享 >mit6.824lab2A-Raft

mit6.824lab2A-Raft

时间:2023-10-06 15:33:44浏览次数:46  
标签:... RequestVote RPC AppendEntries electionTimer Raft lab2A mit6.824

写在前面

最近更新的可能会比较慢,因为分布式系统这个部分到目前还是为爱发电。上个月是在开学考试的阶段,接下来可能会受一些项目或者学习课程安排上的影响,不过这个内容会坚持下去的。
lab2A的内容主要是关于Raft中server选举的实现,论文中的Figure2以伪代码的格式给出了很多较为详尽的解释,没有出大问题的话我打算跟着Figure2的框架来进行操作。lab2A在分析过程中看了中文的翻译解释版(英语水平有点烂),po一下

整体架构

Raft结构体是每一个server都具备一个的,作为状态机的存在。每一个server就本质上并无差距,只是其所处的状态机的状态不同。

  1. 我们定义了三种状态:Follower, Candidate, Leader。
  2. RPC通信的方式定义两种:AppendEntries RPC, RequestVote RPC。(采用sendXXX()调用其他server的XXX()方法,例如sendAppendEntries_RPC)
  3. 定义时钟检查Timer:electionTimer, heartbeatTimer

状态对应的产生事件

  • Follower:
    处理AppendEntries RPC
    处理RequestVote RPC
    electionTimer超时

  • Candidate
    处理AppendEntries RPC
    处理RequestVote RPC
    electionTimer超时
    发起投票sendRequestVote

  • Leader
    处理AppendEntries RPC
    处理RequestVote RPC
    electionTimer超时
    heartbeatTimer超时
    发送更新心跳包sendAppendEntries

冲突避免

AppendEntries RPCRequestVote RPC是处在一个新go routine之中的,为了防止同时调用产生互斥,用mutex锁一下保平安。
对于electionTimerheartbeatTimer,在生成Raft实例的时候多生成一个go routine,之后我们采用选择切换的方式处理timer的timeout定时事件,并行调用sendAppendEntriessendRequestVote

Access

Accessed in 2023/10/6 15:30(UTC +8:00)

Test (2A): initial election ...
  ... Passed --   3.1  3   46    5618    0
Test (2A): election after network failure ...
  ... Passed --   4.5  3  106    8244    0
Test (2A): multiple elections ...
  ... Passed --   5.4  7  534   43952    0
PASS
ok  	6.5840/raft	12.963s

标签:...,RequestVote,RPC,AppendEntries,electionTimer,Raft,lab2A,mit6.824
From: https://www.cnblogs.com/lyp-Bird/p/17744317.html

相关文章

  • 921のminecraft
    猎人游戏:一:预备在游戏之前将设置以下命令:在循环型命令方块中设置:/executeat<速通者名称>runsetworldspawn~~手动设置这两条命令:/gamerulecommandBlockOutputfalse/forceloadadd~~用以确保命令方块能够始终工作,并关闭聊天栏中的命令方块输出。同时使用床让猎......
  • 分布式一致性算法——Raft
    RaftLeaderElection背景介绍Raft是一种用于管理Log的分布式一致性算法,在了解Raft之前首先需要了解为什么需要Log?对于不同的系统,无论是中间件疑惑是其余的系统,我们如果想要求其满足CAP协议中的一致性,需要尽量保证多节点的数据是相同的,也就是所谓的“共识”。下文中将这些需要......
  • 《Minecraft》攻略
    来自网络MinecraftWikiMinecraftForumsMinecraft(我的世界)中文论坛相关概念沙盒游戏:开放性和自由度:玩家可以自由探索游戏世界,选择自己的游戏方式。创造性和实验性:玩家可以通过游戏中的工具和元素,发挥创造力,打造自己的游戏世界。玩家主导:玩家拥有高度的自由度和控制权,可......
  • 手写raft(三) 实现日志压缩
    手写raft(三)实现日志压缩在上一篇博客中MyRaft实现了日志复制功能,按照计划接下来需要实现日志压缩。手写raft(一)实现leader选举手写raft(二)实现日志复制1.什么是raft日志压缩?我们知道raft协议是基于日志复制的协议,日志数据是raft的核心。但随着raft集群的持续工作,ra......
  • AI绘画draft:如何利用人工智能技术创造独特的艺术作品
    ​ 随着人工智能(AI)技术的飞速发展,越来越多的领域开始应用AI来提升工作效率和创造力。在艺术领域中,AI绘画已经成为了一个备受关注的话题。其中,AI绘画draft技术更是让许多艺术家和设计师感受到了人工智能的魅力。本文将围绕AI绘画draft展开讨论,介绍其原理和应用,并探讨如何利用AI技......
  • 分布式共识算法之Raft设计与实现
    如何理解分布式共识?多个参与者针对某一件事达成完全一致:一件事,一个结论已达成一致的结论,不可推翻有哪些分布式共识算法?Paxos:被认为是分布式共识算法的根本,其他都是其变种,但是Paxos论文中只给出了单个提案的过程,并没有给出复制状态机中需要的multi-paxos的相关细节......
  • Minecraft-Spigot插件开发入门
    Plugin.yml文件plugin.yml是一个包含你的插件信息的文件。没有这个文件,你的插件将无法工作。它由一组属性组成,每个属性都定义在一个新的行上,没有缩进。所有的属性都是区分大小写的。Plugin文件必要的三个属性main这个属性指向你的插件的类,它扩展了JavaPlugin。这必须包含......
  • ZAB Raft
    共同点:1️⃣都采用多数派。2️⃣都引入Leader角色,且一个强Leader的算法,只有Leader处理写请求。不同点:1️⃣ZAB划分阶段:崩溃恢复(领导者选举,成员发现,数据同步)、消息广播;Raft:领导者选举、日志复制2️⃣ZAB的协商阶段(消息广播阶段)分为两个阶段Propose、Commit,移除了2PC的回......
  • 手写raft(二) 实现日志复制
    1.Raft日志复制介绍在上一篇博客中MyRaft实现了leader选举,为接下来实现日志复制功能打下了基础:手写raft(一)实现leader选举日志复制是raft最核心也是最复杂的功能,大体上来说一次正常的raft日志复制大致可以简化为以下几步完成:客户端向raft集群发送一次操作请求(比如kv数......
  • Raft 算法
    论文《InSearchofanUnderstandableConsensusAlgorithm》,发表于2014年相比于Paxos,Raft最大的特性就是易于理解。为了达到这个目标,Raft主要做了两方面的事情:问题分解:把共识算法分为三个子问题,分别是领导者选举(leaderlection)、日志复制(logreplication)、安全性(......