Java学习 - Raft协议

CAP理论

  • C:consensus,一致性
  • A:availabili,可用性
  • P:partition tolerance,分区容错性
  • 一个分布式系统中,无法同时满足CAP三个要求,只能舍弃其中一个

一致性模型

  • 弱一致性
    • 只保证最终结果是一致的
    • 例子:DNS服务器,Gossip
  • 强一致性
    • 保证每时每刻都是一致的
    • 例子:Paxos,Raft,ZAB

强一致性算法思想

  • 主从复制:如果一个从节点失败,则Master阻塞,导致整个集群不可用,保证了一致性,却大大降低了可用性,不可取
  • 大多数原则:每次写入都保证写入大于N/2个节点,每次读取都保证大于从N/2个节点读

Raft协议是什么

  • Raft协议是分布式系统强一致性算法

  • Raft协议来自Stanford,根据Paxos算法改进而来

Raft协议核心

  • Raft协议主要依靠选举机制,日志复制和大多数原则实现分布式一致性

Raft协议概述

  • Raft协议规定分布式系统中的节点状态有三种,分别为:领导者,跟随者,被选举者
  • 新数据只能通过领导者写入,新数据会写入领导者的日志中,新数据会放入心跳包中发送给跟随者,跟随者收到最新数据后会写进跟随者的日志中,然后发送响应包给领导者
  • 当领导者知道大多数跟随者已经完成日志写入后,会将数据提交,然后通过心跳包告诉跟随者和用户新数据已经完成提交,跟随者也提交数据
  • 用户只能访问到已经提交的数据

Raft协议选举过程

  • Raft协议规定每个跟随者有一个超时时间,这个超时时间是随机的
  • 当一个跟随者在超时时间内都没有收到领导者发送的心跳包,则会转变为被选举者,向其他的节点发送信息,请求投票
    • 如果被选举者得到超过半数的票,则成为下一任领导者,会通过发送心跳包,将自己的数据发送给跟随者,跟随者完成同步写入
    • 如果被选举者没有得到超过半数票,则进入下一次超时等待
  • 当系统中两个节点同时参数选举,并且获得相同的票数,则两个节点分别等待不同的时间,谁先超时,谁成为新的一任领导者

Raft协议处理网络分区

  • 当系统中存在网络分区时,每个分区中如果不存在leader,则会选举出一个新的leader,每个leader都会接收用户写入,并告知其跟随者进行写入
    • 如果分区中没有大多数(以所有分区的全部节点总数为标准)节点完成复制,则无法进行提交,整个分区处于卡住状态
    • 如果有大多数节点写入,则进行提交
  • 当网络分区恢复后,任期小的分区节点会放弃当前未提交内容,转而去同步任期大的分区的leader的数据
  • 6
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值