paxos&raft算法原理

发布时间 2023-07-25 21:32:41作者: AaalexQaQ

paxos&raft算法原理

1.拜占庭将军问题

​ 拜占庭将军问题是一个协议问题,拜占庭帝国军队的将军们必须全体一致的决定是否攻击某一支敌军。问题是这些将军在地理上是分隔开来的,并且将军中存在叛徒。叛徒可以任意行动以达到以下目标:欺骗某些将军采取进攻行动促成一个不是所有将军都同意的决定,如当将军们不希望进攻时促成进攻行动或者迷惑某些将军,使他们无法做出决定。如果叛徒达到了这些目的之一,则任何攻击行动的结果都是注定要失败的,只有完全达成一致的努力才能获得胜利。

image-20230202105851498

2.Paxos算法

2.1背景

解决什么问题

Paxos算法:一种基于消息传递且具有高度容错特性的一致性算法

Paxos算法解决的问题:就是如何快速正确的在一个分布式系统中对某个数据值达成一致,并且保证不论发生任何异常,都不会破坏整个系统的一致性。

背景:

Paxos算法是Lamport宗师提出的一种基于消息传递的分布式一致性算法,使其获得2013年图灵奖。

Paxos由Lamport于1998年在《The Part-Time Parliament》论文中首次公开,最初的描述使用希腊的一个小岛Paxos作为比喻,描述了Paxos小岛中通过决议的流程,并以此命名这个算法,但是这个描述理解起来比较有挑战性。后来在2001年,Lamport觉得同行不能理解他的幽默感,于是重新发表了朴实的算法描述版本《Paxos Made Simple》。

自Paxos问世以来就持续垄断了分布式一致性算法,Paxos这个名词几乎等同于分布式一致性。Google的很多大型分布式系统都采用了Paxos算法来解决分布式一致性问题,如Chubby、Megastore以及Spanner等。开源的ZooKeeper,以及MySQL 5.7推出的用来取代传统的主从复制的MySQL Group Replication等纷纷采用Paxos算法解决分布式一致性问题。

2.2Basic-Paxos

角色介绍

**Client**

​ 请求发起者,系统外部角色(用户)

Proposer

​ 接受client请求,向集群提出提议。起到冲突调节的作用

Acceptor

​ 提议投票和接收者,只有在行程法定人数(Quorum)(多数派)时,提议才会最终被接受。

Learner

​ 提议接收者,备份,对集群一致性没有影响(不参与投票)

·步骤和阶段

  • Prepare
    · Proposer提出一个提案,编号为N,此N大于这个Proposer之前提出提案编号。请求Acceptors 的quorum接收。
  • Promise
    ·如果N大于此Acceptor之前接收的任何提案编号则接受,否则拒绝
  • Accept
    ·如果达到了多数派,proposer会发出accept请求,此请求包含提案编号N,以及内容-
  • Accepted
    ·如果此acceptor在此期间没有收到任何大于N的提案,则接收此提案内容,否则忽略。

潜在问题:活锁

解决方法: 加随机等待时间

缺点:实现难,效率低(2轮RPC) (第一轮,希望多数人通过;第二轮,希望把方案落地执行执行)

2.3multi-Paxos

只需要在第一次执行两轮

第二次既以后执行一轮 添加了Following —— 话事人(可以决定的人


3.raft算法原理

http://www.kailing.pub/raft/index.html
容易理解的Distributed Consensus分布式共识算法ww.kailing.pub/raft/index.html