paxos算法

zookeeper专栏
上一篇主目录 下一篇

目录


【前言】
让zookeeper中的每个节点的数据都保持一致,才能对外提供服务。没有进行数据同步的zk节点,可以剔除出服务范围之外。既然要保持数据的一致性,那么这些数据应该是重要的、少量的。本文介绍paxos算法是如何使zookeeper集群保持数据一致性。

参考文章:
图解分布式一致性协议Paxos
Paxos算法详解
如何浅显易懂地解说 Paxos 的算法?


在分布式场景中,要访问相同的值,这个值的存储形式有两种:
1、共享存储(公共的存储地)(并发编程领域:同步数据)
2、消息传递

Paxos算法是Lesile Lamport提出的一种基于消息传递且具有高度容错特性的一致性算法。基于消息传递通信模型的分布式系统,不可避免会发生进程变慢被杀死,消息延迟、丢失、重复等问题,Paxos算法就是在存在以上异常的情况下仍能保持一致性的协议。

参议院 51 提议 赞成票:26
虚拟了一个神话故事:在paxos岛上为了通过某个法律条文模拟的一个投票过程

Paxos算法使用一个希腊故事来描述,在Paxos中,存在三种角色,分别为
Proposer(提议者,用来发出提案proposal)
Acceptor(接受者,可以接受或拒绝提案)
Learner(学习者,学习被选定的提案,当提案被超过半数的Acceptor接受后为被批准)
下面更精确的定义Paxos要解决的问题:

1、决议(value)只有在被proposer提出后才能被批准
2、在一次Paxos算法的执行实例中,只批准(chose)一个value
3、learner只能获得被批准(chosen)的value

所有事务请求必须由一个全局唯一的服务器来协调处理,这样的服务器被称为leader服务器,而余下的其他服务器则成为follower服务器。leader服务器负责将一个客户端事务请求转换成一个事务proposal,并将该proposal分发给集群中所有的follower服务器。之后leader服务器需要等待所有follower服务器的反馈,一旦超过半数的follower服务器进行了正确的反馈后,那么leader就会再次向所有的follower服务器分发commit消息,要求其将前一个proposal进行提交。

ZAB协议需要确保那些已经在leader服务器上提交的事务最终被所有服务器都提交。ZAB协议需要确保丢弃那些只在leader服务器上被提出的事务。ZAB两种基本的模式:崩溃恢复和消息广播。
如果让leader选举算法能够保证新选举出来的leader服务器拥有集群中所有机器最高编号(ZXID)的事务proposal,那么就可以保证这个新选举出来的leader一定具有所有已经提交的提案。

paxos有很多的变种版本:

1、basic paxos 谷歌的chubby所有采用的paxos
2、fast paxos zookeeper采用的paxos

basic paxos

第一个阶段:
当前上线的follower去连接leader的时候,发现根本就没有leader。发起提议来选举leader,首先选举出来的leader只是合适成为leader的备选节点
第二个阶段:
再次投票来决定当前选举出来的比较合适成为真正leader的这个节点,是不是会被超过半数的节点通过

fast paxos

提议自己成为leader,让其他节点投票

数据都是最新,发起提议的投票结果的ID也都一致,则决胜的条件:myid

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值