標籤:
下面內容主要摘抄於<<Hadoop實戰>>,紅色高亮部分是本人添加的白話注釋.
Zookeeper 是一種高效能、可擴充的服務。 Zookeeper 的讀寫速度非常快,並且讀的速度要比寫的速度更快。另外,在進行讀操作的時候, ZooKeeper 依然能夠為舊的資料提供服務。這些都是由於 ZooKeepe 所提供的一致性保證,它具有如下特點:
【Zookeeper提供的一致性是弱一致性,首先資料的複製有如下規則:zookeeper確保對znode樹的每一個修改都會被複製到集合體中超過半數的機器上。那麼就有可能有節點的資料不是最新的而被用戶端訪問到。並且會有一個時間點,在叢集中是不一致的.
也就是Zookeeper只保證最終一致性, 但是即時的一致性可以由用戶端調用自己來保證,通過調用sync()方法.
】
順序一致性
用戶端的更新順序與它們被發送的順序相一致。
原子性
更新操作要麼成功要麼失敗,沒有第三種結果。
單系統鏡像
無論用戶端串連到哪一個伺服器,用戶端將看到相同的 ZooKeeper 視圖。
【如果資料不一致,怎麼能夠保證看到相同的視圖? 插入/刪除/修改都會對資料結構有影響】
可靠性
一旦一個更新操作被應用,那麼在用戶端再次更新它之前,它的值將不會改變。。這個保證將會產生下面兩種結果:
1 .如果用戶端成功地獲得了正確的傳回碼,那麼說明更新已經成果。如果不能夠獲得傳回碼(由於通訊錯誤、逾時等等),那麼用戶端將不知道更新操作是否生效。
2 .當從故障恢複的時候,任何用戶端能夠看到的執行成功的更新操作將不會被復原。
即時性
在特定的一段時間內,用戶端看到的系統需要被保證是即時的(在十幾秒的時間裡)。在此時間段內,任何系統的改變將被用戶端看到,或者被用戶端偵測到。
【偽即時性,太讓人誤解了,直白點說就是資料可以在十幾秒Sync到各個節點,保證最終一致性. 我第一時間看到這個即時性的時候,我就好奇,Oracle RAC花了老鼻子勁才保證了即時性和一致性,Zookeeper是如何輕鬆做到的,原來是個假的,還說的那麼讓人誤會. 】
給予這些一致性保證, ZooKeeper 更進階功能的設計與實現將會變得非常容易,例如: leader 選舉、隊列以及可撤銷鎖等機制的實現。
【
用分布式系統的CAP原則來分析Zookeeper.
1)C: Zookeeper保證了最終一致性,在十幾秒可以Sync到各個節點.
2)A: Zookeeper保證了可用性,資料總是可用的,沒有鎖.並且有一大半的節點所擁有的資料是最新的,即時的. 如果想保證取得是資料一定是最新的,需要手工調用Sync()
3)P: 有2點需要分析的.
節點多了會導致寫資料延時非常大,因為需要多個節點同步.
節點多了Leader選舉非常耗時, 就會放大網路的問題. 可以通過引入observer節點緩解這個問題.
】
http://www.cnblogs.com/lpshou/archive/2013/06/14/3136904.html
轉載部落格:http://flyfoxs.iteye.com/blog/2121560
【大資料筆記】白話詳解Zookeeper的一致性