gossip版本raft算法实现
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算法实现的更多相关文章
- 学习Raft算法的笔记
Raft是一种为了管理日志复制的一致性算法.它提供了和Paxos算法相同的功能和性能,但是它的算法结构和Paxos不同,使得Raft算法更加容易理解并且更容易构建实际的系统.为了提升可理解性,Raft ...
- 搞懂分布式技术2:分布式一致性协议与Paxos,Raft算法
搞懂分布式技术2:分布式一致性协议与Paxos,Raft算法 2PC 由于BASE理论需要在一致性和可用性方面做出权衡,因此涌现了很多关于一致性的算法和协议.其中比较著名的有二阶提交协议(2 Phas ...
- 分布式一致性算法:Raft 算法(论文翻译)
Raft 算法是可以用来替代 Paxos 算法的分布式一致性算法,而且 raft 算法比 Paxos 算法更易懂且更容易实现.本文对 raft 论文进行翻译,希望能有助于读者更方便地理解 raft 的 ...
- Raft算法,从学习到忘记
Raft算法,从学习到忘记 --Raft算法阅读笔记. --Github 概述 说到分布式一致性算法,可能大多数人的第一反应是paxos算法.但是paxos算法一直以来都被认为是难以理解,难以实现.S ...
- 关于raft算法
列出一些比较好的学习资料, 可以经常翻一番,加深印象 0 raft官方git 1 raft算法动画演示 2 Raft 为什么是更易理解的分布式一致性算法 3 raft一致性算法 4 Raf ...
- 从分布式一致性到共识机制(二)Raft算法
春秋五霸说开 春秋五霸,是指东周春秋时期相继称霸主的五个诸侯,“霸”,意为霸主,即是诸侯之领袖.典型的比如齐桓公,晋文公,春秋时期诸侯国的称霸,与今天要讨论的Raft算法很像. 一.更加直观的Raft ...
- 一文搞懂Raft算法
raft是工程上使用较为广泛的强一致性.去中心化.高可用的分布式协议.在这里强调了是在工程上,因为在学术理论界,最耀眼的还是大名鼎鼎的Paxos.但Paxos是:少数真正理解的人觉得简单,尚未理解 ...
- 手绘raft算法
手绘raft算法 互联网技术窝 2019-04-07 12:06:05 在现实的分布式系统中,不能可能保证集群中的每一台机器都是100%可用可靠的,集群中的任何机器都可能发生宕机.网络连接等问题导致集 ...
- 【转】分布式一致性算法:Raft 算法(Raft 论文翻译)
编者按:这篇文章来自简书的一个位博主Jeffbond,读了好几遍,翻译的质量比较高,原文链接:分布式一致性算法:Raft 算法(Raft 论文翻译),版权一切归原译者. 同时,第6部分的集群成员变更读 ...
随机推荐
- Oracle数据库,简单SQL练习与答案
1.数据 --创建职员表create table tbEmp( eID number primary key, --职员编号 eName varchar2(20) not null, --职员姓名 e ...
- 【HDOJ 2888】Check Corners(裸二维RMQ)
Problem Description Paul draw a big m*n matrix A last month, whose entries Ai,j are all integer numb ...
- 复习宝典之Redis
查看更多宝典,请点击<金三银四,你的专属面试宝典> 第八章:Redis Redis是一个key-value的nosql数据库.先存到内存中,会根据一定的策略持久化到磁盘,即使断电也不会丢失 ...
- composer 基本概念与常用命令总结
目录 composer 基本概念与常用命令总结 基本概念 软件安装 linux/mac安装 windows 配置镜像 如何使用 常用命令 全局参数 初始化 init 初始化参数 依赖安装 instal ...
- Spring初始化机制
一.main的运行入口 ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("spring.xml ...
- 如何判断一个 APP页面是否是H5页面(转载)
1.无网络断开网络,显示404或则错误页面的是H5 2.页面布局a.在手机设置.开发者选项中开启显示布局边界功能:b.进入应用查看布局边界:c.原生应用可以看到各个控件的布局边界,H5只有整个页面的一 ...
- linux mint系统 cinnamon桌面 发大镜功能
让我来告诉迷途中的你cinnamon桌面一个好用的功能. 选择设置 选择窗口 -> 选择行为 看那个窗口移动和调整大小的特殊键 Alt 好了按住alt在滑动滑轮 世界不一样了 对于小屏幕高分辨率 ...
- Python概述
1.什么是Python? Python是一种解释型,面向对象,动态数据类型的高级程序设计语言. Python由Guido van Rossum于1989年底发明,第一个公开发行版发行于1991年. 像 ...
- 全国Uber优步司机奖励政策 (1月4日-1月10日)
本周已经公开奖励整的城市有:北 京.成 都.重 庆.上 海.深 圳.长 沙.佛 山.广 州.苏 州.杭 州.南 京.宁 波.青 岛.天 津.西 安.武 汉.厦 门,可按CTRL+F,搜城市名快速查找. ...
- 成都Uber优步司机奖励政策(3月1日)
滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...