zoukankan      html  css  js  c++  java
  • Zookeeper(八)ZAB协议和CAP理论

    一、什么是ZAB协议?

      Zab 借鉴了 Paxos 算法,是特别为Zookeeper设计的支持崩溃恢复的原子广播协议。基于该协议,Zookeeper设计为只有一台客户端(Leader)负责处理外部的写事务请求,然后 Leader 客户端将数据同步到其他Follower节点。即Zookeeper只有一个Leader可以发起提案(proposal)。

      Zab 协议主要包括两部分:消息广播崩溃恢复

      整个Zookeeper就是在这两个模式之间切换。 当Leader服务可以正常使用,就进入消息广播模式,当Leader不可用时,则进入崩溃恢复模式

    二、消息广播

      ZAB协议的消息广播过程使用的是一个原子广播协议,类似一个二阶段提交过程

      对于客户端发送的写请求,全部由Leader接收,Leader将请求封装成一个事务提案(proposal),将其发送给所有Follwer,如果超过半数Follwer成功响应,则执行commit操作(先提交自己,再发送commit给所有Follwer)。

    广播流程图解

    • (1)客户端发起写操作请求
    • (2)Leader服务器将客户端的请求转化为事务Proposal提案【同步写请求】,同时为每个Proposal分配一个全局的ID,即zxid。
    • (3)Leader服务器为每个Follower服务器分配一个单独的队列,然后将需要广播的Proposal依次放到队列中去,并且根据FIFO策略进行消息发送。
    • (4)Follower接收到Proposal后,会首先将其以事务日志的方式写入本地磁盘中,写入成功后向Leader反馈一个ACK响应消息。
    • (5)Leader接收到超过半数以上Follower的ACK响应消息后,即认为消息发送成功,可以发送commit消息。
    • (6)Leader向所有Follower广播commit消息,同时自身也会完成事务提交。Follower接收到commit消息后,会将上一条事务提交

      PS:Zab协议的核心,就是只要有一台服务器提交了Proposal,就要确保所有的服务器最终都能正确提交Proposal

    三、崩溃恢复

      一旦Leader服务器出现崩溃或者由于网络原因导致Leader服务器失去了与过半Follower的联系,那么就会进入崩溃恢复模式。

    出现异常的两种情况

    • (1)假设一个事务在Leader提出之后,Leader挂了
    • (2)一个事务在Leader上提交了,并且过半的Follower都响应Ack了,但是Leader在Commit消息发出之前挂了

    Zab协议崩溃恢复原则

    • (1)确保已经被Leader提交的提案Proposal,必须最终被所有的Follower服务器提交。【已经产生的提案,Follower必须执行】
    • (2)确保丢弃已经被Leader提出的,但是没有被提交的Proposal。【丢弃Leader最终没确认commit的提案】

    恢复方式

      恢复方式主要就是选取新的Leader,再进行数据同步,选取Leader的流程可以详见我上一篇文章《Zookeeper(七)Zookeeper集群角色及选举原理分析》

    四、CAP理论

    什么是CAP理论?

    • 一致性(C:Consistency)
    • 可用性(A:Available)
    • 分区容错性(P:Partition Tolerance)

      CAP理论告诉我们,一个分布式系统不可能同时满足以上三种

      PS:这三个基本需求,最多只能同时满足其中的两项,因为P是必须的,因此往往选择就在CP或者AP中。

    一致性(C:Consistency)

      在分布式系统完成某写操作后任何读操作,都应该获取到该写操作写入的那个最新的值。相当于要求分布式系统中的各节点时时刻刻保持数据的一致性。

    可用性(A:Available)

      客户端一直可以正常访问并得到系统的正常响应。从用户角度来看就是不会出现系统操作失败或者访问超时等问题。

    分区容错性(P:Partition Tolerance)

      指的分布式系统中的某个节点或者网络分区出现了故障的时候,整个系统仍然能对外提供满足一致性和可用性的服务。也就是说部分故障不影响整体使用。 

    Zookeeper如何应用CAP理论?

      PS:Zookeeper保证的是CP

      原因如下:

    • (1)ZooKeeper不能保证每次服务请求的可用性。【在极端环境下,ZooKeeper可能会丢弃一些请求,需要用户重新请求进行获取】
    • (2)进行Leader选举时集群都是不可用的状态。
  • 相关阅读:
    【面积并】 Atlantis
    【动态前k大 贪心】 Gone Fishing
    【复杂枚举】 library
    【双端队列bfs 网格图建图】拯救大兵瑞恩
    【奇偶传递关系 边带权】 奇偶游戏
    【权值并查集】 supermarket
    CF w4d3 A. Pythagorean Theorem II
    CF w4d2 C. Purification
    CF w4d2 B. Road Construction
    CF w4d2 A. Cakeminator
  • 原文地址:https://www.cnblogs.com/riches/p/15178314.html
Copyright © 2011-2022 走看看