分布式数据库强一致性:Raft、VoltDB与Cloud Spanner解析
1. Raft算法概述
Raft算法是一种分布式一致性算法,在许多需要达成共识的生产系统中得到了广泛应用,如Neo4j、YugabyteDB数据库,etcd键值存储以及Hazelcast分布式内存对象存储等。
1.1 日志复制
在Raft中,只需要大多数追随者(follower)确认日志条目,就可以提交该条目。这意味着在任何时刻,每个追随者的已提交日志条目可能并不完全相同。如果某个追随者落后或出现分区,未对追加条目(AppendEntries)请求进行确认,领导者(leader)会持续重发消息,直到追随者做出响应。可以通过消息中的任期(term)和序列号识别并安全丢弃发送给追随者的重复消息。
1.2 领导者选举
领导者会定期向追随者发送心跳消息。每个追随者都维护一个选举计时器,在收到心跳消息后启动。如果在收到下一个心跳消息之前计时器超时,追随者将发起选举。为了降低多个追随者同时超时并发起选举的可能性,选举计时器是随机化的。
当追随者的选举超时,它会将状态转变为候选人(candidate),增加选举任期值,并向所有节点发送请求投票(RequestVote)消息,同时为自己投票。请求投票消息包含候选人的标识符、新的任期值以及候选人日志中已提交条目的状态信息。
候选人随后等待回复。如果获得大多数肯定投票,它将转变为领导者,并开始发送心跳消息,告知集群中的其他节点其新的领导地位。如果未获得大多数投票,它将保持候选人状态,并重置选举计时器。
当追随者收到请求投票消息时,会根据以下情况采取行动:
-
分布式数据库强一致性:Raft、VoltDB与Spanner解析
超级会员免费看
订阅专栏 解锁全文
69

被折叠的 条评论
为什么被折叠?



