Paxos算法简单陈述
上文二段式和三段式提交协议是相对比较容易理解的。1990年Leslie Lamport 提出的Paxos算法是一种基于消息传递且具有高度容错特性的一致性算法。但是Paxos算法比较复杂,对于不能沉心学习的大部分人(当然我也是)看这种理论推导时一个非常无趣和没有效率的事情。还好在从paxos到zeekooper书中,有一段算法陈述还是相对比较容易理解的。
阶段一:
我们可以结合Proposer和Acceptor(角色的具体定义建议搜索引擎搜索Paxos进行初步了解),可以得到类似于两段式提交的算法执行过程:
1、Proposer选择一个提案编号Mn,然后向Acceptor中的某个超过半数的子集发送编号为Mn的Prepare请求。
2、如果一个Acceprot收到一个编号为Mn的Prepare请求,且编号Mn大于该Acceptor已经响应的所有Prepare请求的编号,那么它将会将它已经批准过的最大编号提案作为响应反馈给Proposer,同时该Acceptor会承诺不会再批准其他任何编号小于Mn的编号。
阶段二:
1、如果Proposer受到来自半数以上的Acceptor对于其发出的编号为Mn的Prepare请求的响应,那么它就会发送一个针对[Mn,Vn]提案的Accept请求给Acceptor。注意,Vn的值就是收到的响应中的编号最大的提案的值。如果响应中不包含任何提案,那么它就是任意值。
2、如果Acceptor受到这个针对[Mn,Vn]提案的Acceptor请求,只要该Acceptor尚未对编号大于Mn的Prepare请求作出响应,它就可以通过这个提案。
需要注意的是,为了保证Paxos算法流程的可持续性,需要选择主Proposer。三段式提交引入了Precommit机制来解决二段式提交的无限等待问题,而Paxos算法引入了“过半”的概念,也就是少数服从多数。同时,Paxos算法支持分布式节点角色之间的轮换,这极大的避免了分布式单点的出现。
其实如果开发和运维同事们都比较了解,现在从zookeeper到mongodb、redis,到mq、kafka等等全部支持集群部署,自动选举。
Paxos算法简单陈述的更多相关文章
- Paxos算法简单介绍
一种基于消息传递且具有高度容错特性的一致性算法.解决在存在宕机或者网络异常的集群中对某个数据的值达成一致性,并且保证无论在发生以上任何异常都不会破坏整个系统的一致性,具有容错性. Paxos算法实现的 ...
- 模拟Paxos算法及其简单学习总结
一.导读 Paxos算法的流程本身不算很难,但是其推导过程和证明比较难懂.在Paxos Made Simple[1]中虽然也用了尽量简化的流程来解释该算法,但其实还是比较抽象,而且有一些细节问题没有交 ...
- Paxos算法小结
转自不正直的绅士,因百度空间迁移,无法注明出处,我从其google搜索引擎中的cache进行的copy. 不正直的绅士 是跟我一起工作过的非常有才的一个青年才俊. Paxos的使用非常广泛.sanlo ...
- 一致性协议之Paxos算法
一.算法提出背景 Paxos算法需要解决的问题就是如何在一个可能发生诸如宕机或网络异常情况的分布式气筒中,快速且正确地在集群内部对某个数据的值达成一致,并且保证不论发生以上任何异常,都不会破坏整个系统 ...
- Paxos算法学习
早在1990年,Leslie Lamport(即 LaTeX 中的"La",微软研究院科学家,获得2013年图灵奖)向ACM Transactions on Computer Sy ...
- 分布式系列文章——Paxos算法原理与推导
Paxos算法在分布式领域具有非常重要的地位.但是Paxos算法有两个比较明显的缺点:1.难以理解 2.工程实现更难. 网上有很多讲解Paxos算法的文章,但是质量参差不齐.看了很多关于Paxos的资 ...
- 分布式理论之一:Paxos算法的通俗理解
维基的简介:Paxos算法是莱斯利·兰伯特(Leslie Lamport,就是 LaTeX 中的"La",此人现在在微软研究院)于1990年提出的一种基于消息传递且具有高度容错特性 ...
- Zookeeper学习之:paxos算法
paxos算法的重要性众所周知,它给如今的分布式一致性提供了迄今为止最好的解决方案.无论是Lamport自己的论文描述,还是网上的诸多资料,对paxos的描述都是及其简洁的,给人的感觉是paxos看似 ...
- 分布式数据库中的Paxos 算法
分布式数据库中的Paxos 算法 http://baike.baidu.com/link?url=ChmfvtXRZQl7X1VmRU6ypsmZ4b4MbQX1pelw_VenRLnFpq7rMvY ...
随机推荐
- [转]使用C#进行图像处理的几种方法
最近做监控图像由彩色变灰处理的时候发现图像处理过程中,很慢很慢代码如下: int Height = this.picInfo.Image.Height; int ...
- COM线程模型的行为
原文:https://msdn.microsoft.com/library/ms809971.aspx Behavior of the COM Threading Models COM线程模型的行为 ...
- MySQL3:存储过程和函数
什么是存储过程 简单说,存储过程就是一条或多条SQL语句的集合,可视为批文件,但是起作用不仅限于批处理.本文主要讲解如何创建存储过程和存储函数以及变量的使用,如何调用.查看.修改.删除存储过程和存储函 ...
- 922-按奇偶校验排序数组II
给定一组A 非负整数,A中的一半整数是奇数,而整数的一半是偶数. 对数组进行排序,以便每当A[i]奇数时,i都是奇数; 无论何时A[i]均匀,i均匀. 您可以返回满足此条件的任何答案数组. 例1: 输 ...
- 福州大学oj 1752 A^B mod C ===>数论的基本功。位运用。五星*****
Problem 1752 A^B mod C Accept: 579 Submit: 2598Time Limit: 1000 mSec Memory Limit : 32768 KB P ...
- 控制台直接执行sql语句
mysql -h127.0.0.1 -P3306 -uroot -paaccccccc databasename -e "select * from RegInfo where Plat ! ...
- 现代 C++ 编译时 结构体字段反射
基于 C++ 14 原生语法,不到 100 行代码:让编译器帮你写 JSON 序列化/反序列化代码,告别体力劳动.
- PHP生成缩略图(2)--等比缩略图
分析: 当原图是横屏或竖屏的时候,希望缩略图会保持原来的比例缩放,不改变原图的完整性,即等比缩放! 此时只需确定原图的宽高,以及目标图的最大宽高,比较目标图的宽高比例与原图的宽高比例的大小,以此来判断 ...
- [AMPPZ2014]Petrol
关键点的最小生成树? 关键点初始化为0,跑多源最短路,然后重构整个图,用Kruskal跑最小生成树 然后跑树链剖分在线回答询问 对树上每个点维护到链顶的最大值,结合线段树可以做到\(\Theta(n ...
- VMware桥接模式下主机和和虚机间互相ping不通的处理方法
在 "编辑"->"虚拟网络编辑器" 里面的vmnet0 桥接模式 里面是自动连接,把他改为真实的物理网卡即可,如下图: