• 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. 节点在获取数据为空时,同时随机请求其他节点,查看数据是否完毕
    
  • 相关阅读:
    GIT学习实践笔记
    ubuntu 安装pygit2
    强化vim打造python的IDE
    Python Django学习和实践
    浏览器调试工具网页性能分析中的使用
    公司发版shell脚本重构
    Nightwatch+gulp
    Git
    JavaScript Unit Test with Qunit
    Unit Test Mocking Framework
  • 原文地址:https://www.cnblogs.com/bergus/p/gossip-ban-benraft-suan-fa-shi-xian.html
Copyright © 2020-2023  润新知