您好,登錄后才能下訂單哦!
1.zookeeper介紹
(1)zookeeper簡介:
Zookeeper是一個分布式的,開放源代碼的分布式應用程序協調服務,是Google的chubby一個開源的實現。
它提供了簡單原始的功能,分布式應用可以基于它實現更高的服務,比如分布式同步,配置管理,集群管理,
命名管理,隊列管理。它被設計為易與編程,使用文件系統目錄樹作為數據模型。服務端跑在 java 上,提供 java 和 C 的客戶端 API。
zookeeper是集群的管理者,監視著集群中各個節點的狀態,根據節點提供的反饋進行一步合理操作。最終,將簡單易用的接口
和功能穩定,性能高效的系統提供給用戶。
官網地址:
http://ZooKeeper.apache.org/
官網快速開始地址:
http://ZooKeeper.apache.org/doc/trunk/ZooKeeperStarted.html
官網 API 地址:
http://ZooKeeper.apache.org/doc/r3.4.10/api/index.html
2.zookeeper的相關功能
(1)文件系統:
ZooKeeper 的命名空間就是 ZooKeeper 應用的文件系統,它和 linux 的文件系統很像,也是樹狀,這樣就可以確定每個路徑都是唯一的,
對于命名空間的操作必須都是絕對路徑操作。與Linux文件系統不同的是,Linux文件系統 有目錄和文件的區別,而ZooKeeper統一叫znode,
一個znode節點可以包含子znode,同時也可以包含數據。
znode 即是文件夾又是文件的概念,所以在 ZooKeeper 這里面就不叫文件文 件也不叫文件夾,叫znode,每個znode有唯一的路徑標識,
既能存儲數據,也能創建子znode。但是znode只適合存儲非常小的數據,不能超過1M,最好都小于1K。
zookeeper的文件系統的特點:
zk的文件系統和Linux的文件系統目錄結構一樣,從”“/開始
zk的訪問路徑只有絕對路徑,沒有相對路徑。
zk中沒有文件和目錄的概念,只有znode節點,Znode既有文件的功能,又有目錄的功能
(2)znode介紹:
znode在類型上分為兩種:短暫的(斷開時刪除)、持久的(斷開時保留)。但是znode有4形式的節點表現:
persistent | 持久化znode節點,一旦創建這個znode點存儲的數據不會主動消失,除非客戶端主動delete |
Persistent_sequential | 自動增加順序編號的znode節點,比如ClientA 去 zk service 上建 立一個 znode 名字叫做/zk/conf,指定了 這種類型的節點后 zk 會 創 建 /zk/conf0000000000 , ClientB 再 去 創 建 就 是 創 建 /zk/conf0000000001, ClientC 是創建/zk/conf0000000002,以后任 意 Client 來創建這個 znode 都會得到一個比當前 zk 命名空間最 大 znode 編號+1 的 znode,也就說任意一個 Client 去創建 znode 都是保證得到的 znode 是遞增的,而且是 唯一的。(原子性原則) |
Ephemral | 臨時znode節點,client連接到zkservice的時候會建立一個session,之后用這個zk連接實例創建該類型的znode ,一旦client關閉了zk的連接,服務器就會清除 session,然后這個 session 建立的 znode 節點都會從命名空間 消失。 |
Ephemral_ sequential | 臨時自動編號設置,znode節點編號會自動增加,但是會隨著session消失而消失。 |
zookeeper的znode的相關特點:
創建znode時設置順序標識,znode名稱后會附加一個值,順序號是一個單調遞增的計數器,由父節點維護。(無論創建的是否是有編號節點,都為順序遞增)
EPHEMERAL 類型的節點不能有子節點
zk的znode的分類:臨時節點(EPHEMERAL)、永久節點(persistent)、有編號節點(Persistent_sequential)、臨時有編號(Ephemral_ sequential)
對于zk來說,它的znode中儲存的數據不能超過1M,最好不要超過1KB,如果數據量比較大,很難保證數據的一致性
對于zk來說,有幾個節點數據就會存儲幾份
3.zookeeper的監聽機制
(1)監聽機制介紹:
客戶端注冊監聽它關心的目錄節點,當目錄節點發生變化(數據改變、節點刪除、子目錄節 點增加刪除)時,zookeeper會通知客戶端。
監聽機制保證zookeeper保存的任何的數據的任何改變都能快速的相應到監聽了該節點的應用程序。監聽器的工作機制,其實是在客戶端會專門
創建一個監聽線程,在本機的一個端口上等待zk集群發送過來的事件。
(2)監聽的觸發
Znode的創建----nodeCreated
Znode 被刪除---nodeDelete
Znode的數據變化---nodedatachanged
Znode的子節點的變化----nodeChildrenchange
注意:監聽只生效一次。(可以使用循環監聽取,去實現一直監聽)。
(3)監聽機制的工作原理
解釋: ZooKeeper 的 Watcher 機制主要包括:客戶端線程、客戶端 WatcherManager、Zookeeper 服務 器三部分。客戶端在向zookeeper服務器
注冊的同時,會將Watcher對象存儲在客戶端的WatcherManager當中。當zookeeper服務器觸發watcher事件后,會向客戶端發送通知,
客戶端線程從 WatcherManager 中取出對應的 Watcher 對象來執行回調邏輯。
(4)監聽的設置:
相應的觸發:
ls--觸發---create 、delete(子節點)
get--觸發—set
exists--觸發--- create 、delete(當前節點)
4. Zookeeper的特點
最終一致性:client不論連接哪個server,展示給他的都是同一個視圖,這是zookeeper最重要特定。
可靠性:具有簡單、健壯、良好的性能,如果消息M被一臺服務器接收,那么它將被 所有的服務器接受。
實時性:ZooKeeper 保證客戶端將在一個時間間隔范圍內獲得服務器的更新信息,或者 服務器失效的信息。但由于網絡延時等原因,
ZooKeeper 不能保證兩個客戶端能同時得 到剛更新的數據,如果需要最新數據,應該在讀數據之前調用 sync()接口。
等待無關:慢的或者失效的 client 不得干預快速的 client 的請求,使得每個 client 都能有效的等待。
原子性:更新只能成功或者失敗,沒有中間狀態。
順序性:包括全局有序和偏序兩種:全局有序是指如果在一臺服務器上消息 a 在消息 b 前發布,則在所有 Server 上消息 a 都將在消息 b 前被發布;
偏序是指如果一個消息 b 在 消息 a 后被同一個發送者發布,a 必將排在 b 前面。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。