分布式数据库之共识算法:Raft协议介绍

Raft是一种可替代Paxos的分布式一致性算法,尤其在易理解性方面优于Paxos。它通过强leader、随机选举超时和日志复制策略确保一致性。在选举和日志复制过程中,Raft保证了系统的安全性和可用性,同时解决了成员变更的难题。本文深入探讨了Raft的基础概念、选举机制和日志复制策略。
摘要由CSDN通过智能技术生成

一、背景概述

在分布式系统中,通常需要多副本进行备份,但是副本的同步一致一直是一个比较棘手的问题。Raft算法是一个能够代替Paxos的分布式一致性算法,能够管理日志复制(replicated log),他的性能与Paxos不相上下,但是却比Paxos更容易理解。

Paxos存在的问题:

  1. 难以理解(不过《Paxos Made Simple》比较容易理解)。一是因为paxos选择了single-degree Paxos作为基础,二是因为Multi-Paxos 的合成规则又增加了许多复杂性。
  2. 不能为构建实际的实现提供良好的基础,一是因为没有针对 multi-Paxos 的共识算法,二是因为Paxos 的架构对于构建实际系统来说是一个糟糕的设计。

一致性算法通常具有的属性:

  1. 能确保在所有非拜占庭条件下(比如网络延迟,分区和数据包丢失,重复和乱序)的安全性(不会返回错误结果)
  2. 若有2f+1个副本,则能容忍f台机器故障。
  3. 不依赖时钟保证日志的一致性(分布式情况下网络延迟等问题会导致可用性)。
  4. 通常只要超过一半的服务器响应成功调用,则认为命令已经完成。

Raft新特性:

  1. 强leader:日志只从leader流向其他服务器(简化了日志管理)
  2. Leader选举:使用随机计时器进行 leader 选举。 这只需在任何一致性算法都需要的心跳(heartbeats)上增加少量机制,同时能够简单快速地解决冲突。
  3. 成员变更:允许集群在配置更改期间继续正常运行。

Raft提高可理解的方式:模块分解(leader选举、日志复制、安全性)、减少状态空间。

二、复制状态机

复制状态机用于解决分布式系统中的各种容错问题,通常通过复制日志实现,每个服务器存储一个包含一系列命令的日志,其状态机按顺序执行日志中的命令。每个状态机处理日志的顺序相同,因此也能够得到相同的输出序列。

一致性算法的工作就是保证复制日志的一致性。 每台服务器上的一致性模块接收来自客户端的命令,并将它们添加到其日志中。 它与其他服务器上的一致性模块通信,以确保每个日志最终以相同的顺序包含相同的命令,即使有一些服务器失败。 一旦命令被正确复制,每个服务器上的状态机按日志顺序处理它们,并将输出返回给客户端。 这样就形成了高可用的复制状态机。

 

三、Raft基础

3.1 任期

Raft 把时间分割成任意长度的任期(term),每个任期从选举开始,一个或者多个 candidate 尝试成为 leader 。如果一个 candidate 赢得选举,然后他就在该任期剩下的时间里充当 leader。如果没选出leader,则任期很快结束,开启下一个leader,每个任期最多只能有一个leader。

在raft中,任期充当逻辑时钟,服务器节点可以通过任期发现一些过期的信息比如过时的 leader。任期单调递增,服务器之间通信的时候会交换当前任期号;如果一个服务器的当前任期号比其他的小,该服务器会将自己的任期号更新为较大的那个值。如果一个 candidate 或者 leader 发现自己的任期号过期了,它会立即回到 follower 状态。如果一个节点接收到一个包含过期的任期号的请求,它会直接拒绝这个请求。

3.2 通信

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值