Zookeeper与Paxos

来源:互联网 发布:株洲中车 知乎 编辑:程序博客网 时间:2024/06/09 13:47

Zookeeper

分布式一致性

1.顺序一致性:从同一个客户端发起的事务请求,最终将会严格地按照其发起顺序被应用到Zookeeper中去。
2.原子性:整个集群要么都成功应用了某个事务,要么都没有应用。
3.单一视图:无论客户端连接的是啊个Zookeeper服务器,其看到的服务端数据模型都是一致的。
4.可靠性:一旦服务端成功地应用了一个事务,并完成对客户端的响应,那么该事务所引起的服务端状态变更将会一直被保留,除非有另一个事务对其进行了变更。
5.实时性:Zookeeper保证在一定的时间段内,客户端最终一定能够从服务端上读取到最新的数据状态。

ZAB协议

Zookeeper Atomic Broadcast,Zookeeper原子消息广播协议,是Zookeeper为其数据一致性的核心算法。ZAB包括两种基本的模式:崩溃恢复和消息广播。
(1)消息广播
ZAB协议的消息广播过程使用原子广播协议,类似于一个二阶段提交过程,针对客户端的事务请求,Leader服务器会为其生成对应的事务Proposal,并将其发送给集群中其余所有的机器,然后再分别收集各自的选票,最后进行事务提交。
ZAB协议可以在过半的Follower服务器已经反馈Ack之后就开始提交事务Proposal,而不需要等待集群中所有的Follower服务器都反馈响应,但是,在这种简单化的二队段提交模型下,无法处理Leader服务器崩溃退出而带来的数据不一致问题。因此ZAB采用了崩溃恢复模式来解决此问题。
(2)崩溃恢复
在ZAB协议中,为了保证程序的正确运行,整个恢复过程结束后需要选举出一个新的Leader服务器,因此需要一个高效且可靠的Leader选举算法。

ZAB与Paxos

相同点:
(1)都存在一个类似于Leader进程的角色,由其负责协议多个Follower进程运行。
(2)Leader进程都会等待超过半数的Follower做出正确的反馈后,才会将一个提议进行提交。
(3)在ZAB协议中,每个Proposal中都包含了一个epoch值,用来代表当前的Leader周期,在Paxos算法中,同样存在这样的一个标识,名字为Ballot。

不同点:
(1)Paxos算法中,新选举产生的主进程会进行两阶段的工作,第一阶段称为读阶段,新的主进程和其它进程通信来收集主进程提出的提议,并将它们提交。第二阶段称为写阶段,当前主进程开始提出自己的提议。
(2)ZAB协议是Paxos基础上添加了同步阶段,此时,新的Leader会确保存在过半的Follower已经提交了之前的Leader周期中的所有事务Proposal。
(3)ZAB协议主要用于构建一个高可用的分布式数据主备系统,而Paxos算法则用于构建一个分布式的一致性状机系统。
原创粉丝点击