ZooKeeper和CAP理論及一致性原則


一、CAP理論概述

分布式領域中存在CAP理論,且該理論已被證明:任何分布式系統只可同時滿足兩點,無法三者兼顧。
  C:Consistency一致性,數據一致更新,所有數據變動都是同步的。
  A:Availability可用性,系統具有好的響應性能。
  P:Partition tolerance分區容錯性
因此,將精力浪費在思考如何設計能滿足三者的完美系統上是愚鈍的,應該根據應用場景進行適當取舍。

(1)一致性
  一致性是指從系統外部讀取系統內部的數據時,在一定約束條件下相同,即數據變動在系統內部各節點應該是同步的。根據一致性的強弱程度不同,可以將一致性級別分為如下幾種:

  ①強一致性(strong consistency)。任何時刻,任何用戶都能讀取到最近一次成功更新的數據。
  ②單調一致性(monotonic consistency)。任何時刻,任何用戶一旦讀到某個數據在某次更新后的值,那么就不會再讀到比這個值更舊的值。也就是說,可  獲取的數據順序必是單調遞增的。
  ③會話一致性(session consistency)。任何用戶在某次會話中,一旦讀到某個數據在某次更新后的值,那么在本次會話中就不會再讀到比這值更舊的值   會話一致性是在單調一致性的基礎上進一步放松約束,只保證單個用戶單個會話內的單調性,在不同用戶或同一用戶不同會話間則沒有保障。示例case:php的  session概念。
  ④ 最終一致性(eventual consistency)。用戶只能讀到某次更新后的值,但系統保證數據將最終達到完全一致的狀態,只是所需時間不能保障。
  ⑥弱一致性(weak consistency)。用戶無法在確定時間內讀到最新更新的值。

二、ZooKeeper提供的一致性服務

  很多文章和博客里提到,zookeeper是一種提供強一致性的服務,在分區容錯性可用性上做了一定折中,這和CAP理論是吻合的。但實際上zookeeper提供的只是單調一致性。
原因
  1. 假設有2n+1個server,在同步流程中,leader向follower同步數據,當同步完成的follower數量大於 n+1時同步流程結束,系統可接受client的連接請求。如果client連接的並非同步完成的follower,那么得到的並非最新數據,但可以保證單調性。
  2. follower接收寫請求后,轉發給leader處理;leader完成兩階段提交的機制。向所有server發起提案,當提案獲得超過半數(n+1)的server認同后,將對整個集群進行同步,超過半數(n+1)的server同步完成后,該寫請求完成。如果client連接的並非同步完成follower,那么得到的並非最新數據,但可以保證單調性。

用分布式系統的CAP原則來分析Zookeeper
(1)C: Zookeeper保證了最終一致性,在十幾秒可以Sync到各個節點.
(2)A: Zookeeper保證了可用性,數據總是可用的,沒有鎖.並且有一大半的節點所擁有的數據是最新的,實時的. 如果想保證取得是數據一定是最新的,需要手工調用Sync()
(2)P: 有2點需要分析的.
     節點多了會導致寫數據延時非常大,因為需要多個節點同步.
     節點多了Leader選舉非常耗時, 就會放大網絡的問題. 可以通過引入 observer節點緩解這個問題.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM