说说Raft算法?

什么是Raft算法?

Raft 是一种一致性算法,旨在解决分布式系统中的一致性问题。与 Paxos 相似,Raft 的目标是实现一致性,但它以另一种方式实现,并被称为一种更易于理解的一致性算法。PaxosRaft 都是为了解决一致性而设计的,但它们在具体实现上有所不同。

Raft算法的工作流程是怎样的?

Raft算法的角色

Raft 协议将参与的进程分为三种角色:

  • Leader(领导者)
  • Follower(跟随者)
  • Candidate(候选人)

类似于民主社会,领导者由跟随者投票选出。初始状态下没有领导者,所有集群中的参与者都是跟随者。

首先是选举阶段,所有跟随者都可以成为候选人参与选举。在此期间,所有跟随者转变为候选人,进行民主选举以选出领导者。选举结束后,选出的领导者开始其任期,而所有非领导者的候选人则重新变为跟随者,遵循领导者的指导。

在Raft中,引入了一个概念称为「任期」,用术语 Term 来表示。每个任期中只会选出一个领导者,并且任期由递增的整数来标识。

三类角色的变迁图如下:

fenbushi-ef4dd655-1693-485f-aca6-494b89dfb57b.png

Leader选举过程

Raft 使用心跳(heartbeat)触发Leader选举。当Server启动时,初始化为Follower。Leader向所有Followers周期性发送heartbeat。如果Follower在选举超时时间内没有收到Leader的heartbeat,就会等待一段随机的时间后发起一次Leader选举。

Follower将其当前term加一然后转换为Candidate。它首先给自己投票并且给集群中的其他服务器发送 RequestVote RPC 。结果有以下三种情况:

  • 赢得了多数(超过1/2)的选票,成功选举为Leader;
  • 收到了Leader的消息,表示有其它服务器已经抢先当选了Leader;
  • 没有Server赢得多数的选票,Leader选举失败,等待选举时间超时(Election Timeout)后发起下一次选举。

选出 Leader 后,Leader 通过 定期 向所有 Follower 发送 心跳信息 维持其统治。若 Follower 一段时间未收到 Leader心跳,则认为 Leader 可能已经挂了,然后再次发起 选举 过程。

标签: none