Zookeeper概論(對zookeeper的概論、原理、架構等的理解) 一、概論 Zookeeper是一個分散式的、開放源碼的分散式應用程式協調服務,是Google的Chubby一個開源的實現,是hadoop和hbase 的重要組件。它是一個為分散式應用提供一致性服務的軟體。提供的功能包括:配置維 ...
Zookeeper概論(對zookeeper的概論、原理、架構等的理解)
一、概論
Zookeeper是一個分散式的、開放源碼的分散式應用程式協調服務,是Google的Chubby一個開源的實現,是hadoop和hbase
的重要組件。它是一個為分散式應用提供一致性服務的軟體。提供的功能包括:配置維護、名字服務、分散式服務、組服務等。
Zookeeper的目標就是封裝好複雜易出錯的關鍵服務,將簡單易用的介面和性能高效、功能穩定的系統提供給用戶。
Zookeeper包含一個簡單的原語集,提供Java和C的介面。
Zookeeper代碼版本中,提供了分散式獨享鎖、選舉、隊列的介面,代碼在Zookeeper-3.4.3\src\recipes。其中分佈鎖和隊列
有Java和C兩個版本,選舉只有Java版本。
二、原理
Zookeeper是以Fast Paxos演算法為基礎的,paxos演算法存活在活鎖的問題,即當有多個proposer交錯提交時,有可能互相排
斥導致沒有一個proposer能提交成功,而Fast Paxos 做了一些優化,通過選舉產生一個leader,只有leader才能提交proposer,
具體演算法可見Fast Paxos。因此,要想弄懂Zookeeper首先要對Fast Paxos有所瞭解。
Zookeeper的基本運轉流程:
1、選舉Leader。
2、同步數據。
3、選舉Leader過程中演算法有很多,但要達到的選舉標準是一致的。
4、Leader要具有最高的zxid。
5、集群中大多數的機器得到響應並follow選出的Leader。
三、架構:
四、功能
Zookeeper分散式服務框架是Apache Hadoop的一個子項目,它主要是用來解決分散式應用中經常遇到的一些數據管理問
題,如:統一命名服務、狀態同步服務、集群管理、分散式應用配置項的管理等。
五、數據結構
Zookeeper這種數據結構有如下特點:
1、每個子項目如NameService都被稱作為znode,這個znode是它所在的路徑唯一標識,如Server1這個znode的標識
為/NameService/Server1。
2、znode可以有子節點目錄,並且每個znode可以存儲數據,註意EPHEMERAL類型的目錄節點不能有子節點目錄。
3、znode是有版本的,每個znode中存儲的數據可以有多個版本,也就是一個訪問路徑中可以存儲多份數據。
4、znode可以是臨時節點,一旦這個znode的客戶端和伺服器失去聯繫,這個znode也將自動刪除,Zookeeper的客戶端和
伺服器通信採用長連接方式,每個客戶端和伺服器通過心跳來保持連接,這個連接狀態稱為session,如果znode是臨時節點,這個
session失效,znode也就刪除了。
5、znode的目錄名可以自動編號,如App1已經存在,再創建的話,將會自動命名為App2。
6、znode可以被監控,包括這個目錄節點中存儲的數據的修改,子節點目錄的變化等,一旦變化可以通知設置監控的客戶端,
這個是Zookeeper的核心特性,Zookeeper的很多功能都是基於這個特性實現的。