一篇文章让你弄懂分布式一致性协议Paxos

一、Paxos协议简介

Paxos算法由Leslie Lamport在1990年提出,它是少数在工程实践中被证实的强一致性、高可用、去中心的分布式协议。Paxos协议用于在多个副本之间在有限时间内对某个决议达成共识。Paxos协议运行在允许消息重复、丢失、延迟或乱序,但没有拜占庭式错误的网络环境中,它利用“大多数 (Majority)机制”保证了2F+1的容错能力,即2F+1个节点的系统最多允许F个节点同时出现故障。

拜占庭式错误释义:
一般地把出现故障但不会伪造信息的情况称为“非拜占庭错误”(Non-Byzantine Fault)或“故障错误”(Crash Fault);而伪造信息恶意响应的情况称为“拜占庭错误”(Byzantine Fault)。
1、核心概念
  • Proposal:提案(提案 = 提案编号acceptNumber + 提案值acceptValue);
  • Proposal Number:提案编号;
  • Proposal Value:提案值;
2、参与角色
  • Proposer(提案者):处理客户端请求,主动发起提案;
  • Acceptor (投票者):被动接受提案消息,参与投票并返回投票结果给Proposer以及发送通知给Learner;
  • Learner(学习者):不参与投票过程,记录投票相关信息,并最终获得投票结果;

在实际的分布式业务场景中,一个服务器节点或进程可以同时扮演其中的一种或几种角色,而且在分布式环境中往往同时存在多个Proposer、多个Acceptor和多个Learner。

3、基础逻辑

Paxos算法是指一个或多个提案者针对某项业务提出提案,并发送提案给投票者,由投票者投票并最终达成共识的算法。

”达成共识“过程的特点:
(1)、可以由一个或多个提案者参与;
(2)、由多个投票者参与;
(3)、可以发起一轮或多轮投票;
(4)、最终的共识结果是一个值,且该值为提案者提出的其中某个值;

二、Basic Paxos

1、两个阶段

Basic Paxos算法分为两个阶段:Prepare阶段和Accept阶段。

(1). Prepare阶段

该阶段又分为两个环节:

  • a、Proposer发起广播消息给集群中的Acceptor发送一个提案编号为n的prepare提案请求。
  • b、Acceptor收到提案编号为n的prepare提案请求,则进行以下判断:
    如果该Acceptor之前接受的prepare请求编号都小于n或者之前没有接受过prepare请求,那么它会响应接受该编号为n的prepare请求并承诺不再接受编号小于n的Accept请求,Acceptor向Proposer的响应数据包含三部分内容:接受编号n的提案状态信息,之前接受过的最大提案编号和相应提案值;如果该Acceptor之前接受过至少一个编号大于n的prepare请求,则会拒绝该次prepare请求。

通过以上prepare阶段处理流程可以知道:

  • a、prepare请求发送时只包含提案编号,不包含提案值;
  • b、集群中的每个Acceptor会存储自己当前已接受的最大提案编号和提案值。

假设分布式环境中有一个Proposer和三个Acceptor,且三个Acceptor都没有收到过Prepare请求,Prepare阶段示意图如下:

假设分布式环境中有两个Proposer和三个Acceptor,ProposerB成功发送prepare请求,在发送Accept请求时出现故障宕机,只成功给Acceptor1发送了accept请求并得到响应。当前各个Acceptor的状态分别为:
Acceptor1,同意了ProposerB发送的提案编号2的Accept请求,当前提案值为:orange;
Acceptor2,接受了ProposerB发送的提案编号2的Prepare请求;
Acceptor3,接

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值