6.Raft

  Raft也是分布式一致性协议,主要是用来竞选主节点

单个Candidate的竞选

  有三种节点:FollowerCandidateLeaderLeader会周期性的发送心跳给Follower。每个Follower都设置了一个随机的竞选超时时间,一般为150ms-300ms,如果在这个时间内没有收到Leader的心跳包,就会变成Candidate,进入竞选阶段。

  • 下图展示一个分布式系统的最初阶段,此时只有Follower没有Leader。Node A等待一个随机的竞选超时时间之后没收到Leader发来的心跳包,因此进入竞选阶段。

  • 此时Node A 发送投票请求给其它所有节点。

  • 其他节点会对请求进行回复,如果超过一半的节点回复了,那么该Candidate就会变成Leader

  • 之后Leader会周期性的发送心跳包给Follower,Follower接收到心跳包,会重新开始计时。

多个Candidate竞选

  如果有多个Follower称为Candidate,并且所获得票数相同,那么就需要重新开始投票。例如下图中的Node B和Node D都获得两票,需要重新开始投票。

  由于每个节点设置的随机竞选超时时间不同,因此下一次再次出现多个candidate并获得同样票数的概率很低。

数据同步

  来自客户端的修改都会被传入Leader。注意该修改还未被提交,只是写入日志中。

  Leader会把修改复制到所有Follower

  Leader会等待大多数的Follower也进行了修改,然后才将修改提交

  此时Leader通知所有的Follower让它们也提交修改,此时所有的节点的值达成一致。

分布式---Raft算法的更多相关文章

  1. Redis中算法之——Raft算法

    Sentinel系统选举领头的方法是对Raft算法的领头选举方法的实现. 在分布式系统中一致性是很重要的.1990年Leslie Lamport提出基于消息传递的一致性算法Paxos算法,解决分布式系 ...

  2. Raft 为什么是更易理解的分布式一致性算法

    一致性问题可以算是分布式领域的一个圣殿级问题了,关于它的研究可以回溯到几十年前. 拜占庭将军问题 Leslie Lamport 在三十多年前发表的论文<拜占庭将军问题>(参考[1]). 拜 ...

  3. 分布式一致性算法:Raft 算法(论文翻译)

    Raft 算法是可以用来替代 Paxos 算法的分布式一致性算法,而且 raft 算法比 Paxos 算法更易懂且更容易实现.本文对 raft 论文进行翻译,希望能有助于读者更方便地理解 raft 的 ...

  4. 从分布式一致性到共识机制(二)Raft算法

    春秋五霸说开 春秋五霸,是指东周春秋时期相继称霸主的五个诸侯,“霸”,意为霸主,即是诸侯之领袖.典型的比如齐桓公,晋文公,春秋时期诸侯国的称霸,与今天要讨论的Raft算法很像. 一.更加直观的Raft ...

  5. 【转】Raft 为什么是更易理解的分布式一致性算法

    编者按:这是看过的Raft算法博客中比较通俗的一篇了,讲解问题的角度比较新奇,图文并茂,值得一看.原文链接:Raft 为什么是更易理解的分布式一致性算法 一致性问题可以算是分布式领域的一个圣殿级问题了 ...

  6. 【转】分布式一致性算法:Raft 算法(Raft 论文翻译)

    编者按:这篇文章来自简书的一个位博主Jeffbond,读了好几遍,翻译的质量比较高,原文链接:分布式一致性算法:Raft 算法(Raft 论文翻译),版权一切归原译者. 同时,第6部分的集群成员变更读 ...

  7. Raft 为什么是更易理解的分布式一致性算法(转)

    一致性问题可以算是分布式领域的一个圣殿级问题了,关于它的研究可以回溯到几十年前. 拜占庭将军问题 Leslie Lamport 在三十多年前发表的论文<拜占庭将军问题>(参考[1]). 拜 ...

  8. 分布式理论(六)—— Raft 算法

    前言 我们之前讲述了 Paxos 一致性算法,虽然楼主尝试用最简单的算法来阐述,但仍然还是有点绕.楼主最初怀疑自己太笨,后来才直到,该算法的晦涩难懂不是只有我一个人这么认为,而是国际公认! 所以 Pa ...

  9. 分布式一致性协议之:Raft算法

    一致性算法Raft详解 背景 熟悉或了解分布性系统的开发者都知道一致性算法的重要性,Paxos一致性算法从90年提出到现在已经有二十几年了,而Paxos流程太过于繁杂实现起来也比较复杂,可能也是以为过 ...

随机推荐

  1. mongodb远程链接命令

    mongo 172.17.0.170:27017/spider_data -u admin -p 然后输入密码 切换数据库 use spider_data 查看所有表 show tables

  2. C++入门经典-例7.8-const对象,标准尺寸

    1:当建立一个对象之后,如果不希望它的任何数据发生改变,可以将其直接声明为const对象,例如: const 类名 对象名 const对象必须初始化.我们可以调用它的数据和函数,但是不可以对他们进行修 ...

  3. tomcat配置加密的连接器https

    对称加密:加密和解密用的是同样的密钥. 非对称加密:使用一对密钥,公钥和私钥,私钥只由一方保管,不能外泄:公钥可以发给任何请求它的人 那么得到公钥的一方怎么确定这个公钥是服务器发过来的呢? 这个就需要 ...

  4. modprobe 和 insmod 区别

    1 关于内核加载方式 1) insmod : insmod一次只能加载特定的一个设备驱动,且需要驱动的具体地址          举例说明: insmod pblk.ko     // 需要制定pbl ...

  5. 代码实现:定义一个文件输入流,调用read(byte[] b)方法,将a.txt文件中的内容打印出来(byte数组大小限制为5)

    package com.loaderman.test; import java.io.ByteArrayOutputStream; import java.io.FileInputStream; im ...

  6. 反编译中的 匿名内部类 this.val$的问题【我改】

    转: 匿名内部类 this.val$的问题 一天偶尔在网上找到一个jar包,反编译后出现了如下的代码: public void defineAnonymousInnerClass(String nam ...

  7. 前端Ajax跨域解决方案

    业务场景: 前后端分离需要对接数据接口. 接口测试是在postman做的,今天才开始和前端对接,由于这是我第一次做后端接口开发(第一次嘛,问题比较多)所以在此记录分享我的踩坑之旅,以便能更好的理解,应 ...

  8. C#在DataGridView中自定义键盘功能——光标在单元格内具体位置

    //捕捉按键 protected override bool ProcessCmdKey(ref Message msg,Keys keyData) { if (keyData == Keys.Rig ...

  9. python在shell中环境变量使用

    1.用Python Shell设置或获取环境变量的方法: 设置系统环境变量 os.environ['环境变量名称']='环境变量值' #其中key和value均为string类型 os.putenv( ...

  10. DESC加密解密算法

    using System; using System.Text; using System.Windows.Forms; using System.Security.Cryptography; usi ...