分布式算法-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 全栈知识体系

分布式算法-Paxos相关推荐

  1. 40000+字超强总结?阿里P8把Java全栈知识体系详解整理成这份PDF

    40000 +字长文总结,已将此文整理成PDF文档了,需要的见文后下载获取方式. 全栈知识体系总览 Java入门与进阶面向对象与Java基础 Java 基础 - 面向对象 Java 基础 - 知识点 ...

  2. 万字图文详解阿里二面分布式十二问

    分布式理论 1. 说说CAP原则? CAP原则又称CAP定理,指的是在一个分布式系统中,Consistency(一致性). Availability(可用性).Partition tolerance( ...

  3. 哔哩哔哩「会员购」在流量回放上的探索

    作者 沈佳伟 哔哩哔哩会员购架构师 背景 「哔哩哔哩会员购」是B站的电商业务.随着业务规模不断扩大,系统设计也越来越复杂.当在具有一定应用规模和业务复杂度的系统上进行业务快速迭代时对系统的鲁棒性,兼容 ...

  4. 记四至六月:春华秋实,做好当下,切勿急躁,避免焦虑

    文章目录 一.春招告一段落 二.关于时间规划 三.关于计划的量化 四.考试月的实习 五.继续启程 最近很忙,这一个多月都没写过博客了,趁现在有时间写一写吧,算是对这三个月来的总结. 微信公众号搜&qu ...

  5. 手记:在 MacBook 上运行 Linux 那些坑

    这是一篇关于一个 Linux 桌面爱好者向世界证明他为什么要这样做的文章. 几周前,我在我的 Macbook Pro(2015年初款)上安装了 Fedora 32.在这篇文章中,我希望记录下我在这一路 ...

  6. Paxos Made Simple(译)

    The Paxos algorithm, when presented in plain English, is very simple. 我叫Leslie Lamport,我最屌. 1. 简介 用于 ...

  7. 深入解析NoSQL数据库的分布式算法

     深入解析NoSQL数据库的分布式算法 摘要:尽管NoSQL运动并没有给分布式数据处理带来根本性的技术变革,但是依然引发了铺天盖地的关于各种协议和算法的研究以及实践.在这篇文章里,我将针对NoSQ ...

  8. Paxos Made Simple 中文翻译

    目录 1. 引言 2. 共识算法 2.1 问题 2.2 选择一个 value 2.3 获知选定的 value 2.4 可进行性 2.5 实现 3. 实现状态机 Paxos Made Simple 基础 ...

  9. Paxos Made Simple

    Paxos一致性算法--分布式系统中的经典算法,论文本身也有一段有趣的故事.一致性问题是分布式系统的根本问题之一,在论文中,作者一步步的加强最初一致性问题(2.1节提出的问题)的约束条件,最终导出了一 ...

最新文章

  1. Handler的postDelayed()关闭的方法
  2. 电脑任何字都打不出来_“有时候觉得自己一个字都写不出来了”
  3. 世界三大顶级音响_世界三大汽车赛事是什么?一起来了解一下
  4. RFID会议签到系统总结(二十一)――服务端的通讯
  5. 锐捷官方提供122套实验题.
  6. 前端学习(2197):__WEBPACK_IMPORTED_MODULE_1_vuex__.a.store is not a constructor
  7. 【译】Lesson 1: 一个三角形和一个方块
  8. MySQL----商品表及商品分类表例子
  9. 百度网盘最大的竞争对手来了!阿里云盘正式公测
  10. matlab实验求不定积分函数,如何用matlab求取函数的不定积分与定积分 涨知识了...
  11. 我眼中的无影云桌面‖云桌面使用者角度
  12. 关于怎么测试网站页面打开速度?有什么工具能实现么?
  13. 中国互联网的发展历程
  14. linux给两台主机设置虚拟ip,如何把linux配置成ip路由器
  15. Problem M: 薪酬计算 之二
  16. Jmeter阶梯压力测试_导出测试报告
  17. Sil7172中文资料
  18. Linux系统管理16:shell
  19. 深度学习框架Keras的安装
  20. 35岁的leader,毅然放弃工作8年的地方,也许35岁才是新的起点吧

热门文章

  1. No qualifying bean of type xxx found for dependency expected at least 1 bean which qualifies as ...
  2. Linux搭建FTP,并使用Windows和IE浏览器访问FTP服务
  3. c语言函数大全表格形式,C语言函数大全[表格形式].doc
  4. ASO优化|第一期:想吃鸡?靠的就是这份详情页优化攻略
  5. 技术博客1鸿蒙系统和安卓的区别有哪些
  6. Kernel panic - not syncing VFS Unable to mount root fs on
  7. Wind River Linux
  8. 20道经典Redis面试题
  9. transform(转换)
  10. three.js(6):屏幕点击与鼠标的交互(Raycaster的用法)