好程式設計師Java教程分享Zookeeper基本原理與運用場景
好程式設計師 Java 教程分享 Zookeeper 基本原理與運用場景一、什麼是 Zookeeper ?
zookeeper 是一個分散式的一致性協調服務。
換句話說,也可以把 zookeeper 看成一個小型的分散式檔案系統。但是和 FastDFS 不同, zookeeper 只適合用來儲存一些小型的資料或者配置資訊。
二、Zookeeper的檔案系統
zookeeper底層是一個樹形結構,進行資料的儲存。
和Linux、Window等系統不同:
Linux和Window中有檔案和資料夾的概念。資料夾下面只能有檔案,檔案下面不能再有資料。資料夾本身不存放資料,檔案本身用來進行資料儲存。
Zookeeper中的節點,沒有資料夾和檔案之分,所有節點都可以進行資料儲存,同時也可以擁有子節點。每個節點稱之為znode
znode的分類:
1)臨時節點-ephemeral :臨時節點由某個客戶端建立,如果該客戶端斷開了和zookeeper伺服器的連結,則該臨時節點就會被自動刪除。注意:臨時節點不能有子節點。
2)永續性節點-persistent:持久化的節點會永久存在於檔案系統中,除非客戶端顯示的刪除該節點。該節點是最常見的節點。
3)臨時順序節點-ephemeral_sequential:和臨時節點擁有相同的特點,唯一的卻別在於該節點名稱會自動維護一個編號。
4)永續性順序節點-persistent_sequential:和永續性節點擁有相同的特點,唯一的卻別在於該節點名稱會自動維護一個編號。
檔案系統的操作命令:
ls 路徑:檢視某個路徑下的子節點情況,zk中只能寫絕對路徑(所有的路徑都必須從/出發)
create [-s] [-e] path data : 建立一個節點,在path路徑的位置。資料為data(資料不能為空,至少要為'')。-s表示順序節點 -e臨時節點
get 路徑:檢視指定路徑對應的節點資料。每個節點都分為:資料部分、描述資訊
set path data:修改指定節點的資料
delete path:刪除指定節點資料,如果下面的有子節點需要先刪除子節點
三、Zookeeper的通知機制(watch)
什麼是通知機制?
客戶端可以選擇對某個znode進行監聽。當這個znode發生變化時(本身的新增、刪除、修改以及子節點的變化),會主動通知監聽了這個znode的客戶端。zookeeper的通知機制有一次性觸發原則,znode發生變化後,一旦通知了客戶端,則斷開客戶端的監聽,如果需要繼續監聽節點的變化,則必須重新發起監聽。
exists - 可以監聽到節點建立、節點的內容修改、節點的刪除
getData - 可以監聽節點內容修改,節點的刪除
getChildren - 可以監聽子節點的新增、刪除(子節點內容變化和子節點的子節點的變化不能監聽)
四、Zookeeper的運用場景
1)配置檔案統一管理
在分散式叢集的工程中,通常由很多服務部署在不同的服務上,每個服務都有自己的配置資訊,如果需要修改某個配置,則可能需要對多型伺服器進行配置的修改,是非常不方便的。那麼就可以使用zookeeper幫助我們進行統一的配置檔案管理。
在zookeeper上建立一個持久化節點,將所有的配置資訊放入到這個節點中,然後每臺伺服器都去監聽這個節點的變化(Watch機制)。如果有新的配置資訊,開發者只需要上傳到zookeeper的這個節點上(更新節點的配置資料)。每個服務就能收到zookeeper節點的更新通知,然後從節點中讀取新的配置,應用到系統中,完成配置的更新。
2)叢集管理
在某些叢集中,可能需要知道其他叢集伺服器的狀態,比如有新的機器加入叢集,或者有老的機器退出叢集等。這個時候就可以透過zookeeper進行叢集的統一管理。
3)分散式鎖
· 保持獨佔
· 控制順序
所有客戶端同時在一個節點的下面建立臨時順序節點。然後只需要讓編號最小的節點的機器獲得鎖就可以了。
五、Zookeeper的叢集
叢集的工作原理:
zookeeper叢集可能有N臺機器,這些機器中一定會存在一個leader,其他的機器就是follower。對於客戶端來說,可以隨意連線任何一個叢集中伺服器。如果某個客戶端需要對zk進行更改的操作,這些操作命令最終需要提交給leader。leader將命令分發給所有的叢集伺服器。當一半以上的叢集伺服器執行該命令成功,則leader就會通知所有節點進行事務提交,達到資料同步更新的目的。
zookeeper叢集的“過半數存活原則”:
在zookeeper叢集中,當存活的機器數量超過總叢集一半的時候,整個叢集才能正常工作。
基於過半數存活原則,zookeeper的叢集數量一定是奇數臺。
為什麼zookeeper需要設計一個過半數存活機制?
因為整個叢集中,有可能因為“腦裂“,導致整個叢集分為2個甚至多個叢集,如果沒有“過半數存活的機制“,那麼整個zookeeper叢集提供的資料將無法再保證資料一致性。所以為了保證整體資料的強一致性,zookeeper規定了過半數存活這個原則。
zookeeper叢集的角色:
leader:領導者
follower:追隨者
observer:觀察者,觀察者和追隨者功能一樣,但是區別在於觀察者不會參與投票環節。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69913892/viewspace-2661172/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 好程式設計師教程分享Java註解和運用註解程式設計程式設計師Java
- 好程式設計師Java教程分享Java之設計模式程式設計師Java設計模式
- 好程式設計師Java教程分享Java面試妙招程式設計師Java面試
- 好程式設計師Java教程分享Java語法程式設計師Java
- 好程式設計師Java教程分享List介面程式設計師Java
- 好程式設計師Java教程分享javaweb框架程式設計師JavaWeb框架
- 好程式設計師Java教程分享Java物件導向與程式導向程式設計師Java物件
- 好程式設計師Java培訓分享Redis快取使用場景概述程式設計師JavaRedis快取
- 好程式設計師Java教程分享Java開發工具程式設計師Java
- 好程式設計師Java教程分享Java之包裝類與常用類程式設計師Java
- 好程式設計師Java教程之ZooKeeper面試題梳理彙總程式設計師Java面試題
- 好程式設計師Java教程分享Java開發主流框架程式設計師Java框架
- 好程式設計師Java教程分享Java 迴圈結構程式設計師Java
- 好程式設計師技術教程分享JavaScript運動框架程式設計師JavaScript框架
- 好程式設計師Java教程分享MyBatis Plus介紹程式設計師JavaMyBatis
- 好程式設計師Java教程分享Jmeter效能測試程式設計師JavaJMeter
- 好程式設計師Java培訓分享Java教程垃圾回收與演算法程式設計師Java演算法
- 好程式設計師Java教程分享幾個流行的Java框架程式設計師Java框架
- 好程式設計師Java教程分享Java中this的幾種用法程式設計師Java
- 好程式設計師Java教程分享Java面試題之Hibernate程式設計師Java面試題
- 好程式設計師Java教程分享:Java工程師常見面試題程式設計師Java工程師面試題
- 好程式設計師Java教程分享XML常見面試題程式設計師JavaXML面試題
- 好程式設計師Java教程分享MySQL目錄結構程式設計師JavaMySql
- 好程式設計師Java教程分享Java實習生面試題集錦程式設計師Java面試題
- 好程式設計師Java教程分享Java的4大核心基礎程式設計師Java
- 好程式設計師Java教程分享如何系統的學習Java程式設計師Java
- 好程式設計師Java教程分享Java難點解析之泛型程式設計師Java泛型
- 好程式設計師Java教程分享Java的五大特點程式設計師Java
- 好程式設計師Java教程分享經典Java main方法面試題程式設計師JavaAI面試題
- 好程式設計師Java培訓分享MySQL算術運算子程式設計師JavaMySql
- 好程式設計師Java培訓分享Java程式設計技巧程式設計師Java
- 好程式設計師Java教程分享Java設計模式的6大原則程式設計師Java設計模式
- 好程式設計師Java教程分享Nginx靜態資源部署程式設計師JavaNginx
- 好程式設計師Java教程分享jsp相關面試題程式設計師JavaJS面試題
- 好程式設計師Java教程分享JavaScript常見面試題五程式設計師JavaScript面試題
- 好程式設計師Java教程分享JavaScript常見面試題四程式設計師JavaScript面試題
- 好程式設計師Java教程分享JavaScript常見面試題三程式設計師JavaScript面試題
- 好程式設計師Java教程分享JavaScript常見面試題二程式設計師JavaScript面試題