• 6、Raft协议


    一、Raft协议介绍

    raft也是很多分布式中间件采用的一种协议,网上找一篇raft文章 Raft协议--中文论文介绍 。这篇文章理解比较费劲,下面就自己的理解整理下raft协议。

    二、Raft节点角色

    1、leader-领导者

    1、给follower发送心跳
    2、处理写请求
    3、发起投票
    4、负责写请求

    2、candidate-候选者【中间态】

    1、当follower、leader心跳超时follower转化为candidate状态

    2、投票选举leade

    3、candidate有选举和被选举权

    3、follower-跟随者

    1、当follower、leader心跳超时follower转化为candidate状态

    2、读请求 - 直接请求路由给主 - 所有读请求给主,选主状态读不可用

    3、读请求 - 获取主的数据同步readIndex - 如果follower与leader数据同步状态,则从follower返回读数据,否则等待follower与leader数据同步

    4、读请求 - 直接从follower返回数据 - 可能出现脏数据性能最高


    三、消息同步状态

    leader在同步消息过程类似 二阶段提交过程 ,首先leader接收所有写请求,然后发起投票,当半数的follower投票通过,leader提交事务(commit自己、commit follower),否则leader回滚事务。 消息同步的方式是leader将事务消息日志的readindex顺序告诉follower,follower负责保持日志一致,这样避免同步阻塞,这点不同于zab的思想。


    四、崩溃时刻

    follower找到最大的readIndex提交记编号,然后各个节点找到,彼此日志段之间的差距,然后补充齐缺少日志,思想只同步自己需要的日志。这点和zab的思想不一致,zab是zxid比大小同步差异段,看起来zxid比较简单,但是日志创建过程涉及到顺序锁等其实更复杂。
     

    四、Raft总结

    我看别人写的论文看着太复杂,自己就自己的理解总结下raft协议。raft和zab主流思想一直,但是在角色、消息同步、消息读、崩溃时刻处理方式不一样,比zab实现更简单。

  • 相关阅读:
    java Spring Boot验证码美化,白色背景 随机四个数 每个字随机颜色
    2014
    若依vue集成electron实现打包exe应用程序
    Vue原理及源码设计模式
    Java多线程基础
    02Redis的命令行客户端和桌面客户端的下载和安装
    零数科技深度参与信通院隐私计算金融场景标准制定
    nodejs+vue+elementui在线公益-帮助流浪动物网站python java
    【HTML/CSS学习】margin和padding的区别
    安卓系统精简与优化
  • 原文地址:https://blog.csdn.net/god8816/article/details/127966231