Zookeeper學習筆記.md
Zookeeper的功能
1、Zookeeper是什麼
Zookeeper是一個分散式,開放原始碼的分散式應用程式協調服務,是Google的Chubby一個開源的實現,它是叢集的管理者,監視著叢集中各個節點的狀態,根據節點提交的反饋進行下一步的合理操作。最終將簡單易用的介面和效能高效、功能穩定的系統提供給使用者。
Zookeeper提供了什麼
- 檔案系統
- 通知機制
檔案系統
每個子目錄項如 NameService 都被稱作為znode,和檔案系統一樣,我們能夠自由的增加、刪除znode,在一個znode下增加、刪除子znode,唯一的不同在於znode是可以儲存資料的。
- PERSISTENT-持久化目錄節點,客戶端與Zookeeper斷開連線後,該節點依然存在。
- PERSISTENT_SEQUENTIAL持久化順序編號目錄節點,斷開連線後,節點依舊存在,只是Zookeeper給該節點進行順序編號。
- EPHEMERAL-臨時目錄節點,斷開連線後,該節點被刪除。
- EPHEMERAL_SEQUENTIAL-臨時順序編號目錄節點,斷開連線後,只是Zookeeper給該節點進行順序編號。
Zookeeper的通知機制
客戶端註冊監聽它關心的目錄節點,當目錄節點發生變化(資料改變、被刪除、子目錄節點增加刪除)時,Zookeeper會通知客戶端。
Zookeeper做了什麼
- 命名服務(建立目錄,唯一的path)
- 配置管理
- 叢集管理
- 分散式鎖
- 佇列管理
配置管理
程式總是需要配置的,如果程式分散部署在多臺機器上,要逐個改變配置就變得困難。現在把這些配置全部放到zookeeper上去,儲存在 Zookeeper 的某個目錄節點中,然後所有相關應用程式對這個目錄節點進行監聽,一旦配置資訊發生變化,每個應用程式就會收到 Zookeeper 的通知,然後從 Zookeeper 獲取新的配置資訊應用到系統中。
叢集管理
- 是否有機器退出和加入、選舉master。
設計目的
1.最終一致性:client不論連線到哪個Server,展示給它都是同一個檢視,這是zookeeper最重要的效能。
2.可靠性:具有簡單、健壯、良好的效能,如果訊息被到一臺伺服器接受,那麼它將被所有的伺服器接受。
3.實時性:Zookeeper保證客戶端將在一個時間間隔範圍內獲得伺服器的更新資訊,或者伺服器失效的資訊。但由於網路延時等原因,Zookeeper不能保證兩個客戶端能同時得到剛更新的資料,如果需要最新資料,應該在讀資料之前呼叫sync()介面。
4.等待無關(wait-free):慢的或者失效的client不得干預快速的client的請求,使得每個client都能有效的等待。
5.原子性:更新只能成功或者失敗,沒有中間狀態。
6.順序性:包括全域性有序和偏序兩種:全域性有序是指如果在一臺伺服器上訊息a在訊息b前釋出,則在所有Server上訊息a都將在訊息b前被髮布;偏序是指如果一個訊息b在訊息a後被同一個傳送者釋出,a必將排在b前面。