分布式学习笔记1-分布式算法Raft

Raft 是一种易于理解的分布式选举算法,用于解决分布式系统中的领导节点选举和日志复制问题。本文介绍了Raft的基本原理,包括Server状态、Term、选举过程、日志复制、异常情况和服务器节点变更等,并探讨了开源实现和线性读操作。
摘要由CSDN通过智能技术生成

简介

Raft是今比较流行的一个分布式选举算法。在它出来之前,业界只有Paxos一种算法。但是Paxos是非常难以理解,更不用说有统一的算法方案。Raft的出现,就是为了提供一个通俗易懂,容易实现的分布式方案。研究论文和相关源码已久,写下此文笔记,希望能对你也有一些启发。

基本原理

Server状态

集群的每个机器可以有3种角色状态

  • Leader 每个集群只能有一个,处理所有client的请求,日志复制。
  • Follower 普通的Server,完全被动的,只会对收到的消息进行回应。
  • Candidate 候选人,当进入新一轮选举的时候,所有的候选人都会发起投票。重新选出一个新leader

三者之间的关系,可以互相转换,如果下图
在这里插入图片描述

  1. 最开始,所有的Server都是Follower。
  2. 如果Follower没有收到心跳,就会变成Candidate
  3. Candidate 开始进行新一轮的选举,其中一个成为新的Leader,其余的成为Follower。
  4. Leader如果收到更大的Term(任期)消息,就降级为普通的Follower。

Term

时间划分为不同的Term(任期)。每次导致新的选举发生,Term就会改变+1.一个Term包括两个阶段:选举和正常阶段。每个服务器都会保存当前的任期Current Term。用于发送和接受RPC消息时验证比较。
在这里插入图片描述

Log Entry

每一个client操作,对于Leader来说,都是增加一个Log Entry,然后复制同步到其他的Server。包括以下数据:

  • term Leader收到log时的term
  • index log下标。log存储结构是一个List
  • command 操作指令

Persistent State 持久化状态

每个server都会在本地存储一些持久化状态,每次在相应rpc时先持久化

  • currentTerm 当前Term,启动的时候是0
  • voteFor 当前term收到的投票
  • log[] 日志数据

选举过程

当一个Follower没有收到Leader的心跳时,就会投票开始新一轮的选举。所以当Leader出现故障时,可能有多个Follower变成Candidate开始投票。这里有个细节,就是开始的时间是不同的,是一个随机100-500ms,这样可以更快速产生新的Leader。

  1. 当前Term 增加1。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值