iis服务器助手广告广告
返回顶部
首页 > 资讯 > 前端开发 > node.js >如何理解分布式Raft
  • 893
分享到

如何理解分布式Raft

2024-04-02 19:04:59 893人浏览 安东尼
摘要

本篇内容主要讲解“如何理解分布式Raft”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何理解分布式Raft”吧!一、Raft 概述Raft 算法是分布式系统开

本篇内容主要讲解“如何理解分布式Raft”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何理解分布式Raft”吧!

一、Raft 概述

Raft 算法分布式系统开发首选的共识算法。比如现在流行 Etcd、Consul。

如果掌握了这个算法,就可以较容易地处理绝大部分场景的容错和一致性需求。比如分布式配置系统、分布式 NoSQL 存储等等,轻松突破系统的单机限制。

Raft 算法是通过一切以领导者为准的方式,实现一系列值的共识和各节点日志的一致。

二、Raft 角色

2.1  角色

跟随者(Follower):普通群众,默默接收和来自领导者的消息,当领导者心跳信息超时的时候,就主动站出来,推荐自己当候选人。

候选人(Candidate):候选人将向其他节点请求投票 rpc 消息,通知其他节点来投票,如果赢得了大多数投票选票,就晋升当领导者。

领导者(Leader):霸道总裁,一切以我为准。处理写请求、管理日志复制和不断地发送心跳信息,通知其他节点“我是领导者,我还活着,你们不要”发起新的选举,不用找新领导来替代我。

如下图所示,分别用三种图代表跟随者、候选人和领导者。

如何理解分布式Raft

角色

三、单节点系统

3.1 数据库服务器

现在我们想象一下,有一个单节点系统,这个节点作为数据库服务器,且存储了一个值为 X。

如何理解分布式Raft

数据库服务器

3.2 客户端

左边绿色的实心圈就是客户端,右边的蓝色实心圈就是节点 a(node a)。Term 代表任期,后面会讲到。

如何理解分布式Raft

客户端

3.3 客户端向服务器发送数据

客户端向单节点服务器发送了一条更新操作,设置数据库中存的值为 8。单机环境下(单个服务器节点),客户端从服务器拿到的值也是  8。一致性非常容易保证。

如何理解分布式Raft

客户端向服务器发送数据

3.4  多节点如何保证一致性?

但如果有多个服务器节点,怎么保证一致性呢?比如有三个节点:a,b,c。如下图所示。这三个节点组成一个数据库集群。客户端对这三个节点进行更新操作,如何保证三个节点中存的值一致?这个就是分布式一致性问题。Raft  算法就是来解决这个问题的。当然还有其他协议也可以保证,本篇只针对 Raft 算法。

如何理解分布式Raft

在多节点集群中,在节点故障、分区错误等异常情况下,Raft 算法如何保证在同一个时间,集群中只有一个领导者呢?下面就开始讲解 Raft  算法选举领导者的过程。

四、选举领导过程

4.1 初始状态

初始状态下,集群中所有节点都是跟随者的状态。

如下图所示,有三个节点(Node) a、b、c,任期(Term)都为 0。

如何理解分布式Raft

初始状态

4.2 成为候选者

Raft 算法实现了随机超时时间的特性,每个节点等待领导者节点心跳信息的超时时间间隔是随机的。比如 A 节点等待超时的时间间隔 150  ms,B 节点 200 ms,C 节点 300 ms。那么 a  先超时,最先因为没有等到领导者的心跳信息,发生超时。如下图所示,三个节点的超时计时器开始运行。

如何理解分布式Raft

超时时间

当 A 节点的超时时间到了后,A 节点成为候选者,并增加自己的任期编号,Term 值从 0 更新为 1,并给自己投了一票。

  • Node A:Term = 1, Vote Count = 1。

  • Node B:Term = 0。

  • Node C:Term = 0。

如何理解分布式Raft

成为候选者

4.3 投票

我们来看下候选者如何成为领导者的。

如何理解分布式Raft

Leader 选举

  • 第一步:节点 A 成为候选者后,向其他节点发送请求投票 RPC 信息,请它们选举自己为领导者。

  • 第二步:节点 B 和 节点 C 接收到节点 A 发送的请求投票信息后,在编号为 1 的这届任期内,还没有进行过投票,就把选票投给节点  A,并增加自己的任期编号。

  • 第三步:节点 A 收到 3 次投票,得到了大多数节点的投票,从候选者成为本届任期内的新的领导者。

  • 第四步:节点 A 作为领导者,固定的时间间隔给 节点 B 和节点 C 发送心跳信息,告诉节点 B 和 C,我是领导者,组织其他跟随者发起新的选举。

  • 第五步:节点 B 和节点 C 发送响应信息给节点 A,告诉节点 A 我是正常的。

4.4 任期

英文单词是 term,领导者是有任期的。

  • 自动增加:跟随者在等待领导者心跳信息超时后,推荐自己为候选人,会增加自己的任期号,如上图所示,节点 A 任期为 0,推举自己为候选人时,任期编号增加为  1。

  • 更新为较大值:当节点发现自己的任期编号比其他节点小时,会更新到较大的编号值。比如节点 A 的任期为 1,请求投票,投票消息中包含了节点 A  的任期编号,且编号为 1,节点 B 收到消息后,会将自己的任期编号更新为 1。

  • 恢复为跟随者:如果一个候选人或者领导者,发现自己的任期编号比其他节点小,那么它会立即恢复成跟随者状态。这种场景出现在分区错误恢复后,任期为 3  的领导者受到任期编号为 4 的心跳消息,那么前者将立即恢复成跟随者状态。

  • 拒绝消息:如果一个节点接收到较小的任期编号值的请求,那么它会直接拒绝这个请求,比如任期编号为 6 的节点 A,收到任期编号为 5 的节点 B 的请求投票  RPC 消息,那么节点 A 会拒绝这个消息。

4.5 选举规则

一个任期内,领导者一直都会领导者,直到自身出现问题(如宕机),或者网络问题(延迟),其他节点发起一轮新的选举。

在一次选举中,每一个服务器节点最多会对一个任期编号投出一张选票,投完了就没了。

4.6 大多数

假设一个集群由 N 个节点组成,那么大多数就是至少 N/2+1。例如:3 个节点的集群,大多数就是 2。

4.7 心跳超时为了防止多个节点同时发起投票,会给每个节点分配一个随机的选举超时时间。这个时间内,节点不能成为候选者,只能等到超时。比如上述例子,节点 A  先超时,先成为了候选者。这种巧妙的设计,在大多数情况下只有一个服务器节点先发起选举,而不是同时发起选举,减少了因选票瓜分导致选举失败的情况。

如何理解分布式Raft

成为候选者

五、领导者故障

如果领导者节点出现故障,则会触发新的一轮选举。如下图所示,领导者节点 B 发生故障,节点 A 和 节点 B 就会重新选举  Leader。

如何理解分布式Raft

领导者故障

  • 第一步 :节点 A 发生故障,节点 B 和节点 C 没有收到领导者节点 A 的心跳信息,等待超时。

  • 第二步:节点 C 先发生超时,节点 C 成为候选人。

  • 第三步:节点 C 向节点 A 和节点 B 发起请求投票信息。

  • 第四步:节点 C 响应投票,将票投给了 C,而节点 A 因为发生故障了,无法响应 C 的投票请求。

  • 第五步:节点 C 收到两票(大多数票数),成为领导者。

  • 第六步:节点 C 向节点 A 和 B 发送心跳信息,节点 A 响应心跳信息,节点 B 不响应心跳信息。

到此,相信大家对“如何理解分布式Raft”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

--结束END--

本文标题: 如何理解分布式Raft

本文链接: https://www.lsjlt.com/news/83948.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 如何理解分布式Raft
    本篇内容主要讲解“如何理解分布式Raft”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何理解分布式Raft”吧!一、Raft 概述Raft 算法是分布式系统开...
    99+
    2024-04-02
  • 如何实现分布式共识算法Raft
    本篇内容主要讲解“如何实现分布式共识算法Raft”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何实现分布式共识算法Raft”吧!关于CAP原理C(一致性)A(...
    99+
    2024-04-02
  • 如何理解分布式事务
    本篇内容主要讲解“如何理解分布式事务”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何理解分布式事务”吧!事务要说分布式事务,首先...
    99+
    2024-04-02
  • 如何理解Java分布式事务
    今天小编给大家分享一下如何理解Java分布式事务的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下...
    99+
    2024-04-02
  • 分布式事务该如何理解
    这篇文章给大家介绍分布式事务该如何理解,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。先上场景:压力测试,同时1万个买家在店铺Shang1购买东西,每个买家账户向shang1账户付钱。    &nbs...
    99+
    2023-06-02
  • 如何理解分布式中的TCC模式
    这篇文章主要介绍“如何理解分布式中的TCC模式”,在日常操作中,相信很多人在如何理解分布式中的TCC模式问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何理解分布式中的TCC...
    99+
    2024-04-02
  • 如何理解分布式系统下基于Redis的分布式锁
    这篇文章主要介绍“如何理解分布式系统下基于Redis的分布式锁”,在日常操作中,相信很多人在如何理解分布式系统下基于Redis的分布式锁问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大...
    99+
    2024-04-02
  • 如何深入理解Redis分布式锁
    这篇文章主要介绍“如何深入理解Redis分布式锁”,在日常操作中,相信很多人在如何深入理解Redis分布式锁问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何深入理解Redi...
    99+
    2024-04-02
  • 如何理解分布式锁的封装
    本篇内容主要讲解“如何理解分布式锁的封装”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何理解分布式锁的封装”吧!分布式锁通常有很多选择,基于 Redis 的,...
    99+
    2024-04-02
  • 如何理解分布式锁的场景
    本篇内容主要讲解“如何理解分布式锁的场景”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何理解分布式锁的场景”吧!秒杀场景案例对于商品秒杀的场景,我们需要防止库...
    99+
    2024-04-02
  • 如何理解Redisson分布式锁的源码
    本篇内容介绍了“如何理解Redisson分布式锁的源码”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Red...
    99+
    2024-04-02
  • 如何理解C#.NET分布式锁服务
    本篇文章给大家分享的是有关如何理解C#.NET分布式锁服务,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。背  景分布式锁服务在大家的项目中或许用的不多,因为大家都把排...
    99+
    2023-06-17
  • Java分布式一致性协议与Paxos,Raft算法是什么
    这篇文章主要讲解了“Java分布式一致性协议与Paxos,Raft算法是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java分布式一致性协议与Paxos,Raft算法是什么”吧!2PC...
    99+
    2023-06-04
  • 深入理解:分布式之抉择分布式锁
    前言:目前网上大部分的基于zookpeer,和redis的分布式锁的文章都不够全面。要么就是特意避开集群的情况,要么就是考虑不全,读者看着还是一脸迷茫。坦白说,这种老题材,很难写出新创意,博主内心战战兢兢,如履薄冰,文中有什么不严谨之处,欢...
    99+
    2023-06-05
  • 如何理解TiDB的分布式事务模型
    本篇内容介绍了“如何理解TiDB的分布式事务模型”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!在传统关系型...
    99+
    2024-04-02
  • 基于Zookeeper的分布式锁该如何理解
    今天就跟大家聊聊有关基于Zookeeper的分布式锁该如何理解,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。实现分布式锁目前有三种流行方案,分别为基于数据库、Redis、Zookee...
    99+
    2023-06-04
  • 详解如何在springcloud分布式系统中实现分布式锁
    目录一、简介 二、redis命令介绍 三、实现思路 四、编码实现 五、注意点 六、参考资料 最近在看分布式锁的资料,看了 Josial L的《Redis in Action》的分布式...
    99+
    2024-04-02
  • C#开发中如何处理分布式事务和分布式缓存
    C#开发中如何处理分布式事务和分布式缓存,需要具体代码示例摘要:在分布式系统中,事务处理和缓存管理是至关重要的两个方面。本文将介绍C#开发中如何处理分布式事务和分布式缓存,并给出具体的代码示例。引言随着软件系统的规模与复杂度增加,许多应用都...
    99+
    2023-10-22
    分布式缓存 C#开发 分布式事务处理
  • 怎么理解Redis分布式锁
    这篇文章主要讲解了“怎么理解Redis分布式锁”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么理解Redis分布式锁”吧!你真的需要分布式锁吗用到分布式锁...
    99+
    2024-04-02
  • 分布式系统中的那些一致性(CAP、BASE、2PC、3PC、Paxos、ZAB、Raft)
    本文介绍 CAP、BASE理论的正确理解、Paxos 算法如何保证一致性及死循环问题、ZAB 协议中原子广播及崩溃恢复以及 Raft 算法的动态演示。 下面还有投票,一起参与进来吧👍 文章目录 前言CAP理论理...
    99+
    2023-08-19
    java 分布式 大数据
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作