亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

分布式利器Zookeeper(一)

發布時間:2020-06-03 07:39:03 來源:網絡 閱讀:5398 作者:zfz_linux_boy 欄目:建站服務器

Zookeeper不論是在實際項目中,還是在各種分布式開源項目中都得到了廣泛應用,從本篇博客開始,將為大家帶來我對Zookeeper的認識。這個系列將會涵蓋Zookeeper的介紹、環境搭建、配置說明、Java操作Zookeeper(原生API方式)、zkclient操作Zookeeper方式、Zookeeper的典型應用場景分析以及Curator框架等。

Hello,Zookeeper

Zookeeper是一個高可用的分布式管理與協調框架,基于ZAB算法(原子消息廣播協議)實現。ZK能夠很好的保證分布式環境下的數據一致性,這一特性使得ZK是處理分布式一致性問題的利器!這個利器有哪些特性呢,看看下面你就了解了。

可靠性:一旦Zookeeper成功的應用了一個事務,并完成對client的響應,那么Zookeeper內部集群的所有服務器的狀態都會是一致的保留下來。

單一視圖:由于上面可靠性的保證,使得無論client連接的是ZK集群中的哪個服務器,所看到的數據都是一致的。

順序一致性:從一個client發起的請求,最終會嚴格的按照發起的順序被應用到Zookeeper中去。【實質上,ZK會對每一個client的每一個請求,進行編號,說白了,就是分配一個全局唯一的遞增編號,這個編號反映了所有事務操作的先后順序。】

實時性:通常意義下的實時性是指一旦事務被成功應用,那么client會立刻從服務器端獲取到變更后的新數據。ZK僅僅能夠保證在一定時間內,client最終一定會能從服務器上獲取到最新的數據。

高可用:在ZK集群內部,會有一個Leader,多個Follower。一旦Leader掛掉,那么ZK會通過Paxos算法選舉出新的Leader,只要ZK集群內部的服務器有一半以上正常工作,那么ZK就能對外正常提供服務!

簡單的數據結構:類似于Linux文件系統的樹形結構,簡單,實用!(樹形層次空間)

高性能:性能有多高呢,舉個栗子,比如我們經常通過創建臨時節點來處理分布式鎖,要知道臨時節點是存儲在內存中的,在讀場景壓力測試下,QPS高達10W+!也就是說ZK在讀場景下,性能非常突出!


初步認識Zookeeper的數據模型

分布式利器Zookeeper(一)


每一個節點被稱為znode,znode可以有子節點目錄,并且每個znode可以存儲數據(特別需要注意的是臨時節點不可以有子節點)

znode如果是臨時節點,意味著創建這個znode的client一旦與ZK集群失去聯系,這個臨時的znode將被自動刪除。(事實上,client與ZK通信是采用長連接方式,并通過心跳的方式保持連接,這種狀態就是session,一旦session失效,就是連接斷開,臨時節點會被刪除掉)

znode是可以被監控的,不論是znode本身的數據變化,還是該znode下的子節點的變化,都可以進行監控,這也是ZK的核心特性。(很多應用場景就是基于這個特性,后續進行詳細介紹)


初步認識Zookeeper的角色組成

分布式利器Zookeeper(一)


這里,我們先了解下ZK Server的身份特性:

Leader:負責客戶端的write類型的請求

Follower:負責客戶端的read類型請求,并可以參與Leader的選舉

watcher:后文介紹。


install Zookeeper

這里以zookeeper-3.4.5版本為例,搭建一個ZK集群(至少要求3個節點,并且各個ZK SERVER之間系統時間保持一致)。使用的機器列表是:192.168.99.121、192.168.99.122、192.168.99.123。

以192.168.99.121為例進行說明:

分布式利器Zookeeper(一)


分布式利器Zookeeper(一)


分布式利器Zookeeper(一)


分布式利器Zookeeper(一)


分布式利器Zookeeper(一)


配置說明:

tickTime:ZK集群與客戶端、ZK集群內部SERVER之間的心跳間隔,默認2S。

initLimit:在客戶端連接ZK集群時,可以忍受多少個心跳次數。上述的配置表明,如果client初始連接ZK集群,在10*2S=20S內ZK集群沒有返回連接成功,即意味著連接失敗。

syncLimit:表示ZK集群內部Leader和Follower之間請求應答可以忍受多少個心跳次數。

dataDir:ZK保存數據以及日志的目錄。

clientPort:ZK集群對外暴露的接口,即client訪問ZK集群的端口(2181)。

server.x = IP:port-a:port-b 

X表示是第幾號服務器,從0開始編號,并和dataDir下的myid文件對應。

port-a表示Leader和Follower進行信息通信的端口(2888)。

port-b表示Follower進行選舉的端口(3888)。


分布式利器Zookeeper(一)


分布式利器Zookeeper(一)


分布式利器Zookeeper(一)



基本的ZK命令

分布式利器Zookeeper(一)


通過zkCli.sh進入客戶端進行操作:

查找ls、創建znode節點create(注意每個節點都是有值的)、獲取get、設置set。

我們觀察下下面幾個屬性:

ctime和cZxid是一對,表示創建ZNODE的時間和事件編號;

mtime和mZxid是一對,表示修改ZNODE數據內容的時間和事件編號;(通過set指令會改變這2個屬性,但是該節點的子節點的變化不會影響該節點)

dataVersion:表示ZNODE數據的版本,注意利用JAVA 原生API進行delete ZNODE時,需要提供version才可以刪除ZNODE。(當然我們可以提供-1來跳過版本檢查機制)

dataLength、numChildren都好理解。

另外,注意rmr指令可以遞歸刪除ZNODE;而delete只可以刪除指定ZNODE。


ZooInspector工具及IntelliJ IDEA與ZK集成

分布式利器Zookeeper(一)


ZooInspector是一個可運行的JAR,運行后直接連接ZK集群中的任何一個SERVER即可。

分布式利器Zookeeper(一)


分布式利器Zookeeper(一)


分布式利器Zookeeper(一)


OK,到這里,一切準備工作就準備就緒了~

咱們下期來看JAVA操作ZK(基于Zookeeper的原生API)、分布式鎖探討、Watch特性等~


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

昌宁县| 宽城| 潞城市| 揭阳市| 菏泽市| 二连浩特市| 文安县| 万山特区| 长春市| 和政县| 建阳市| 镇坪县| 甘德县| 乌拉特前旗| 云安县| 昂仁县| 永靖县| 潼关县| 沙湾县| 台南市| 灵武市| 应用必备| 通化县| 浑源县| 务川| 昌宁县| 汤阴县| 林州市| 长治县| 盐津县| 长垣县| 商都县| 丰镇市| 绵阳市| 榆树市| 剑川县| 缙云县| 桂东县| 玛纳斯县| 寿宁县| 江津市|