算法学习之:Raft-分布式一致性/共识算法

基础介绍

Raft是什么?

Raft is a consensus algorithm that is designed to be easy to understand. It's equivalent to Paxos in fault-tolerance and performance. The difference is that it's decomposed into relatively independent subproblems, and it cleanly addresses all major pieces needed for practical systems. We hope Raft will make consensus available to a wider audience, and that this wider audience will be able to develop a variety of higher quality consensus-based systems than are available today.

 Raft 是一种易于理解的共识算法(Consensus Algorithm)。它在容错性和性能方面与 Paxos 相当。所不同的是,它被分解成了相对独立的子问题,并简洁地解决了实际系统所需的所有主要问题。我们希望 Raft 能让更多人了解共识(Consensus),也希望更多的人能够开发出比现在更高质量的基于共识的系统。

Consensus又是什么?

Consensus is a fundamental problem in fault-tolerant distributed systems. Consensus involves multiple servers agreeing on values. Once they reach a decision on a value, that decision is final. Typical consensus algorithms make progress when any majority of their servers is available; for example, a cluster of 5 servers can continue to operate even if 2 servers fail. If more servers fail, they stop making progress (but will never return an incorrect result).

Consensus typically arises in the context of replicated state machines, a general approach to building fault-tolerant systems. Each server has a state machine and a log. The state machine is the component that we want to make fault-tolerant, such as a hash table. It will appear to clients that they are interacting with a single, reliable state machine, even if a minority of the servers in the cluster fail. Each state machine takes as input commands from its log. In our hash table example, the log would include commands like set x to 3. A consensus algorithm is used to agree on the commands in the servers' logs. The consensus algorithm must ensure that if any state machine applies set x to 3 as the nth command, no other state machine will ever apply a different nth command. As a result, each state machine processes the same series of commands and thus produces the same series of results and arrives at the same series of states.

 Consensus(共识)是容错分布式系统中的一个基本问题。Consensus(共识)涉及多个服务器就某个值达成一致。一旦它们就某个值达成一致,该决定就是最终决定。典型的共识算法会在大多数服务器可用时取得进展;例如,一个由 5 台服务器组成的集群,即使有 2 台服务器出现故障,也能继续运行。如果有更多的服务器出现故障,它们就会停止工作(但绝不会返回错误的结果)。

共识通常出现在复制状态机(state machine)中,这是构建容错系统的一种通用方法。每个服务器都有一个状态机和一个日志。状态机是我们希望实现容错的组件,例如哈希表。在客户端看来,即使集群中的少数服务器出现故障,他们也是在与一个单一、可靠的状态机(leader)进行交互。每个状态机都从日志中获取指令作为输入。在我们的哈希表示例中,日志将包括 set x to 3 这样的命令。共识算法必须确保,如果任何一台状态机将 set x to 3 作为第 n 条命令,其他状态机都不会使用不同的第 n 条命令。因此,每台状态机都会处理相同系列的命令,从而产生相同系列的结果,到达相同系列的状态。

总结:Raft算法是一种共识算法,旨在替代Paxos。它提供了一种在计算系统集群中分布状态机的通用方法,确保集群中的每个节点都同意一系列相同的状态转换。

详细介绍

实现原理:

Raft算法的实现原理主要围绕三个关键部分:领导者选举(Leader Election)、日志复制(Log Replication)和安全性(Safety)。

以下是Raft算法实现原理的详细介绍:

领导者选举(Leader Election)

  • 服务器状态:Raft中的服务器有三种状态:领导者(Leader)、追随者(Follower)和候选者(Candidate)。在初始状态下,所有节点都是追随者(Follower)。
  • 选举触发:当服务器启动时,它默认是追随者(Follower)状态。如果追随者在一段时间内没有收到来自领导者的心跳消息(通常是随机的超时时间),它将转变为候选者(Candidate)状态并发起领导者(Leader)选举。
  • 投票过程:候选者会向集群中的其他服务器请求投票。每个服务器在一个任期内只能投出一票,并且只会投给日志条目不落后于自己的候选者。如果候选者获得了集群中超过半数的投票,它将成为新的领导者。
  • 任期(Term):Raft通过递增的任期号来管理时间,每个成功的领导者选举都会开始一个新的任期。

日志复制(Log Replication)

  • 日志条目:在Raft中,所有的更新都是通过提交日志条目来实现的。客户端的请求会被作为新的日志条目附加到领导者的日志中。
  • 日志同步:领导者会将新的日志条目通过AppendEntries RPC同步给所有的追随者。只有当大多数的追随者都复制了日志条目后,这个条目才会被认为是已提交的,并且可以被应用到状态机中以更新系统状态。
  • 日志一致性:如果追随者的日志与领导者的日志不一致(即出现了“空洞”),追随者会丢弃自己日志中空洞之后的所有条目,并从领导者那里复制缺失的条目以重新同步。

安全性(Safety)

  • 选举限制Raft通过限制只有拥有最新日志的服务器才能成为领导者来确保安全性。这保证了已经被提交的日志条目不会被覆盖或删除。
  • 提交规则一个日志条目只有在被大多数服务器复制后才能被认为是已提交的。这确保了即使领导者崩溃,新的领导者也能从大多数服务器中恢复并提交这些条目。
  • 日志压缩为了限制日志的无限增长,Raft允许领导者和追随者截断旧的已提交的日志条目。但是,在截断之前,领导者必须确保新的领导者也包含了所有已提交的日志条目。

通过这些机制,Raft算法能够在分布式系统中提供强一致性和容错性。同时,它的设计相对简单易懂,使得在实际应用中更容易实现和维护。

注意:在实际实现Raft算法时,需要考虑一些关键细节,以确保算法的正确性和性能。

  1. 超时机制:跟随者在一段时间内未收到领导者的消息时,将触发超时机制并转换为候选者,发起领导者选举。这种机制有助于快速响应领导者故障,保证系统的可用性。
  2. 日志压缩:随着时间的推移,日志会不断增长,可能导致存储空间的浪费和性能下降。Raft算法通过日志压缩(Snapshot)技术来定期删除旧的日志条目,释放存储空间并保持系统的高效运行。
  3. 网络分区处理:在分布式系统中,网络分区是一种常见的故障模式。Raft算法通过领导者选举和日志复制机制来处理网络分区,确保在分区恢复后系统能够迅速恢复一致性。

优缺点:

Raft算法的优缺点主要体现在以下几个方面:

优点:

  1. 简单易懂:Raft算法相较于其他共识算法,如Paxos,设计更加直观和易于理解。这使得开发人员能够更容易地实现和调试分布式系统。
  2. 高可用性:Raft通过领导者选举和日志复制等机制确保了数据的一致性和可靠性。当领导者失效时,Raft能够快速进行新的领导者选举,从而保证系统的高可用性。
  3. 安全性:Raft算法在领导者选举和日志复制等过程中,通过一系列规则和机制保证了系统的安全性,避免了数据丢失或不一致等问题。
  4. 易于实现和维护:Raft算法详细描述了算法的实现细节,使得开发人员能够按照算法内容,按部就班地实现一个可用的分布式系统。同时,由于其简单易懂的特点,也使得系统维护变得更加容易。

缺点:

  1. 性能开销:Raft算法对于每个写操作都需要进行日志复制,这会带来一定的性能开销。相比于其他共识算法如Paxos,Raft算法的性能可能会稍差一些。
  2. 领导者单点故障:在Raft算法中,领导者是负责处理客户端请求和日志复制的节点。如果领导者失效,整个系统的性能和可用性都会受到影响。虽然Raft能够快速进行新的领导者选举,但在选举过程中,系统可能无法处理新的写请求。
  3. 数据一致性延迟:当领导者发生变更时,新的领导者需要等待日志复制完成才能处理客户端请求。这可能会导致一定的数据一致性延迟,即新的写请求可能需要在一段时间内才能被所有的节点所接受并应用。

总的来说,Raft算法以其简单易懂、高可用性和安全性等优点在分布式系统中得到了广泛的应用。然而,其性能开销、领导者单点故障和数据一致性延迟等缺点也需要在实际应用中加以考虑和解决。

同类算法比较

与Raft算法最为相似且经常被拿来比较的是Paxos算法。Paxos算法是一种经典的分布式一致性算法,具有广泛的应用场景。然而,Paxos算法的设计相对复杂,难以理解和实现。相比之下,Raft算法在保持Paxos算法的一致性和容错性的基础上,通过简化设计和降低复杂性,使得开发人员更容易实现和调试分布式系统。此外,Raft算法还通过增加强领导性和优化领导选举过程等特性,进一步提高了系统的性能和可用性。

容错设计:

Raft算法的容错设计是其核心特性之一,它确保了分布式系统在出现节点故障或网络分区等异常情况时,仍能保持系统的一致性和可用性。以下是关于Raft算法容错设计的更详细解释:

1. 领导者选举

在Raft中,领导者是处理客户端请求、管理日志复制和确保一致性的关键角色。如果领导者失效,系统会通过领导者选举来选出一个新的领导者。选举过程遵循以下规则:

  • 超时机制:每个服务器节点都有一个超时时间,如果在一定时间内没有收到领导者的心跳信息,节点就会认为领导者可能已经失效,并开始竞选成为新的领导者。
  • 投票机制:候选者会向集群中的其他节点发送请求投票的消息。节点在收到请求后,会检查请求者的日志是否比自己更新或至少和自己一样新。如果是,节点就会投票给请求者。当候选者收到超过半数的投票时,就会成为新的领导者。

这种选举机制确保了即使领导者失效,系统也能快速恢复到一个新的稳定状态,继续提供服务。

2. 日志复制

Raft通过日志复制机制来确保集群中所有节点上的日志保持一致,从而保证了数据的一致性和容错性。

  • 领导者发送日志:领导者会将客户端的请求作为新的日志条目追加到自己的日志中,并将这些条目发送给集群中的其他节点(即跟随者)。
  • 跟随者接收日志:跟随者在接收到领导者发送的日志条目后,会将其追加到自己的日志中,并回复领导者一个确认消息。
  • 领导者确认提交:当领导者确认大多数跟随者已经复制了某个日志条目时,就会将该条目标记为已提交。已提交的日志条目会被应用到状态机中以更新系统状态。

这种日志复制机制确保了即使某个节点失效,只要大多数节点仍然正常工作,系统就能够继续运行并保持一致性。因为已提交的日志条目已经被大多数节点所复制,所以即使某个节点失效,也不会影响整个系统的状态。

3. 安全性保证

Raft算法通过一系列规则来确保数据的安全性和一致性:

  • 领导者唯一性:在任何时候,集群中最多只有一个领导者。这避免了多个领导者同时处理请求导致的数据不一致问题。
  • 日志一致性:领导者在提交日志条目之前必须确保大多数跟随者已经复制了该条目。这确保了即使领导者失效,新的领导者也能从大多数跟随者那里获取到最新的日志数据。
  • 安全性限制:在选举过程中,只有拥有最新日志的节点才能成为领导者。这保证了新领导者在接管后能够继续之前的操作,不会丢失数据。

4. 处理网络分区

在网络分区的情况下,Raft能够确保在大多数节点所在的分区中选举出一个新的领导者,继续处理客户端的请求。当网络恢复后,被隔离的节点会自动与新领导者进行同步,确保数据的最终一致性。这种设计避免了在网络分区时出现多个领导者同时处理请求的情况,从而保证了数据的一致性和可靠性。

总的来说,Raft算法的容错设计通过领导者选举、日志复制、安全性保证以及处理网络分区等机制来确保分布式系统在面对各种异常情况时能够保持其一致性和可用性。这使得Raft算法成为构建高可用性和容错性分布式系统的理想选择。

参考地址:

Raft Consensus Algorithm

Paper: https://raft.github.io/raft.pdf

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/848365.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

React@16.x(19)事件的处理

目录 1,React 事件大致原理1.1,几乎所有的事件处理,都在 document 的事件中处理。1.2,事件参数 2,注意事项 1,React 事件大致原理 这里讨论的事件,是指在 React 内置组件上绑定的事件。 大致原理…

云端狂飙:Django项目部署与性能优化的极速之旅

Hello,我是阿佑,这次阿佑将手把手带你亲自踏上Django项目从单机到云端的全过程,以及如何通过Docker实现项目的无缝迁移和扩展。不仅详细介绍了Docker的基本概念和操作,还深入探讨Docker Compose、Swarm和Kubernetes等高级工具的使…

03-3.1.1 栈的基本概念

👋 Hi, I’m Beast Cheng👀 I’m interested in photography, hiking, landscape…🌱 I’m currently learning python, javascript, kotlin…📫 How to reach me --> 458290771qq.com 喜欢《数据结构》部分笔记的小伙伴可以订…

1Panel 搭建 halo博客

线上服务器一直闲置,刷到视频 1Panel 能更好管理服务器,还能快速搭建博客,便上手试试,的确很方便,顺手记录一下。 零、准备工作 一台服务器(按需购买,此处准备的阿里云服务器一台,也…

postman教程-14-生成随机数

领取资料,咨询答疑,请➕wei: June__Go 上一小节我们学习了Postman关联接口的调用方法,本小节我们讲解一下Postman生成随机数的方法。 在接口测试中,经常需要向接口发送不同的输入数据,以确保接口的健壮性和可靠性。…

02-2.3.5 静态链表

喜欢《数据结构》部分笔记的小伙伴可以订阅专栏,今后还会不断更新。🧑‍💻 此外,《程序员必备技能》专栏和《程序员必备工具》专栏(该专栏暂未开设)日后会逐步更新,感兴趣的小伙伴可以点一下订阅…

中国自动气象站:现代气象观测的中流砥柱

引言 气象观测是人类认识和预报天气的重要手段。在现代科技的推动下,自动气象站成为气象观测的重要工具,为天气预报、防灾减灾和气候研究提供了宝贵的数据支持。本文将介绍中国自动气象站的发展历程、技术特点及其在气象观测中的重要作用。 中国自动气象…

关于远程销售的电子课程开发

一家国际网络安全公司委托我们开发用于培训销售代表远程和电话销售的互动电子内容。我们在 Articulate Storyline 中创建了情节脚本和二维动画,以解释关键概念和销售技巧。互动元素使学习者可以按照自己的节奏进行学习,而我们的动画插图则使材料生动起来…

【成都信息工程大学】只考程序设计!成都信息工程大学计算机考研考情分析!

成都信息工程大学(Chengdu University of Information Technology),简称“成信大”,由中国气象局和四川省人民政府共建,入选中国首批“卓越工程师教育培养计划”、“2011计划”、“中西部高校基础能力建设工程”、四川…

运维系列.Linux下的用户管理

运维系列 Linux下的用户管理 - 文章信息 - Author: 李俊才 (jcLee95) Visit me at CSDN: https://jclee95.blog.csdn.netMy WebSite:http://thispage.tech/Email: 291148484163.com. Shenzhen ChinaAddress of this article:https://blog.csdn.net/qq_28550263/ar…

LabVIEW FPGA开发NI sbRIO-9607高精度数字滤波器

使用NI sbRIO-9607硬件平台,通过LabVIEW FPGA模块实现一个高精度数字滤波器。该应用不需要额外的实时操作系统 (RT),所有控制与数据处理均在sbRIO-9607的FPGA上完成,充分利用其并行处理能力,实现低延迟、高性能的数据滤波。这种滤…

最新 Navicat Data Modeler 4 | 产品介绍

在过去的几周里,我们已经介绍了 Navicat 版本 17,现在我们来把注意力转移到另外两个值得关注的产品上,即 Navicat Data Modeler 和 Navicat BI(之前称为 Navicat Chart Creator)。今天的博客将介绍 Navicat Data Model…

AI Agent:人类工作范式的颠覆者还是人机协作新范式?

编者按: 当前大热的大语言模型和检索增强生成模型,虽然在语言理解和内容生成方面取得了突破性的进展,但仍然存在诸多限制。它们缺乏根据目标导引行为、持续学习和与环境交互的能力,难以应对复杂多变的现实场景需求。 今天为大家带…

代理IP科普:IP黑名单与IP白名单的机制与作用

在IP代理使用中,我们经常听到黑名单与白名单两个名词,它们不仅提供了强大的防御机制,还可以灵活应对不同的安全威胁。本文将详细探讨IP黑名单和白名单在网络安全中的双重屏障作用。 一、IP黑名单和白名单定义 IP黑名单与IP白名单是网络安全中…

事务管理AOP

通过事务操作 删除部门的时候,同时删除员工,那么如果其中有异常,那么就进行事务回滚 使用注解Trance Transactional-propagation(传播行为)

基于协同过滤算法的东北特产销售系统的设计

基于协同过滤算法的东北特产销售系统的设计 管理员账户功能包括:系统首页,个人中心,管理员管理,基础数据管理,公告管理,新闻信息管理,商品管理 农户账户功能包括:系统首页&#xf…

vue3学习(七)

前言 接上一篇学习笔记,今天主要是分享上次学习完了,还没来得及记录,趁今天晚上换换脑子的时间记录下。 今天主要是记录的vuex文件的拆分,因为毕竟如果只在一个index.js文件写,文件会随着业务的复杂性上升&…

从0-1实现大模型

目录 输入数据准备 滑动窗口造数据 Data sampling with a sliding window 数据加载器的输出DataLoader 位置编码Encoding word positions 自注意力机制 点积的原理 QKV的原理 实现代码 Multi-head Attention 线性层 github: LLMs-from-scratch/ch02/01_main-chapte…

MySQL之查询性能优化(六)

查询性能优化 查询优化器 9.等值传播 如果两个列的值通过等式关联,那么MySQL能够把其中一个列的WHERE条件传递到另一列上。例如,我们看下面的查询: mysql> SELECT film.film_id FROM film-> INNER JOIN film_actor USING(film_id)-> WHERE f…

四川汇聚荣聚荣科技有限公司综合实力怎么样?

在科技日新月异的今天,企业的综合实力成为衡量其市场竞争力的重要指标。四川汇聚荣聚荣科技有限公司作为一家在行业内具有一定影响力的企业,其综合实力如何,自然成为外界关注的焦点。以下将从多个维度深入分析该公司的实力。 一、公司概况与核…