Basic-Paxos

//参考paxos made sample

核心是一致性协议算法.

问题

假定一个集合中的提案者可以产生一项决议. 一致性算法保证在提案者中只有一个提案可以形成决议. 如果没有提案形成决议, 那么就不应该有提案内容被提案者学习; 如果有提案形成决议, 那么提案者应该学习提案内容.

要满足以下三个条件:

  • 已经被提案的值才可能被决议
  • 只有一个提案值可以形成决议
  • 提案者决不会学习一个没有形成决议的提案, 除非改提案已经形成决议

一致性算法中定义三种角色: proposers(提案者), acceptors(接受者), and learners(学习者).

假定这些角色可以正常通讯, 非拜占庭场景.

  • 每个角色可以任意速度处理, 可能由于错误停止, 也可能重新开始. 因为所有角色在提案决议后可能失败而重新开始, 所有角色失败而重新开始后一些信息是可以被记住的.
  • 信息可以任意长时间传输, 可以重复, 可以丢失, 但不会损坏.

决议

提案者可以给集合内的接受者发送提案, 当超过多数的接受者响应时才可形成提案决议.

P1. 接受者必须接受其接收到的第一个提案

在这个条件下, 同一时间不同的提案者可能会产生不同内容的提案, 可能导致所有的接受者接收了一个提案, 但没有任何一个提案形成多数派.

假定提案包括提案ID和提案内容, 我们允许多个提案可以被选择, 但是需要保证所有决议的提案都必须有相同的提案内容. 这得益于下面的条件.

P2. 如果提案内容为v的提案被选择, 那么任何高ID的提案内容都是v

因为提案ID是有序的, 条件P2保证只有一个提案内容会被选择.

P2a. 如果提案内容为v的提案被选择, 那么任何被接受者接受的高提案ID的提案内容也是v

P2b. 如果提案内容为v的提案被选择, 那么任何提案者发布的高ID提案内容都是v

P2c. 对任何的提案内容v, 提案ID为n来说, 如果提案发出, 那么多数接受者组成的集合S, S中没有接受者接受任何提案ID<n的提案, 或者S中的接受者接受了所有提案中提案ID<n提案内容为v的提案)

换句话说, 提案者要求任何接受者不能接受任何提案ID<n的提案.

第一阶段Prepare:

P1a. 提案者发送提案请求

提案者生成一个全局唯一且递增的提案ID(n), 并且向集群内所有接受者发送prepareRequest(这里无需携带提案内容, 只需要携带提案ID)

P1b. 接受者应答提案请求

应答者会做出两个承诺, 一个应答.

两个承诺:

  • 承诺不再应答提案ID<=n的prepareRequest
  • 承诺不再应答提案ID<n的acceptRequest

一个应答:

  • 返回接受者已经应答的提案中提案ID最大的提案.

第二阶段Accept:

P2a. 提案者发送提案应答

如果提案者接收到了集群中大多数接受者响应的prepareRequest(ID=n), 那么提案者可以向集群内的所有接受者发送acceptRequest(提案ID为n, 提案内容为v), 提案内容可以是提案中被接受的提案ID最大的提案内容, 或者自己可以随意决定提案内容.

P2b. 接受者应答提案应答

如果接受者接收到提案ID为n的acceptRequest, 除非接受者已经应答了提案ID>n的acceptRequest, 否则接受者将会应答该提案应答.

提案者是可以产生多个提案的, 每一个都追从协议

Basic-Paxos原理的更多相关文章

  1. 【转载】架构师需要了解的Paxos原理、历程及实战

    原文链接,请参见:http://weibo.com/ttarticle/p/show?id=2309403952892003376258 数据库高可用性难题 数据库的数据一致和持续可用对电子商务和互联 ...

  2. basic paxos解析

    basic paxos是我见过最难懂的算法,我最近一个月都在研究这个东西,自认有一些粗浅的心得,在这里写一下我对它的理解 为了降低理解难度,本文使用了大量的比喻,可能词不达意,见谅 basic pax ...

  3. 从 Basic Paxos 到 Multi Paxos 到 Raft

    在朴素Paxos算法中, 各个节点经过 Prepare 和 Accept 阶段, 会达成一个值, 这个值一旦达成, 就不能被修改, 如下例子: 图示1 上面的操作几乎没有任何实用价值, 于是演变成下面 ...

  4. Paxos 实现日志复制同步(Basic Paxos)

    Paxos 实现日志复制同步 本篇文章以 John Ousterhout(斯坦福大学教授) 和 Diego Ongaro(斯坦福大学获得博士学位,Raft算法发明人) 在 Youtube 上的讲解视频 ...

  5. 理解分布式一致性:Paxos协议之Basic Paxos

    理解分布式一致性:Paxos协议之Basic Paxos 角色 Proposal Number & Agreed Value Basic Paxos Basic Paxos without f ...

  6. 分布式一致性算法之Paxos原理剖析

    概述 Zookeeper集群中,只有一个节点是leader节点,其它节点都是follower节点(实际上还有observer节点,不参与选举投票,在这里我们先忽略,下同).所有更新操作,必须经过lea ...

  7. Zookeeper笔记(二)Paxos算法与Zookeeper的工作原理

    Zookeeper 分布式服务框架是 Apache Hadoop 的一个子项目, 它主要是用来解决分布式应用中经常遇到的一些数据管理问题,如:统一命名服务.状态同步服务.集群管理.分布式应用配置项的管 ...

  8. zookeeper工作原理、安装配置、工具命令简介

    1.Zookeeper简介 Zookeeper 是分布式服务框架,主要是用来解决分布式应用中经常遇到的一些数据管理问题,如:统一命名服务.状态同步服务.集群管理.分布式应用配置项的管理等等. 2.zo ...

  9. Zookeeper 原理

    ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,它包含一个简单的原语集,分布式应用程序可以基于它实现同步服务,配置维护和命名服务等.Zookeeper是hadoop的一个子项目,其 ...

  10. zookeeper是什么?原理是什么?【转】

    ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,它包含一个简单的原语集,分布式应用程序可以基于它实现同步服务,配置维护和命名服务等.Zookeeper是hadoop的一个子项目,其 ...

随机推荐

  1. 装机、UEFI双系统安装

    装机设置 设置默认中图标显示查看-选项-查看-应用到文件夹 控制面板-语言-管理输入法 word-选项-取消输入法设置处于活动状态word-字体-设置默认值 高DPI的显示屏,需要使用125%的缩放, ...

  2. Java开发JDBC连接数据库

    Java开发JDBC连接数据库 创建一个以JDBC连接数据库的程序,包含6个步骤: JDBC五部曲1.加载驱动2.获得链接3.获取statement对象 4.执行SQL语句5.产生resultset对 ...

  3. 软件工程项目组Z.XML会议记录 2013/11/20

    软件工程项目组Z.XML会议记录 [例会时间]2013年11月20日星期三21:00-22:00 [例会形式]小组讨论 [例会地点]学生公寓3号楼会客厅 [例会主持]李孟 [会议记录]李孟 会议整体流 ...

  4. PokeCats开发者日志(四)

      现在是PokeCats游戏开发的第八天的上午,感觉游戏做得差不多了,来写一下开发者日志吧!   (1)增加闯关模式,一共30关.   (2)更改了最后一关的主题,更换了背景,将树桩改为礼物盒.   ...

  5. 【bzoj1260】[CQOI2007]涂色paint 区间dp

    题目描述 给出一个序列,每次可以给一段染成同一种颜色,问最少要染多少次能够染成给定方案. 输入 输入仅一行,包含一个长度为n的字符串,即涂色目标.字符串中的每个字符都是一个大写字母,不同的字母代表不同 ...

  6. 【bzoj2659】[Beijing wc2012]算不出的算式 数论

    题目描述 求,其中p和q是奇质数. 输入 只有一行,两个奇质数,分别表示p,q. 输出 一个数,表示算式结果. 样例输入 5 样例输出 6 题解 数论 神TM数学结论题... 当$p\neq q$时, ...

  7. java高精度类尝试

    java高精度尝试, poj2109,比较坑的题目 import java.io.*; import java.util.*; import java.math.*; public class Mai ...

  8. [洛谷P1747]好奇怪的游戏

    题目大意:有两匹马,马可以走"日",也可以像象走"田",求它走到(1,1)的步数. 题解:bfs 卡点:边界判断成了可以走到(0,y)或(x,0) C++ Co ...

  9. [洛谷P1317]低洼地

    题目大意:一组数,分别表示地平线的高度变化.高度值为整数,相邻高度用直线连接.找出并统计有多少个可能积水的低洼地?(首尾都为0) 题解:求出其中都多少个不严格下降子段和不严格上升子段所夹的位置,即为答 ...

  10. underscore的bind和bindAll方法

    bind方法和bindAll方法都是用来设定函数的this值的,区别是调用方式不同. var xiaoming = { say:function(){ console.log('I am xiaomi ...