首页 > 编程语言 >Raft 算法

Raft 算法

时间:2023-08-13 14:33:51浏览次数:32  
标签:任期 Follower Leader 算法 Raft 日志 节点 RPC

论文 《In Search of an Understandable Consensus Algorithm》,发表于2014年

相比于 Paxos,Raft 最大的特性就是易于理解。为了达到这个目标,Raft主要做了两方面的事情:

  1. 问题分解:把共识算法分为三个子问题,分别是领导者选举 (leaderlection)、日志复制 (log replication)、安全性 (safety)
  2. 状态简化:对算法做出一些限制,减少状态数量和可能产生的变动。

1 复制状态机

复制状态机 (Replicated state machine):相同的初始状态 + 相同的输入 = 相同的结束状态。

多个节点上,从相同的初始状态开始,执行相同的一串命令,产生相同的最终状态。

在 Raft 中,leader 将客户端请求 (command) 封装到一个个日志实体 (log entry) 中,将这些 log entries 复制到所有 follower 节点,然后大家按相同顺序应用 log entries 中的 command,根据复制状态机的理论,大家的结束状态肯定是一致的。

image-20230812002539038

我们使用共识算法,就是为了实现复制状态机。一个分布式场景下的各节点间,就是通过共识算法来保证命令序列的一致,从而始终保持它们的状态一致,从而实现高可用的。(投票选主是一种特殊的命令)

拓展:复制状态机作为一种抽象的思想,其的功能可以更加强大。比如两个副本一个采用行存储的数据结构存储数据,另一个采用列存储,只要它们初始数据相同,并持续发给他们相同的命令,那么同一时刻从两个副本中读取到的结果也是一样的,这就是一种 HTAP 的实现方法 (如 TiDB)。

2 状态简化

在任何时刻,每一个服务器节点都处于 Leader, Follower, Candidate 这三种状态之一

相比于 Paxos,这一点极大简化了算法的实现,因为 Raft 只需考虑状态的切换,而不用像 Paxos 那样考虑状态之间的共存和互相影响。

  1. 任何一个节点启动时都处于 Follower 状态,若它察觉到集群中没有 Leader,就会将自己切换到 Candidate 状态。
  2. 在 Candidate 状态中进行一次或多次的选举,最终根据选举的结果决定将自己切换到 Leader 状态,或切换回 Follower 状态。
  3. 若选举成功,则切换到 Leader 状态并为客户端提供服务,若它在 Leader 状态的任期结束 or 自身发生宕机等问题,会切换回 Follower 状态,进行下一轮循环。
image-20230812003126788

Raft 把时间分割成任意长度的 任期 (term),任期用连续的整数标记,通常是 Int 型。

每一段任期从一次选举开始。在某些情况下,一次选举无法选出 Leader (没有任何一个节点的票数超过一半),在这种情况下,这一任期会以没有 Leader 结束,如图中的 t3;一个新的任期 (包含一次新的选举) 会很快重新开始。Raft 保证在任意一个任期内,最多只有一个 Leader。

image-20230812004215855

任期机制可以明确标识集群状态;且通过任期的比较可确认一台服务器历史的状态,

标签:任期,Follower,Leader,算法,Raft,日志,节点,RPC
From: https://www.cnblogs.com/angelia-wang/p/17626546.html

相关文章

  • 文心一言 VS 讯飞星火 VS chatgpt (75)-- 算法导论7.2 4题
    四、如果用go语言,银行一般会按照交易时间来记录某一账户的交易情况。但是,很多人却喜欢收到的银行对账单是按照支票号码的顺序来排列的。这是因为,人们通常都是按照支票号码的顺序来开出支票的,而商人也通常都是根据支票编号的顺序兑付支票。这一问题是将按交易时间排序的序列转换成按......
  • 通过一个实例的例子,学习 SAP Fiori 应用中的 Draft Handling(草稿机制)
    SAPFiori应用里的DraftHandling(草稿处理)是一种机制,用于在SAP业务数据的编辑过程中,实时保存未提交的更改。这样的机制允许用户在多个会话或者繁琐的表单填写步骤中,逐渐构建和修改数据,并在需要时将其提交。DraftHandling在SAPFiori应用中起到重要的作用,可以在不中断现有......
  • Fiori 应用的 draft 处理机制
    注意本文只针对FioriDrafthandling做一个泛泛的概念介绍。如果大家想通过一个具体的实例来了解,可以阅读我这篇文章:5.通过一个实例的例子,学习SAPFiori应用中的DraftHandling(草稿机制)SAPFiori应用里的DraftHandling(草稿处理)是一种机制,用于在业务数据的编辑过......
  • 文心一言 VS 讯飞星火 VS chatgpt (75)-- 算法导论7.2 4题
    四、如果用go语言,银行一般会按照交易时间来记录某一账户的交易情况。但是,很多人却喜欢收到的银行对账单是按照支票号码的顺序来排列的。这是因为,人们通常都是按照支票号码的顺序来开出支票的,而商人也通常都是根据支票编号的顺序兑付支票。这一问题是将按交易时间排序的序列转换成......
  • 算法刷题:数组题(持续更)
    算法刷题系列:算法刷题:链表题(持续更)力扣链接:删除有序数组中的重复项删除排序链表中的重复元素移除元素移除链表元素两数之和反转字符串反转链表验证回文串验证回文串II目录快速排序原理代码实现快慢指针注意事项异步移动删除有序数组的重复项代码实现对比链表的删......
  • C#快速排序算法
    快速排序实现原理快速排序(QuickSort)是一种常用的排序算法,它基于分治的思想,通过将一个无序的序列分割成两个子序列,并递归地对子序列进行排序,最终完成整个序列的排序。其基本思路如下:选择数组中的一个元素作为基准(pivot)。将数组中小于等于基准的元素放在基准的左边,将大于基......
  • Extended Kalman Filter vs. Error State Kalman Filter for Aircraft Attitude Estim
    EKF与ESKF的对比“Engineerscansolveexactproblemsusingnumericalapproximations,ortheycansolveapproximateproblemsexactly"-FredDaum.对出现在实际问题中的非线性的运动学(dynamic)模型以及/或非线性的观测方程进行线性化的操作,然后基于这个线性化的方程计算......
  • [算法考研笔记]mm算法随笔[成绩划分][回溯0-1][得分][字段和][聪明小偷][股票买卖]
    mm算法随笔学习笔记(回溯算法)回溯<---->递归1.递归的下面就是回溯的过程回溯法是一个纯暴力的搜索、有的时候暴力求解都没有办法,用回溯可以解决。回溯法解决的问题:组合问题如:1234两两组合切割问题如:一个字符串有多少个切割方式,或者切割出来是回文子集问题:1......
  • 前端开发工程师需要掌握哪些算法?
    一个程序员一生中可能会邂逅各种各样的算法,但总有那么几种,是作为一个程序员一定会遇见且大概率需要掌握的算法。作为一名前端开发工程师,今天就通过这个话题和文章来聊聊前端开发工程师需要掌握的算法有哪些呢。......
  • 基于GMM高斯混合模型的语音信息身份识别算法的matlab仿真
    1.算法理论概述一、引言     语音信息身份识别是指通过声音信号对个体进行身份识别的过程。目前,语音信息身份识别已经成为语音处理领域的一个热门研究方向。在语音信息身份识别中,高斯混合模型(GMM)是一种被广泛应用的方法。本文将详细介绍基于GMM的语音信息身份识别算法的实......