上一章讨论了paxos算法,把paxos推到一个很高的位置.但是,paxos有没有什么问题呢?实际上,paxos还是有其自身的缺点的: 1. 活锁问题.在base-paxos算法中,不存在leader这样的角色,于是存在这样一种情况,即P1提交了一个proposal n1并且通过了prepare阶段:此时P2提交了一个proposal n2(n2>n1)并且也通过了prepare阶段:P1在commit时因为已经通过了n2而被拒绝:于是P1继续提交一个proposal n3并且通过prepare…
不多说,直接上干货! 上一章讨论了paxos算法,把paxos推到一个很高的位置. Zookeeper概念学习系列之paxos协议 但是,paxos有没有什么问题呢?实际上,paxos还是有其自身的缺点的. 1. 活锁问题.在base-paxos算法中,不存在leader这样的角色,于是存在这样一种情况,即P1提交了一个proposal n1并且通过了prepare阶段:此时P2提交了一个proposal n2(n2>n1)并且也通过了prepare阶段:P1在commit时因为已经通过了n2而…
上一章讨论了一种强一致性的情况,即需要分布式事务来解决,本章我们来讨论一种最终一致的算法,paxos算法. paxos算法是由大牛lamport发明的,关于paxos算法有很多趣事.比如lamport论文最初由故事描述来引入算法,以至于那班习惯数学公式的评委将该论文打回,导致该论文延误了8年才公开发表.另外,google的chubby的作者Mike Burrows说过,世界上只有一种一致性算法,那就是paxos. 两将军问题 为了引入该算法,首先提出一种场景,即两将军问题(见文献1): 有两支军…
Zookeeper应用场景 数据发布/订阅(配置中心) 我们平常的开发过程中,经常会碰到这样的需求:系统中需要一些通用的配置信息,如一些运行时的开关.前端需要展示的通知信息.数据库配置信息等等.这些需求通常都要求具备3个特性: 数据量比较小 数据内容在运行时会变化 集群中的所有机器共享,数据一致 我们假设把这些数据存储在应用的内存中,那么数据共享是一个问题,数据变更的通知又是一个问题. 那我们使用Zookeeper怎么实现呢? 配置存储 我们可以先把数据存储在Zookeeper的一个节点上.如/…
zookeeper可谓是目前使用最广泛的分布式组件了.其功能和职责单一,但却非常重要. 在现今这个年代,介绍zookeeper的书和文章可谓多如牛毛,本人不才,试图通过自己的理解来介绍zookeeper,希望通过一个初学者的视角来学习zookeeper,以期让人更加深入和平稳的理解zookeeper.其中参考了不少教程和书,相关书目列在文末,也感谢这些作者. 学习新的框架,先让我们搞清楚他是什么,这是它的内涵.然后再介绍它能做什么,这是它的外延,内涵和外延共同来定义框架本身,会对框架有较为深刻的…
zookeeper可谓是目前使用最广泛的分布式组件了.其功能和职责单一,但却非常重要.    在现今这个年代,介绍zookeeper的书和文章可谓多如牛毛,本人不才,试图通过自己的理解来介绍zookeeper,希望通过一个初学者的视角来学习zookeeper,以期让人更加深入和平稳的理解zookeeper.其中参考了不少教程和书,相关书目列在文末,也感谢这些作者.    学习新的框架,先让我们搞清楚他是什么,这是它的内涵.然后再介绍它能做什么,这是它的外延,内涵和外延共同来定义框架本身,会对框架…
Zab协议(Zookeeper Atomic Broadcast): 广播模式: Leader将所有更新(称为proposal),顺序发送给Follower 当Leader收到半数以上的Follower对此proposal的ACK时,即向所有Follower发送commit消息,并在本地commit该消息 Follower收到proposal后即将该proposal写入磁盘,写入成功即返回ACK给Leader 每个proposal都有一个唯一的单调递增的proposal ID, 即zxid 收到…
上一章我们了解了zookeeper到底是什么,这一章重点来看zookeeper当初到底面临什么问题?而zookeeper又是如何解决这些问题的? 实际上zookeeper主要就是解决分布式环境下的一致性问题.那么解决这个问题到底有哪些难点呢?我们一步一步来阐述和推理这个过程. 分布式事务 我们首先考虑一致性的特殊情况,即分布式事务的情况.分布式事务对于一致性的要求是强一致性,因此对于我们后续讨论有一定的借鉴意义.这里我们用到一个经典的例子:bob给smith转账,强一致性的要求一定是需要对外来说…
不多说,直接上干货! 前言 一种最终一致的算法,paxos算法. paxos算法是由大牛lamport发明的,关于paxos算法有很多趣事.比如lamport论文最初由故事描述来引入算法,以至于那班习惯数学公式的评委将该论文打回,导致该论文延误了8年才公开发表.另外,google的chubby的作者Mike Burrows说过,世界上只有一种一致性算法,那就是paxos. 两将军问题 为了引入该算法,首先提出一种场景,即两将军问题: 有两支军队,它们分别有一位将军领导,现在准备攻击一座修筑了防御…
ZooKeeper为高可用的一致性协调框架,自然的ZooKeeper也有着一致性算法的实现,ZooKeeper使用的是ZAB协议作为数据一致性的算法,ZAB(ZooKeeper Atomic Broadcast )全称为:原子消息广播协议:ZAB可以说是在Paxos算法基础上进行了扩展改造而来的,ZAB协议设计了支持崩溃恢复,ZooKeeper使用单一主进程Leader用于处理客户端所有事务请求,采用ZAB协议将服务器数状态以事务形式广播到所有Follower上:由于事务间可能存在着依赖关系,Z…