Zookeeper概述、特點、原理

一、Zookeeper

1、分佈式環境下數據一致的基本問題
· 分佈式環境下,爲了保證數據的可靠或者分佈式的處理沒數據往往具有多個副本,而當數據發生變化時,如何保證數據一致,這是分佈式環境下數據分佈式存儲和處理的最基本的問題之一。

2、Zookeeper概述
· Zookeeper能夠在分佈式環境下實現數據的一致。他就是一個工具,利用這一特性,可以實現集羣中的分佈式協調服務。
· 所謂的分佈式協調服務,就是在集羣的節點中進行可靠的消息傳遞,來協調集羣的工作。
· Zookeeper之所以能夠實現分佈式協調服務,是因爲它能夠保證分佈式數據一致性
 ·所謂的分佈式數據一致性,指的就是可以在集羣中不同節點訪問到的數據保持一致。
· 這樣的分佈式協調服務包括:數據發佈訂閱、負載均衡、命名服務、分佈式協調/通知、集羣管理、分佈式鎖、分佈式隊列等功能。
· Zookeeper基於優良的設計,成爲了分佈式環境下最重要的分佈式協調工具之一。

3、Zookeeper的特點
· Zookeeper工作在集羣中,對集羣提供分佈式協調服務,它提供的分佈式協調服務具有如下的特點:
(1)順序一致性
· 從同一個客戶端發起的事務請求,最終將會嚴格按照其發起順序被應用到zookeeper中。
· 可以簡單理解爲:事務按照順序發生。
(2)原子性
· 所有事物請求的處理結果在整個集羣中所有機器上的應用情況是一致的,即,要麼整個集羣中所有機器都成功應用了某一事務,要麼都沒有應用,不會出現集羣中部分服務器接收了事務,另外一部分服務器拒絕事務的情況。
· 可以簡單理解爲:要麼都變,要麼都不變
(3)單一視圖
·  無論客戶端連接的是哪個zookeeper服務器,其看到的服務端數據模型都是一致的。
· 簡單理解爲:找誰都一樣
(4)可靠性
· 一旦服務端成功的應用了一個事務,並完成對客戶端的響應,那麼該事務所引起的服務端狀態變更將會一直保留下來,除非有另一個事務又對其進行了改變。
· 可以簡單理解爲:說話算數
(5)實時性
· zookeeper並不能做到真正的實時性,當zookeeper告訴客戶端操作成功時,可以確信數據最終必然是一致,但是zookeeper集羣仍需要一定的時間同步數據達成最終一致的效果,所以zookeeper只能保證數據的順序一致和最終一致,做不到實時的一致,只有僞實時的特性。
· 可以簡單理解爲:說成了就是成了,但是需要點時間完成同步。

4、zookeeper原理
(1)不能一臺機器
· zookeeper爲了保證可靠性,不能用一臺機器,而應該是一個集羣,避免單節點故障。
(2)有唯一的leader
· 爲了保證zookeeper集羣數據能夠一致,必須有一個老大,這就是leader,其他的是follower。某一時刻集羣裏只能有且僅有一個leader。其中,leader可以執行增刪改和查詢操作,而follower只能進行查詢操作。所有的更新操作都會被轉交給leader來處理,leader批准的任務,再發送給follower去執行來保證和leader的一致性。
· 由於網絡是不穩定的,爲了保證執行順序的一致,所有的任務都會被賦予一個唯一的順序的編號,一定是按照這個編號來執行任務,保證任務順序的一致性。
(3)機制
· leader什麼情況下可以認爲一個客戶端的請求處理成功?
·   只要集羣中過半數量的zookeeper通過請求,leader就認爲一個請求通過,通知所有同意和不同意的follower更新數據,最終集羣中的所有數據更新成功。避免全部同意造成的單節點故障,也避免leader少數同意違反數據的可靠性。
·  因爲採用過半同意機制,所以最極端的情況下集羣中有過半的機器直到最新提案,而如果過半的機器掛掉,則剩下的機器可能不知道最新提案,則無法保證新選出的leader知道最新提案,所以zookeeper集羣採用過半存活機制,否則停止服務。
注意:
提交提案時,只要過半的機器同意就可以提交一個提案,但是隻要過半的機器宕機,集羣停止服務。

從而可以推導出:
· zookeeper的集羣中的機器數量最好應該是奇數個,因爲需要過半存活集羣才能工作,所以偶數個機器提供的集羣可靠性其實和偶數-1個機器提供的集羣可靠性是一樣的。

5、leader選舉機制:
` 最開始集羣啓動時,會選擇最先達到過半條件的機器作爲leader。
` 當leader掛掉後,follower開始進入選舉階段,互相發送自己持有的數據的最高編號,進行投票,投票給最高版本的持有者,任何一個follower只要收到超過一般的額票就會自動成爲新的leader,由於每個follower都只有一票,所以最多隻有一個follower會通過過半投票選出具有最高任務編號(最新提案)的機器成爲新的leader。

6、Zookeeper的過半機制總結:
(1)過半選舉:只有當一臺服務器滿足超過一半的服務器的時候才能選舉爲leader。
(2)過半存活:當集羣中有一半的服務器宕機,那麼整個集羣會停止向外提供服務。
(3)過半服務:在Zookeeper集羣中,任何一個請求都需要超過半數的節點同意才能執行.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章