Zookeeper学习之:paxos算法

paxos算法的重要性众所周知,它给如今的分布式一致性提供了迄今为止最好的解决方案。无论是Lamport自己的论文描述,还是网上的诸多资料,对paxos的描述都是及其简洁的,给人的感觉是paxos看似很简单,但是细深究起来又不是那么的具象,因为单纯的文字描述还是略显抽象,因此,我会先分别从文字概念描述和伪代码的方式分别阐述paxos算法的概念思想,对比着看,可以加深对paxos的理解,后期我会结合PhxPaxos代码来进一步探讨paxos工程化过程中一些实践问题。

首先来看paxos算法的文字版描述。

阶段一:

1、Proposal选择一个提案编号为Mn,然后向Acceptor的某个超过半数的子集成员发送编号为Mn的Prepare请求。

2、如果一个Acceptor收到一个编号为Mn的Prepare请求,且编号Mn大于该Acceptor已经响应的Prepare请求的编号,那么它就会将已经批准(accept)的最大编号的提案作为响应反馈给Proposal,同时该Acceptor会承诺不会再批准(accept)任何编号小于Mn的提案。

阶段二:

1、如果Proposal收到来自半数以上的Acceptor对其发出的编号为Mn的Prepare请求的响应,那么它就会发出一个针对[Mn,Vn]提案的Accept请求给Acceptor。注意:Vn的值就是收到的Prepare响应中编号最大的提案的值,如果响应中不包含任何提案,那么它就是任意值。

2、如果Acceptor收到这个针对[Mn,Vn]提案的Accept请求,只要改Acceptor尚未对编号大于Mn的Prepare请求作出响应,它就可以通过这个提案。

注意:

Acceptor是一个集合(即不止一个Acceptor)。之所以要过半,是因为,任意的过半的集合都至少会有一个公共的交集,这适用于分区脑裂等场景。

接下来,看一下paxos的伪代码版本,对照着上面的文字版,会有很好的效果。

时间: 2024-12-19 19:06:44

Zookeeper学习之:paxos算法的相关文章

Paxos算法之旅(四)zookeeper代码解析

ZooKeeper是近期比较热门的一个类Paxos实现.也是一个逐渐得到广泛应用的开源的分布式锁服务实现.被认为是Chubby的开源版,虽然具体实现有很多差异.ZooKeeper概要的介绍可以看官方文档:http://hadoop.apache.org/zookeeper 这里我们重点来看下它的内部实现. ZooKeeper集群中的每个server都要知道其他成员,通过在配置文件zoo.cfg中作如下配置实现: tickTime=2000 dataDir=/var/zookeeper/ clie

zookeeper paxos算法

原文出处:http://rdc.taobao.com/blog/cs/?p=162 本文主要介绍zookeeper中zookeeper Server leader的选举,zookeeper在选举leader的时候采用了paxos算法(主要是fast paxos),这里主要介绍其中两种:LeaderElection 和FastLeaderElection. 我们先要清楚以下几点 一个Server是如何知道其它的Server 在zookeeper中,一个zookeeper集群有多少个Server是固

Zookeeper深入理解(五)Paxos算法

Paxos算法是莱斯利·兰伯特(Leslie Lamport,就是 LaTeX 中的"La",此人现在在微软研究院)于1990年提出的一种基于消息传递且具有高度容错特性的一致性算法.[1] 问题和假设 分布式系统中的节点通信存在两种模型:共享内存(Shared memory)和消息传递(Messages passing).基于消息传递通信模型的分布式系统,不可避免的会发生以下错误:进程可能会慢.垮.重启,消息可能会延迟.丢失.重复,在基础 Paxos 场景中,先不考虑可能出现消息篡改即

zookeeper学习系列:四、Paxos算法和zookeeper的关系

一.问题起源 淘宝搜索的博客 http://www.searchtb.com/2011/01/zookeeper-research.html  提到Paxos是zookeeper的灵魂 有一篇文章标题更是以“Zookeeper全解析——Paxos作为灵魂” 作为标题,认为是zookeeper的基础: “ Google的Chubby,Apache的Zookeeper都是基于它的理论来实现的,Paxos还被认为是到目前为止唯一的分布式一致性算法,其它的算法都是Paxos的改进或简化.有个问题要提一下

Zookeeper与paxos算法

一. zookeeper是什么 官方说辞:Zookeeper 分布式服务框架是Apache Hadoop 的一个子项目,它主要是用来解决分布式应用中经常遇到的一些数据管理问题,如:统一命名服务.状态同步服务.集群管理.分布式应用配置项的管理等. 好抽象,我们改变一下方式,先看看它都提供了哪些功能,然后再看看使用它的这些功能能做点什么. 二. zookeeper提供了什么 简单的说,zookeeper=文件系统+通知机制. 1. 文件系统 Zookeeper维护一个类似文件系统的数据结构: 每个子

分布式一致性思想描述及Paxos算法学习

在分布式的情况下,出于可用性(单点问题导致全部不可用)和规模性(单点支撑能力有限)的考虑,通过使用多个参与者提供服务. 如何保证通过多个参与者写入和读取的值相同,即分布式中的数据一致性,是一个复杂的问题. 为了保持一致性,一般是两种方案,一种是所有节点每个事务里都一致(强一致):另一种不是所有节点在每个事物里都完全一致,比如采用主节点先更新,其他节点追加式更新的模式. 强一致模式下,服务可能会因为等待所有节点的同步更新和反馈,服务变得非常慢或者中断.节点间不完全一致的模式,如果仅看一个节点,可能

【转】Paxos算法细节详解

最近研究zookeeper因此就学习了一下paxos算法,一直没太看懂,今天找到了这篇文章描述的很清晰,转自:http://www.cnblogs.com/endsock/p/3480093.html Paxos分析 最近研究paxos算法,看了许多相关的文章,概念还是很模糊,觉得还是没有掌握paxos算法的精髓,所以花了3天时间分析了libpaxos3的所有代码,此代码可以从https://bitbucket.org/sciascid/libpaxos 下载.对paxos算法有初步了解之后,再

底层算法系列:Paxos算法

关于算法,面太广.本系列只研究实际应用中遇到的核心算法.了解这些算法和应用,对java码农进阶是很有必要的. 对于Paxos学习论证过程中,证实一句话:有史以来学习paxos最好的地方wiki:Paxos (computer science) 目录 1.背景 2.Paxos算法 3.Muti-Paxos算法 4.Muti-Paxos在google chubby中的应用 ===============正文分割线============================ 一.背景 Paxos 协议是一

【转】Paxos算法3-实现探讨

——转自:{老码农的专栏} 前两篇Paxos算法的讨论,让我们对paxos算法的理论形成过程有了大概的了解,但距离其成为一个可执行的算法程序还有很长的路要走,原因是很多的细节和错误未被考虑.Google Chubby的作者说,paxos算法实现起来远没有看起来简单,原因是paxos的容错仅限于server crash这一种情况,但在实际工程实现时要考虑磁盘损坏.文件损坏.Leader身份丢失等诸多的错误. 1. Paxos各角色的职能 在paxos算法中存在Client.Proposer.Pro