云计算-Raft算法报告-raft与paxos对比

Raft算法报告

摘要

最初,在分布式系统领域中,Paxos算法虽然是作为主体的,但是其复杂性太大并且难以理解,而且它在实际系统中需要大量的扩展。Raft算法的出现,提高了可理解性,在状态简化与算法方面减小了复杂性。相比于Paxos,Raft就实现了可理解性的更高,更容易的学习,而且还提供了一个足够好的用来构建一个现实系统的基础,适合实际系统的实现。

1、介绍

在分布式系统领域,共识算法是保证数据一致性与可靠性的核心技术,Raft 算法是其中的代表。Raft算法将一致性问题分成领导者选举、日志复制、安全性等模块,并通过状态简化降低系统复杂度。以下从复制状态机的思想、状态简化,以及Raft共识算法来展开,深入了解 Raft的一致性管理。

2、复制状态机

复制状态机的就是在相同的初始状态下,输入相同命令,得到的结束状态也会是相同的。

复制状态机的具体工作原理就是依赖Leader顺序日志,保证所有节点日志一致性后提交,状态机结果一致。简单来说就是leader接收到客户端发送的命令后,leader再生成日志 ,发送给所有其他的follower ,然后其他follower收到日志后,将其进行持久化处理,添加到自己的日志中并向Leader确认,在Leader收到多数确认后,follower会将其应用到本地状态机中。在正常情况下,客户端无论查询哪一个节点的状态机,它查到的结果都是一样的。

Paxos与之不同的是,它是不强制依赖Leader的,但是需要额外的机制比如Multi-Paxos等来实现顺序日志,复杂度更高。

3、状态简化

状态简化就是在一致性的条件下,通刻意过减少系统状态的复杂性,降低理解和实现难度。其本质就是在分布式系统中,通过约束行为,来实现raft一定程度上对抗分布式复杂性。

状态简化主要体现在三个方面:第一是限定状态数量,所有节点都只能是Leader、Follower、Candidate这三个状态之一,这个特点让角色的行为变得可预测,并且与Paxos相比,Raft只用考虑状态的转化,不要考虑状态之间的共存影响以及角色重叠带来的复杂性;第二是强制日志连续,要求日志必须连续,不允许出现空洞,这样带来的好处就是冲突时可以直接覆盖不一致的部分,Paxos不同的是它允许出现空洞,但需要处理和合并多版本的问题;第三就是式事件触发状态转换,所有的状态转化都是由显示事件也就是明确的时间来触发的,不是由隐式事件判断的,但在Paxos中是隐式协调,是依赖天编号和多数派响应。

4、Raft共识算法

4.1、领导者选举

Raft中使用心跳机制来维持权威,Leader每经过一段固定时间,就会向所有Follower发送心跳信息来确立自己的地位。

初始是时,每个节点只能处于Follower状态;若某个Follower检测到集群中没有Leader,此时就会触发选举流程。此时,该Follower首先会递增自己的当前任期号,将自己的任期号加一,再将自身状态转为Candidate,并同时向其他节点发起请求投票RPC调用,来竞争成为新的Leader。

出现三种选举结果:如果某个节点赢得多数选票并且选票超过半数,那么它会转化为 Leader,然后再向所有 Follower 发送心跳消息以确认领导权并终止选举;如果当前节点收到新 Leader 的心跳信息且验证其任期号有效后,那么就说明有其他节点胜出,当前节点就会从 Candidate 状态降级转化为 Follower;如果选举出现平票或无人获得半数以上支持,则本轮选举无结果结束,系统会很快开启新一轮投票,进入更高的任期号重新尝试选出 Leader。

在Paxos中,是没有Leader概念的,Multi-Paxos需要自行实现选举,容易出现冲突提案。

4.2日志复制

日志复制的机制就是,将客户端的命令请求以日志条目的形式,从Leader节点传递到集群的其他节点的过程,其核心就是保证所有节点的操作日志完全相同。Follower验证日志一致性后,将日志进行持久化处理并回复确认。Leader收到多数的ACK后,应用日志条目应用到状态机并标记为已提交,然后再通知Follower提交日志,最终使得所有结点的状态一致。

在Follower不发生任何状况,一切正常的情况下,就可以保证所有节点的日志完整且正确,否则,Leader就会一直重复发起附加条目RPCs,直到所有的Follwer都复制并存储了日志条目。

在Raft算法中已提交的日志条目都拥有持久化、所有状态机可执行的特点。Leader成功将日志条目复制到多数节点后,该条目即被视为已提交。

4.3安全性

在Leader选举和日志复制中的机制,并不能保证每个状态机都正常正确执行命令。这是因为许多共识算法为了降低复杂性,会出现非Leader就收乱序复制来的日志的情况,这就造成了空洞的大量出现。Raft通过设计选举限制和提交规则,来保证在任何异常情况下也都能够保持一致性、顺序性。

4.3.1选举限制

选举限制的核心规则是新当选的Leader必须包含所有已提交的日志条目。Raft通过投票否决机制来决定一个Candidate是否赢得选举。Candidate会向其他服务器节点发送投票请求RPC,节点收到投票请求后,会对比Candidate的日志新旧程度,如果Candidate的日志不如自己新,则拒绝投票。相比之下,Paxos是没有明确限制的,需自行设计日志完整性校验。

4.3.2提交规则

提交规则所要解决的核心问题是在分布式系统中,当旧任期的日志条目已被复制到多数节点但未提交时,新Leader可能覆盖这些条目,导致数据间的错误。

leader仅能通过Quorum原则提交自己任期内的日志条目。当前任日志提交后,根据日志匹配特性,旧日志被自动是为已提交,即被间接提交。但在Paxos中是依赖多数派提交确认。

相关推荐
iconball9 小时前
个人用云计算学习笔记 --18(NFS 服务器、iSCSI 服务器)
linux·运维·笔记·学习·云计算
₯㎕星空&繁华21 小时前
阿里云服务器安装MySQL服务器
服务器·ubuntu·阿里云·云计算
你的大佬9991 天前
阿里云百炼ai模型
人工智能·阿里云·云计算
一只栖枝1 天前
备考华为HCIA - 云计算,培训与自学到底该怎么选?
云计算·华为认证·hcia·考证·职业规划
数据与人工智能律师2 天前
AI的法治迷宫:技术层、模型层、应用层的法律痛点
大数据·网络·人工智能·云计算·区块链
荣光波比2 天前
Docker(三)—— Docker Compose 编排与 Harbor 私有仓库实战指南
运维·docker·容器·云计算
企鹅侠客2 天前
mysqldump导入备份数据到阿里云RDS会报错吗
阿里云·adb·云计算
iHero2 天前
【Jitsi Meet】阿里云Docker安装Jitsi Meet后的调整
阿里云·docker·云计算
荣光波比2 天前
Ansible(三)—— 使用Ansible自动化部署LNMP环境实战指南
运维·自动化·云计算·ansible
荣光波比2 天前
Docker(五)—— Docker Compose 一键搭建 LNMP 架构并部署 WordPress
运维·docker·容器·云计算