分布式算法-Paxos

分布式算法-Paxos

最近工作中遇到了分布式相关的问题,由于我们业务场景的要求,需要我们实现强一致性并且目前采用了CAP协议,满足CP舍弃了A。下面就让我们一起学习一下这个大名鼎鼎的Paxos算法吧。

这个是分布式算法高频的面试考点哦。

一、简介

Paxos算法是Leslie Lamport在1990年提出的一种基于消息传递且具有高度容错特性的共识(consensus)算法。它是一组协议,用于在不可靠或易出错的处理器组成的网络中解决一致性问题。协商一致意见是一组与会者就一项结果达成一致意见的过程。

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

二、角色

Paxos算法一共存在三个角色分别为 proposersacceptors,和 learners(允许身兼数职)。

  • proposers 提出提案,提案信息包括提案编号和提议的 value;

  • acceptor 收到提案后可以接受(accept)提案,若提案获得多数派(majority)的 acceptors 的接受,则称该提案被批准(chosen);

  • learners 只能“学习”被批准的提案。划分角色后,就可以更精确的定义问题:

  1. 决议(value)只有在被 proposers 提出后才能被批准(未经批准的决议称为“提案(proposal)”);

  2. 在一次 Paxos 算法的执行实例中,只批准(chosen)一个 value;

  3. learners 只能获得被批准(chosen)的 value。

三、Basic Paxos算法

Paxos算法分为两个阶段,具体如下:

3.1 Prepare-阶段一

  • a).Proposer 收到client请求或发现本地有未提交的值,选择一个提案编号N,然后想半数以上的Acceptor发送编号为N的Prepare请求。

  • b).Acceptor收到一个编号为N的Prepare请求,如果该轮Paxos

    1.本节点已经有已提交的value记录,对比记录的编号和N,大于N则拒绝回应,或者返回该记录value及编号

    2.没有已提交记录,判断本地是否有编号N1,N1>N,则拒绝回响,否则讲N1改为N(如果没有N1,则记录N),并响应prepare

3.2 Accept-阶段二

  • a).如果Proposer收到半数以上Acceptor对其发出的编号N的prepare请求的响应,那么它就会发送一个针对[N,V]提案的Accept请求给半数以上的Acceptor。V就是收到响应中编号最大的value,如果响应中不包含任何value,那么V就是由Proposer自己决定。

  • b).如果Acceptor收到一个针对编号为N的提案的Accept请求,Acceptor对比本地的记录编号,如果小于等于N,则接受该值,并提交记录value,否则拒绝请求

Proposer如果收到大多数的Acceptor响应,则选定该value值,并同步给leaner,使未响应的Acceptor达成一致。

 

四、参考

  1. https://en.wikipedia.org/wiki/Paxos_(computer_science)

  2. 分布式算法 - Paxos算法 | Java 全栈知识体系

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值