zookeeper初探

1.zookeeper是什麼?
  zookeeper是一個分佈式協調服務的開源框架,主要來解決分佈式應用系統中一致性的問題。
2.zookeeper本質:
  它的本質是一個分佈式的小文件存儲系統,它的文件存儲模式類型一個目錄結構構有,通過對目錄結構效的管理,維護和監控數據節點的數據變化,從而達到基於數據的管理集羣。
3.zookeeper的常用場景:
  統一命名服務,分佈式配置管理,分佈式消息隊列,分佈式鎖,分佈式協調。
  統一命名服務舉例:在dubbo中發佈服務時會有一個地址,這個服務地址需要多個系統進行調用,一旦服務地址改變可能會導致其他系統的性能,所以同過zookeeper來存儲該地址,讓後其他系統獲取該地址,並且註冊監聽,從而達到地址發生改變,其他系統得到更新的目的。
  分佈式配置管理:這是一個發佈訂閱的模式,它可以將數據庫一些配置信息放在zookeeper中,其他系統通過訂閱從而獲取配置信息,來訪問所需要的數據。
  分佈式鎖:這個特點個在於它的目錄結構,它創建節點的方式有四種,具體的特點在於臨時節點,持久節點,序列化上,還有就是它的節點一旦創建就是唯一的,其他的系統不再可能創建同樣節點,這樣就導致了唯一鎖的概念,從而達到分佈式事務鎖的要求。
zookeeper特性:
  1.全局數據一致性:每個server都保存了一份相同的副本。
  2.可靠性:如果一臺服務器接受到消息,所有服務都會接受到消息。
  3.順序性:全局有序,偏序:全局有序:當有消息發送過來a,b,a在b前面,則在所有服務器上a都在b前面;偏序:某個客戶發送兩條信息a,b;a在b前面,則a和b在所有服務器上a都在b前面。
  4.數據更新原子性:數據更新的結果只有成功和失敗兩種。
  5.實時性:每隔一段時間客戶端都會獲得服務端的更新或者失效的信息。

記憶組件:

每個zk都會有一個相同的數據副本(全局數據一致性),如果zk上面有一臺機器接受到消息所有的zk都會有消息(可靠性),消息它是有順序性的,消息更新要不成功要不失敗(原子性),zk上面的數據每隔一段時間就同步給客戶端(實時性)。

zookeeper角色:
  leader:事物請求的唯一調度處理者;保證事物處理的順序性,各個從服務器的調度者。
  follower:非事物請求的處理,轉發事務性請求給leader,leader的選舉。
  observer:follower和observer的區別在於,observer不會進行leader的選舉。

zookeeper節點類型:
  臨時節點
  永久節點
  znode還有個序列化情況:臨時節點序列化,永久節點序列化
znode特性:
  znode兼具文件和目錄兩個特點。
  znode具有原子性操作。
  znode存儲具有大小限制,一般以kb爲單位。
  znode通過路徑來引用,路徑必須是確定的而且唯一以/開頭。
節點組成部分:
  stat:狀態信息,描述該節點版本和權限等信息。
  data:與該node關聯的數據。
  children:該znode下的子節點。
節點內容介紹:
  cZxid就表示事務id,表示該節點是在哪個事務中創建的; 
  ctime:表示節點創建的時間;   
  mZxid:最後一次更新時的事務id; 
  mtime:最後一次更新時的時間; 
  pZxid: 表示該節點的子節點列表最後一次被修改的事務的id(爲當前節點添加子節點,從當前節點的子節點中刪除一個或多個子節點都會引起節點的子節點的列表的改變,而修改節點的數據內容則不在此列); 
  cversion = -1,dataVersion = 0,aclVersion = 0在第一篇博客中已經有過介紹,分別表 示子節點列表的版本,數據內容的版本,acl版本; 
  ephemeralOwner:用於臨時節點,表示創建該臨時節點的事務id,如果當前節點是永久節點,這個值是固定的,爲0; 
  datalength表示當前節點存放的數據的長度; 
  numChildren表示當前節點擁有的子節點的個數;
shell基本操作:
  增:create -s -e path data ctl
  -s:序列化,-e:臨時
  create -s /sequences 123
  默認情況下是非序列化,永久節點
  刪:delete path [version]
  改:set path data [version] 
  查:ls path;get path;ls2 path;
節點限制:
  setquota -n|-b val path
  -n:限制子節點個數:包含自己
  -b:限制節點內容長度
  setquota -n 5 /quota
  history:列出所有的歷史命令
  redo:重複執行命令
zookeeper的監聽:
  zookeeper提供了一種發佈訂閱的功能,它的實現方式主要是通過客戶端註冊watcher,當服務端發生改變的時候會通知客戶端,客戶端會做出相關響應。
watcher特點:
  一次性觸發
  事件封裝(路徑,事件類型,通知狀態)
  異步發送
  先註冊後觸發
節點狀態:異步鏈接:(節點發生增刪改操作)
未鏈接,過期,授權失敗
shell客戶端監控設置:get /path watch
zookeeper選舉機制:
全新選舉方式:
狀態:looking,following,leading.,observing
服務id:服務器myid的值
邏輯時鐘:每投票一次都會增加1
數據id:數據的版本
zookeeper全新選舉的時候首先啓動一號服務器:給自己投票,然後查看集羣中其他服務器是否啓動,如果啓動,比較myid的值,大的把票投給它,小的它會把票頭給你,然後判斷該票數是否超過一半,如果超過投票結束,改變狀態leading;
zookeeper在非全新集羣環境投票時;主要有邏輯時鐘,數據id,myid,在投票環境中首先會判斷你的邏輯時鐘是否與當前一致,如果一致則進行投票,如果不一致,投票失效,再進行那個數據id的判斷,再進行myid的判斷。

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