raft算法的实现概述

节点的启动和加入:
1. 第一个节点启动,发现没有其他的member节点,则自己变成master
2. 第二个节点启动并加入第一个节点,发现有member节点,并且master节点已经存在了,那么自己就变成follower节点
3. 第三个...
4. 第四个... 节点的选举:
每一个节点都维护一个自己的随机时间计时器,当计时器完成一个周期的时候仍没有收到master节点的ping操作,则自己变成candidate,然后向其他的member发起投票选举的请求(带上当前的轮次),得到其他节点的回复的数量超过一半的时候则变成master节点,然后向member发ping操作 follower:
每一轮,follower只有一次投票的权利 轮次:
递增 http://www.jdon.com/artichect/raft.html

raft扩展算法

为什么要修改raft算法

1. member数量有限的。member数量越多,选举就会越慢,同时master数据转发数据的速度就会越慢,而且越来越慢

修改思路

1. 通过快速传播算法(gossip),让数据达到最终一致
2. 每一个follower都可以写入数据,然后gossip给其他的member
3. 每一个follower在向其他的member gossip数据之前先向master请求一个时间戳作为本次事件的version,而且先把本次事件发送给master 在发送给其他member
4. 每一个member维护一个定时器,定时随机的向member(包括master)验证自己的version是否是最新的,如果是则不修改,如果不是,则向该member请求最新的事件。请求为异步操作,只请求,不用考虑回应。
5. 每一个follower都维护一张member路由表信息,规定路由表为递增序列,表中第一条数据为master节点
6. 当follower发现在向master发出请求一个时间戳请求时,请求失败,则把本次事件放到本地事件循环系统当中,在一段时间内仍未成功,则积压本次事件并报警
8. master功能:全局时间戳,随机指定Verifier(网络,系统性能等比较良好的),如果发现Verifier数量减少,就从新选举一个新的
9. Verifier:随机随时检查member,发现失败者,则标记失败,传播到网络中。Verifier定时向master进行检测,
10. 节点启动的时候,检查master是否存在,检查Verifier数量是否足够,如果是,则自己的身份就是follower
11. master定时检查网络情况,发现有良好的主机,则考虑替换现有的Verifier主机
12. Verifier定时检查master,发现死掉了,则向其他的Verifier节点发出exchange(follower,master)的请求,其他的Verifier得到请求后先检验master,发现master死掉了,则同意请求,同时执行请求事件。如果发现master还活着,则diff_version(req_Verifier,loc_Verifier),小于0则执行请求事件,否则舍弃请求
13. 节点在获取数据为空时,同时随机请求其他节点,查看数据是否完毕

gossip版本raft算法实现的更多相关文章

  1. 学习Raft算法的笔记

    Raft是一种为了管理日志复制的一致性算法.它提供了和Paxos算法相同的功能和性能,但是它的算法结构和Paxos不同,使得Raft算法更加容易理解并且更容易构建实际的系统.为了提升可理解性,Raft ...

  2. 搞懂分布式技术2:分布式一致性协议与Paxos,Raft算法

    搞懂分布式技术2:分布式一致性协议与Paxos,Raft算法 2PC 由于BASE理论需要在一致性和可用性方面做出权衡,因此涌现了很多关于一致性的算法和协议.其中比较著名的有二阶提交协议(2 Phas ...

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

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

  4. Raft算法,从学习到忘记

    Raft算法,从学习到忘记 --Raft算法阅读笔记. --Github 概述 说到分布式一致性算法,可能大多数人的第一反应是paxos算法.但是paxos算法一直以来都被认为是难以理解,难以实现.S ...

  5. 关于raft算法

    列出一些比较好的学习资料, 可以经常翻一番,加深印象 0 raft官方git 1  raft算法动画演示 2    Raft 为什么是更易理解的分布式一致性算法 3  raft一致性算法 4  Raf ...

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

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

  7. 一文搞懂Raft算法

      raft是工程上使用较为广泛的强一致性.去中心化.高可用的分布式协议.在这里强调了是在工程上,因为在学术理论界,最耀眼的还是大名鼎鼎的Paxos.但Paxos是:少数真正理解的人觉得简单,尚未理解 ...

  8. 手绘raft算法

    手绘raft算法 互联网技术窝 2019-04-07 12:06:05 在现实的分布式系统中,不能可能保证集群中的每一台机器都是100%可用可靠的,集群中的任何机器都可能发生宕机.网络连接等问题导致集 ...

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

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

随机推荐

  1. ORACLE_HOME_LISTNER is not SET, unable to auto-start Oracle Net Listener

    执行$ORACLE_HOME/bin/dbstart 启动数据库提示如下: [oracle@prim bin]$ ./dbstart ORACLE_HOME_LISTNER is not SET, u ...

  2. oracle database 9i/10g/11g 编程艺术 源代码下载

    背景 在找这本书的源码,搜到提供的都是需要C币下载的.比较固执(其实是穷). 在这本书的前言中提到源代码可以在 www.appress.com 上下载. 下面是该书在该网站上的链接: https:// ...

  3. iOS多语言设置

    最近公司做的项目需要向国外推广,因此app需要添加相应的语言设置,为此整理记录下多语言设置的过程.如有不对的地方,欢迎各位大神指正.下面就详细介绍下设置的过程: 1.基本设置 第一步:首先在 项目工程 ...

  4. 如何编写及运行JS

    JS也是一种脚本语言,他可以有两种方式在HTML页面进行引入,一种是外联,一种是内部.       外联JS的写法为: <script src="相对路径"></ ...

  5. git 码云 使用记录

    使用了码云的私有仓库. 一.首先下载安装git 安装完成后,在开始菜单里找到“Git”->“Git Bash”,蹦出一个类似命令行窗口的东西,就说明Git安装成功! 二.创建版本库 什么是版本库 ...

  6. linux 学习第八天

    一.特殊权限 1.SUID 让命令的执行者临时获取到了所有者权限(rws) 2.SGID 让目录中新的文件的所有组,归属上级目录 3.SBIT 粘滞位 让目录内的文件只能被文件所有者删除 4.修改文件 ...

  7. dmesg功能介绍

    dmesg 命令的使用范例 ‘dmesg’命令设备故障的诊断是非常重要的.在‘dmesg’命令的帮助下进行硬件的连接或断开连接操作时,我们可以看到硬件的检测或者断开连接的信息.‘dmesg’命令在多数 ...

  8. 自定义注解实现(spring aop)

    1.基本概念 1.1 aop 即面向切面编程,优点是耦合性低,能使业务处理和切面处理分开开发,扩展和修改方面,当引入了注解方式时,使用起来更加方便. 1.2 应用场景 打日志.分析代码执行时间.权限控 ...

  9. Git简单配置ssh秘钥

    执行以下命令: git config --global user.name "demo" git config --global user.email "demo@dem ...

  10. Hadoop-Hive学习笔记(1)

    1. Hive什么 a.Hive是基于Hadoop的一个数据仓库工具(注意不是数据仓库),将结构化的数据文件映射成一张数据库表. b.Hive是SQL的解析引擎,可以把sql语句转换成MapReduc ...