文章目录
1 Paxos算法1.1 用途1.2 模型1.2.1 无主模型1.2.2 有主模型
2 Raft 算法2.1 用途2.2 核心思想2.3 角色分配2.4 特点
1 Paxos算法
1.1 用途
Paxos算法是用于 解决分布式一致性问题的,即一个分布式系统中的各个进程 是如何就某个值达成一致的。
1.2 模型
前提:
在一个小岛上,议员数量固定不可变。
每一个提议都有固定编号,编号保持增长,且不可回退。
每个议员只会同意大于自身记录的提议编号的新提议。
1.2.1 无主模型
场景:某个议员收集到新提议,向所有议员发起投票,若投票过半,则通过。
问题:
(1)每个议员都有权利发起投票,同时发起的投票ID相同,会导致冲突。
(2)若议员数量是偶数,容易发生“死锁”。
(3)多议员之间的信息未必同步,相互同步次数不可预测。
1.2.2 有主模型
场景:选出一个Leader,负责发起投票 ,充当数据同步的样本。不仅解决了提议ID冲突的问题,也解决了数据同步问题。 选举规则: 初次选举:根据设备ID选举。先启动的设备ID大,选取ID大的设备作为Leader。投票过半即可。 后续选举:根据事务ID和设备ID选举。给事务ID和设备ID 都比自己大的设备投票。 问题: (1)节点过多,虽然业务处理能力强,但选举效率低。 可限制参与选举和投票的节点数量。 (2)若同时存在多主,即发生“脑裂”。
2 Raft 算法
2.1 用途
用于 管理日志一致性的 算法。
2.2 核心思想
在分布式系统中,通过副本来实现数据的安全性。如何实现多个副本的一致性呢?
通过日志来实现,将相同的日志在不同的设备上执行,会得到相同的结果。
2.3 角色分配
Leader 领导者:负责与客户端的交互,日志复制。同一时刻只能存在一个。
Candidate 候选人:仅存在于选举阶段。跟随者想参与竞选,会转变为候选人。
Follower 跟随者:普通节点。村民。
2.4 特点
(1)任期 每一届领导者会有唯一的任期标识。若选举失败,直接开始下一个任期和新一轮选举。 (2)日志复制 Leader 将所有操作记录到日志里,通过心跳机制转发给Follower ,从而实现最终结果一致性。
|