说说Raft算法?
说说Raft算法?
什么是Raft算法?
Raft
是一种一致性算法,旨在解决分布式系统中的一致性问题。与 Paxos
相似,Raft
的目标是实现一致性,但它以另一种方式实现,并被称为一种更易于理解的一致性算法。Paxos
和 Raft
都是为了解决一致性而设计的,但它们在具体实现上有所不同。
Raft算法的工作流程是怎样的?
Raft算法的角色
Raft
协议将参与的进程分为三种角色:
- Leader(领导者)
- Follower(跟随者)
- Candidate(候选人)
类似于民主社会,领导者由跟随者投票选出。初始状态下没有领导者,所有集群中的参与者都是跟随者。
首先是选举阶段,所有跟随者都可以成为候选人参与选举。在此期间,所有跟随者转变为候选人,进行民主选举以选出领导者。选举结束后,选出的领导者开始其任期,而所有非领导者的候选人则重新变为跟随者,遵循领导者的指导。
在Raft中,引入了一个概念称为「任期」,用术语 Term
来表示。每个任期中只会选出一个领导者,并且任期由递增的整数来标识。
三类角色的变迁图如下:
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
可能已经挂了,然后再次发起 选举 过程。