前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >分布式系统之Raft共识算法

分布式系统之Raft共识算法

作者头像
公众号_松华说
发布于 2019-07-19 08:04:28
发布于 2019-07-19 08:04:28
7290
举报
文章被收录于专栏:松华说松华说

分布式系统除了提升整个体统的性能外还有一个重要特征就是提高系统的可靠性。提供可靠性可以理解为系统中一台或多台的机器故障不会使系统不可用或者丢失数据。保证系统可靠性的关键就是多副本,一旦有多副本,那么就面临多副本之间的一致性问题

一致性算法正是用于解决分布式环境下多副本之间数据一致性的问题的。业界最著名的一致性算法就是大名鼎鼎的Paxos,但Paxos是出了名的难懂,而Raft正是为了探索一种更易于理解的一致性算法而产生的,它将一致性拆分为leader选举、日志复制、安全性三个关键元素

1、leader选举

Raft算法将时间划分成为任意不同长度的任期(term),任期用连续的数字表示,每一个任期的开始都是一次选举。如果一个侯选人赢得了选举,它就会在该任期的余下时间担任领导人,如果没有选出领导人,将会开始另一个任期,并且立刻开始下一次选举

那么什么时候开始选举呢?实际上leader会向所有follower周期性发送心跳,来保证它们的leader地位,如果一个follower在一个周期内没有收到heartbeat信息,那么它就会假定没有可用的leader,自已就转换状态成为候选人,并且开始一次选举来选出一个新的leader

Raft选举过程有三个规则

(1)、规则:如果请求投票的服务器任期比自己的任期大,则给该服务器投票

(2)、规则:在一个任期内,一台服务器最多能给一个侯选人投票,按照先到先得的原则

(3)、规则:随机选举超时

为了避免选票被平分,没有服务器成为leader,每台服务器在一个固定的范围内随机选取,从而使每台服务器的选举超时时间均不相同,这种机制使得在大多数情况下只有一个服务器会率先超时,它会在其他服务器超时之前赢得选举并且向其它服务器发送heartbeat信息

当候选人收到大多数节点的选票则转换为leader,发现leader或者收到更高任期的请求则转换为follower,在角色转换的时候遵守选举安全原则,一个任期(term)内最多允许有一个leader被选上

2、日记复制

要理解为日记复制得先搞明白日记匹配原则和可被提交的日记这两个概念 日记匹配原则描述的是,如果在不同日记中的两个条目有着相同的索引和任期号,则它们存储的命令是相同的。如果在不同日记中的两个条目有着相同的索引和任期号,则它们之间的所有条目都是完全相同的 可被提交的日记描述的是,一旦被leader创建的条目已经复制到了大多数服务器上,这个日记就称为可被提交的。leader日记中之前的条目都是可被提交的,包括由之前的leader创建的条目

在日记复制流程中,leader需要找到follower同它的日记一致的地方,然后删除follower在该位置之后的条目,然后将自己在该位置之后的条目发送给follower

完整流程是,client向leader发出请求,leader将日记条目加入到它的日志中,并行向follower服务器发起日记复制请求,leader确认日记条目被安全复制后,将该条目应用到状态机,然后向client返回结果,向follower发出可以提交该日记条目的请求。当一个服务器已经将给它索引位置的日记条目应用到状态机中,则所有其他服务器不会在该索引位置应用不同的条目

在日记复制中,可能会出现各种各样的异常

(1)、异常:数据发送到leader,但未复制到follower

leader异常,client接收不到ack,重新选举后,client可重新向leader发出请求 (2)、异常:数据到达leader节点,成功复制到follower所有节点,但未向leader响应接收

重新选举后,虽然数据在follower节点处于未提交状态但保持一致,重新选举出leader后可完成数据提交,由于原leader异常,client无法接收到ack,会重新向leader发出请求,Raft要求RPC幂等,所以服务器要实现去重机制 (3)、异常:数据到达leader节点,成功复制到follower所有或多数节点,数据在leader处于已提交状态,但在follower处于未提交状态

这个阶段leader挂掉,重新选出新leader

(4)、异常:由于网络”分区”导致出现双leader 以5个服务器节点为例,正常情况下A节点为leader,接收client的请求,并将日记同步到B、C、D、E四个follower节点。由于网络原因,A、B节点无法与C、D、E进行通信,C、D、E重新选举,选择leader,假设E节点胜出,此时出现双leader。随后网络恢复,A、B将做为E的follower

3、安全性 Raft通过比较日记中最后一个条目的索引和任期号来决定两个日记哪一个更新,如果两个日记的任期号不同,任期号大的更新,如果任期号相同,更长的日记更新 Raft为了保证安全性,约定了一些选举限制,RequestVote RPC中包含候选人的日记信息,如果服务器自己的日记比候选人还要新,则会拒绝为该候选人投票

这个行为背后是leader完全原则,如果一个日记条目在一个给定任期内被提交,那么这个条目一定会出现在所有任期号更大的leader中。所有的日志条目都只会从leader节点往follower节点写入,且leader节点上的日志只会增加,绝对不会删除或者覆盖

参考

1、https://ramcloud.atlassian.net/wiki/download/attachments/6586375/raft.pdf (Raft一致性算法论文原文) 2、http://www.infoq.com/cn/articles/raft-paper(Raft一致性算法论文译文) 3、http://thesecretlivesofdata.com/raft/ (Raft一致性算法演示动画) 4、https://raft.github.io/ (Raft一致性算法官网) 5、相关BLOG http://blog.csdn.net/cszhouwei/article/details/38374603 http://www.cnblogs.com/mindwind/p/5231986.html

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-07-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 松华说 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
聊聊 分布式一致性算法 Raft
为了便于后续的讲解,我画了一副简图,“选举定时器”其实就是每个节点的“超时时间”。
码猿技术专栏
2023/05/01
4190
聊聊 分布式一致性算法 Raft
分布式环境Raft一致性共识算法解读
Raft是分布式环境下的一致性算法,它通过少数服从多数的选举来维持集群内数据的一致性。它与RBFT算法名称有点像,然而Raft算法里不能存在拜占庭节点,而RBFT则能容忍BFT节点的存在。Raft非常类似于paxos协议(参见我的这篇文章《paxos算法如何容错的–讲述五虎将的实践》),然而它比paxos协议好理解许多(因为paxos协议难以具体实现,所以zookeeper参考paxos实现了它自己的Zab算法)。同样,Raft有一个用GO语言实现的etcd服务,它的功能与Zookeeper相同,在容器操作系统CoreOS作为核心组件被使用。
陶辉
2019/06/21
1K0
分布式环境Raft一致性共识算法解读
一致性算法 - Raft协议流程
咱们上文整体的介绍了下Raft协议,Raft协议分区容忍的一致性协议的核心思想:一致性的保证不一定非要所有节点都保持一致,只要大多数节点更新了,对于整个分布式系统来说数据也是一致性的。Raft 协议将概念分解成:Leader election、Log replication、Safety。Raft 把一致性协议划分为 Leader 选举、MemberShip 变更、日志复制、Snapshot 等几个几乎完全解耦的模块,实现了模块化设计。
林淮川
2020/08/03
8040
分布式一致性协议之Raft
你可以想象下我们的一个节点作为一个保存单一值的数据库服务,我们有一个client可以向server发送一个值。client与server的关系如下图:
山行AI
2020/03/11
1.4K0
分布式一致性协议之Raft
浅谈分布式一致性算法raft
前言:在分布式的系统中,存在很多的节点,节点之间如何进行协作运行、高效流转、主节点挂了怎么办、如何选主、各节点之间如何保持一致,这都是不可不面对的问题,此时raft算法应运而生,专门 用来解决上述问题。对于分布式的一致性算法,著名的有paxos,zookeeper基于paxos提出了zab协议, paxos是出名的晦涩难懂.而raft的设计初衷就是容易理解和简单、高效,本篇博客我们就来循序渐进的看看raft到底是什么?它的运行原理是什么样的?
肉眼品世界
2021/03/09
7380
浅谈分布式一致性算法raft
分布式一致性之raft算法
Raft 算法是通过一切以领导者为准的方式,实现一系列值的共识和各节点日志的一致。 熟悉吗?redis的哨兵用的就是这一套,不过哨兵简化了一些部分,提升了运行效率,降低了一致性,保证了最终一致性。
看、未来
2022/01/10
5370
分布式基础概念-选举算法
Paxos算法解决的是一个分布式系统如何就某个值(决议)达成一致。一个典型的场景是,在一个分布式数据库系统中,如果各个节点的初始状态一致,每个节点执行相同的操作序列,那么他们最后能够得到一个一致的状态。为了保证每个节点执行相同的操作序列,需要在每一条指令上执行一个“一致性算法”以保证每个节点看到的指令一致。在Paxos算法中,有三种角色:Proposer (提议者),Acceptor(接受者),Learners(记录员)
@派大星
2023/10/25
3830
分布式基础概念-选举算法
Etcd Raft算法机制
Raft是一个用于管理日志一致性的协议。它将分布式一致性分解为多个子问题:Leader选举(Leader election)、日志复制(Log replication)、安全性(Safety)、日志压缩(Log compaction)等。同时,Raft算法使用了更强的假设来减少了需要考虑的状态,使之变的易于理解和实现。Raft将系统中的角色分为领导者(Leader)、跟从者(Follower)和候选者(Candidate):
用户5760343
2019/10/29
1.5K0
Etcd Raft算法机制
分布式认知-RAFT选举
最近在学习Raft协议——一个用于管理日志一致性的协议,发现网上有关Raft选举逻辑描述不够全乎,特地咨询一些业界大佬,并将选举相关知识整理如下:
Janesong
2024/07/09
3540
一致性算法Raft 简易入门
当我们只有一个服务节点的情况下,是不存在节点共识的问题的,当存在多个不同服务节点时,才会引入分布式一致性的问题。
架构精进之路
2020/08/17
4890
一致性算法Raft 简易入门
拜占庭将军问题和 Raft 共识算法讲解
Tech 导读 在分布式系统中, 什么是拜占庭将军问题?产生的场景和解决方案是什么?什么是 Raft 共识算法?Raft 算法是如何解决拜占庭将军问题的?其核心原理和算法逻辑是什么?除了 Raft,还有哪些共识算法?共识问题作为分布式系统的一大难点和痛点,本文主要介绍了其产生的背景、原因,以及通用的 Raft 算法解决方案。
京东技术
2023/09/21
2970
拜占庭将军问题和 Raft 共识算法讲解
Raft: 寻找可理解的共识算法(2)
Figure 2: A condensed summary of the Raft consensus algorithm (excluding membership changes and log compaction). The server behavior in the upper-left box is described as a set of rules that trigger independently and repeatedly. Section numbers such as §5.2 indicate where particular features are discussed. A formal specification [31] describes the algorithm more precisely.
s09g
2022/07/06
5430
Raft: 寻找可理解的共识算法(2)
raft 共识算法详解
上一次分享了 CAP 定理,我们了解到在有网络分区(Partition)的情况下,我们只能在一致性(Consistency)与可用性(Availability)之间二择一,更进一步地说,我们其实是在光谱的两端 — 强一致性(Strong Consistency)与最终一致性(Eventually Consistency)之间做选择。
写bug的高哈哈
2024/11/04
1520
raft 共识算法详解
用动图讲解分布式 Raft
对了,我自己做了一个基于 Spring Cloud 的开源项目《PassJava》,面试刷题一网打尽,为了做这个开源项目,我还买了一个 三年的腾讯云 CVM,求个Star~
悟空聊架构
2021/01/26
1.3K0
用动图讲解分布式 Raft
分布式一致性算法Raft
导语 | 对于很多工程人员来说,Paxos算法不容易理解和落地实现。因此斯坦福学者提出了一个更易理解和实现的共识算法Raft。本文主要介绍Raft的基本原理、算法流程以及和Paxos的区别。 一、Raft算法背景 在学术理论界,分布式一致性算法的代表还是Paxos。但是少数理解的人觉得很简单,尚未理解的觉得很难,大多数人还是一知半解。Paxos的可理解性和工程落地性的门槛很高。斯坦福学者也花了很多时间理解Paxos,于是他们又研究出Raft。 二、Raft算法基本原理 共识算法就是保证一个集群的多
腾讯云开发者
2021/06/17
7000
分布式一致性算法-RAFT算法的理解和SOFA-RAFT的改进
Raft将单节点的状态变化转为日志,通过日志同步和日志回放保证一致性。当少数节点挂掉集群依然可以对外提供服务。
相思不扫积久弥厚
2023/10/26
4880
Raft一致性算法整理【原理笔记】
Raft是一种用来管理日志复制的一致性算法。一致性算法允许一组机器像一个整体一样工作,即使其中的一些机器出了错误也能正常工作。
瓜农老梁
2019/08/27
8940
Raft算法之选举篇
Follower(跟随者):系统启动时默认的角色,一般来说不参与客户端读、写请求,接受Leader发送过来的心跳追加日志,在Leader挂了之后转变为Candidate;
心平气和
2020/11/03
1.7K1
Raft算法之选举篇
详细解读Raft 共识算法
1998年,加州大学的计算机科学家 Eric Brewer 提出,分布式系统有三个指标:
Kunkka Wu
2022/01/13
1.9K0
详细解读Raft 共识算法
Raft 共识算法总结
Raft 算法是目前应用广泛的分布式共识算法,在许多知名的开源项目比如 etcd 中,都有 Raft 的身影。同时,随着 MIT6.824 课程的普及,Raft 俨然成为了最广为人知的分布式共识算法。
月梦@剑心
2024/02/14
2370
Raft 共识算法总结
相关推荐
聊聊 分布式一致性算法 Raft
更多 >
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文