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. 节点在获取数据为空时,同时随机请求其他节点,查看数据是否完毕

最新文章

  1. Android TextView 高亮字体并添加点击事件
  2. wp8 入门到精通 定时更新瓷贴
  3. mysql保留关键字 BigDecimal Double 四舍五入
  4. 动态图片加到UIImageView中
  5. mysql5.7.14安装与配置
  6. kingso_sort - Taocode
  7. 扩展 Windows Azure 运营能力 – 巴西
  8. vs2008试用版的评估期已经结束解决办法
  9. Ocelot中文文档-路由
  10. ASP.NET Core托管和部署Linux实操演练手册
  11. 关于海康威视与Unity3d集成冲突问题解决
  12. linux 进程 ctrl-c,ctrl-z,ctrl-d
  13. Java - replace a character at a specific index in a string?
  14. jqGrid属性中文详细说明
  15. jQuery给动态添加生成的元素绑定事件的方法
  16. docker-compose批量管理docker容器
  17. Azure 负载均衡器介绍
  18. C++实现不能继承的类
  19. JNI简单步骤01
  20. SQL的四种连接查询(转)

热门文章

  1. 工具 | Axure基础操作 No.3
  2. sql 优化的几种方法
  3. shell基础知识---与监听服务器长连接端口状态
  4. ubuntu系统的软件包管理工具
  5. h5跳转到app的实现
  6. php连接数据库(一)
  7. Spark运行模式_Spark自带Cluster Manager的Standalone Client模式(集群)
  8. web项目由简入繁
  9. 北京Uber优步司机奖励政策(3月3日)
  10. Java:当前线程运行完毕,再运行后续逻辑