如何實現(xiàn)zookeepr分析

本篇文章為大家展示了如何實現(xiàn)zookeepr分析,內(nèi)容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。

創(chuàng)新互聯(lián)長期為近1000家客戶提供的網(wǎng)站建設(shè)服務(wù),團隊從業(yè)經(jīng)驗10年,關(guān)注不同地域、不同群體,并針對不同對象提供差異化的產(chǎn)品和服務(wù);打造開放共贏平臺,與合作伙伴共同營造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為延慶企業(yè)提供專業(yè)的成都網(wǎng)站制作、網(wǎng)站建設(shè),延慶網(wǎng)站改版等技術(shù)服務(wù)。擁有10年豐富建站經(jīng)驗和眾多成功案例,為您定制開發(fā)。

zk 一個分布式應(yīng)用協(xié)調(diào)服務(wù)

zk是一個分布式,開源的,分布式協(xié)調(diào)服務(wù),他提供了一組簡單的原生接口,分布式應(yīng)用可以基于它實現(xiàn),高水準的同步,集群,配置管理和命名服務(wù)。它基于開發(fā),使用簡單的原則而設(shè)計。使用類似于文件系統(tǒng)目錄樹結(jié)構(gòu)的數(shù)據(jù)模型。它基于java實現(xiàn),可以為c和java應(yīng)用服務(wù)。

協(xié)調(diào)是個臭名昭著的活兒。很容易產(chǎn)生資源競爭和死鎖的問題。zk的實現(xiàn)動機就是緩解分布式應(yīng)用在解決彼此斜體問題而產(chǎn)生的抓狂行為。

zk的設(shè)計目標

zk 是個簡單的玩意兒。zk通過分布式的處理流程來協(xié)調(diào)應(yīng)用彼此,它是使用的是一種類似文件系統(tǒng)的分層名字空間。這些名字空間里,包含了數(shù)據(jù)的注冊者,用zk的叫法,稱之為znodes.它類似于文件和目錄。不像傳統(tǒng)的文件系統(tǒng),是用來存儲的,zk的數(shù)據(jù)都在內(nèi)存中,所以意味著,zk的高吞吐量和底延時。zk 實現(xiàn)了一個優(yōu)質(zhì)的,高新能,高可用,嚴格訪問順序的服務(wù)。從zk的表現(xiàn)來看,它完全可以使用,大型,分布式系統(tǒng)。在可用上,也使它不會碰到單點故障的問題,嚴格的順序性,也意味著可以在客戶單實現(xiàn)非常復(fù)雜的同步操作。

zk 是可復(fù)制的。像它協(xié)調(diào)的應(yīng)用一樣,zk自身也復(fù)制到一系列主機上。他們是一個整體。如圖 zk server

如何實現(xiàn)zookeepr分析

所有組成zk server的 severs 必須彼此能感知對方。他們在內(nèi)存里維護一個所有機器的狀態(tài)圖,在磁盤里保存有實務(wù)日志和快照。只要大多數(shù)服務(wù)器可用。zk服務(wù)就可用。

客戶端連接到單一的服務(wù)器,通過tcp協(xié)議,發(fā)送請求,獲得反饋,獲得監(jiān)聽事件,發(fā)送心跳包。如果連接的服務(wù)器掛掉,客戶端會連接其他的服務(wù)機器。

zk 是順序的。zk的每次更新都會用一個數(shù)字做標簽,這個數(shù)字,代表了全部的zk事務(wù)順序,接下來的操作用這個順序來實現(xiàn)高水平的抽象,比如同步操作。

zk 是快速的。zk 在讀為主的操作中,顯得特別的快。zk 運行在上千臺機器上,當讀操作為主的請求中,表現(xiàn)會更好。讀寫比為10:1。

數(shù)據(jù)模型和命名層次

zk 提供的命名空間像一個標準的文件系統(tǒng)。一個名字,就是它的路徑以(/)分隔的組合,在zk中每個節(jié)點,都已路徑來唯一標識。zk的層次命名結(jié)構(gòu)如圖

如何實現(xiàn)zookeepr分析

Nodes 和短命的nodes

不像傳統(tǒng)的文件系統(tǒng),在zk里每個node和它的孩子node,都有數(shù)據(jù)和他們關(guān)聯(lián)。他們像個這樣一個文件系統(tǒng),即每個文件也是目錄。(zk節(jié)點里存儲的數(shù)據(jù),包括狀態(tài)信息,配置,本地信息等,所以數(shù)據(jù)量都不大通常只有幾字節(jié)或者幾千字節(jié)),為了說清楚zk node.我們把它稱作znode,znode 維護這一個數(shù)據(jù)結(jié)構(gòu),包括狀態(tài)更改的版本號,acl 更改的信息和時間戳去用和套東西區(qū)驗證和協(xié)調(diào)的更新。如果以個node的數(shù)據(jù)發(fā)生變化,它的版本號也會變化。比如一個客戶端讀取一個node數(shù)據(jù),也會得到它的版本號。存儲在node里的數(shù)據(jù)讀寫都是原子的。讀會讀所有關(guān)聯(lián)的數(shù)據(jù),寫也會替換所有的數(shù)據(jù),不會半途而廢。每個節(jié)點都有個訪問控制列表(acl),嚴格限制誰能干什么!

zk里還有個短命node的概念。這些node和創(chuàng)建這個節(jié)點的session生命一樣長。當這個session關(guān)閉時,這個node也就自動刪除了。短命node在你開發(fā)實現(xiàn) 【tbd】是很重要。

有條件的更新和監(jiān)控

 zk 支持監(jiān)控的概念,客戶端可以對一個節(jié)點進行監(jiān)控,當這個節(jié)點發(fā)生變化時,監(jiān)控被觸發(fā)同時被刪除,當監(jiān)控被觸發(fā),客戶端收到一個數(shù)據(jù)更改的數(shù)據(jù)包。還有當客戶端和服務(wù)端連接斷開,客戶端也會收到一個通知。這個在【tbd】中很有用。

保證

zk 簡單快速,就像他的開始的目標一樣,是構(gòu)造復(fù)雜系統(tǒng)的基礎(chǔ),比如,同步系統(tǒng)。實際上它有一下保證:

時序一致性:更新操作會以客戶端發(fā)送的順序被執(zhí)行。

原子性:更新要么失敗,要么成功沒有部分成功的狀態(tài)。

狀態(tài)圖統(tǒng)一:一個客戶端無論它連接到哪個機器,所有機器圖譜一致。

可靠性:一個更新被應(yīng)用,就會一直有效,直到有新的數(shù)據(jù)覆蓋。

時間線:客戶端某個時間段內(nèi)看到的系統(tǒng)狀態(tài)圖,保證是最新的。

更多這些方面的應(yīng)用,可以參看【tbd】

簡單的api

zk設(shè)計之初就是提供簡單的程序接口,所以,它僅僅支持一下操作:

create :在節(jié)點樹上,創(chuàng)建一個節(jié)點

delete:刪除一個節(jié)點

exists:檢查一個節(jié)點是否存在

get data:從一個節(jié)點獲取數(shù)據(jù)

set data:向一個節(jié)點寫數(shù)據(jù)

get children:獲取一個節(jié)點的孩子節(jié)點

sync:等待數(shù)據(jù)傳播同步

關(guān)于這方面的更深的技術(shù)討論,和在構(gòu)建高水平應(yīng)用方面的實踐,可以參考【tbd】

技術(shù)實現(xiàn)

下面是zk 服務(wù)組件圖,處理請求處理器外,每個zk組件都有復(fù)制的多份。

如何實現(xiàn)zookeepr分析

每個機器上的內(nèi)存數(shù)據(jù)庫,都包含整個數(shù)據(jù),更新日志記錄到磁盤,寫操作被序列化到磁盤在它擴散同步到其他內(nèi)存數(shù)據(jù)庫之前。

每個zk 主機都對外提供服務(wù),客戶端連接某一個主機請求服務(wù)。讀的服務(wù)從客戶連接的機器本身內(nèi)存里獲取,寫服務(wù)和改變服務(wù)狀態(tài)的請求通過一個一致的協(xié)議處理。

這個一致的協(xié)議要求,所有寫請求都統(tǒng)一發(fā)送到一個叫l(wèi)eader的主機。剩下的被稱作followers的zk主機,通過leader 接收數(shù)據(jù)消息,消息層負責(zé)leaders的失敗替換和leaders和followers之間的同步。

zk使用的是原子性的消息協(xié)議,因為消息是原子性的,所以能保證本地的信息與其他主機信息是一致沒有分歧的。當leader收到一個寫請求后,它會評估服務(wù)器狀態(tài),決定什么時候?qū)?,然后啟動寫事?wù),最后獲取服務(wù)請的新狀態(tài)。

應(yīng)用

zk的使用接口尤其的簡單,你可以通過他實現(xiàn),順序操作,比如同步,群組管理等,許多分布式應(yīng)有使用它,想了解更多,關(guān)注【tbd】。

表現(xiàn)

zk被設(shè)計成高可用,是不是這樣呢?在yahoo的開發(fā)組的調(diào)查說明了它是的。當讀遠大于寫操作的時候,它表現(xiàn)的尤其的高性能,因為寫操作要同步所有的服務(wù)器狀態(tài)。(讀遠大于寫是經(jīng)典的協(xié)調(diào)服務(wù)案例),下圖是zk讀寫比率變化的測試結(jié)果圖表

如何實現(xiàn)zookeepr分析

這個圖表的測試數(shù)據(jù)是,3.2版本的zk 運行在雙核2Ghz Xeon處理器和兩個15k轉(zhuǎn)速的sata設(shè)備上的測試數(shù)據(jù),一個磁盤專門做zk日志,一個寫寫數(shù)據(jù)快照,讀寫操作都是1k大小,servers 表示zk服務(wù),組成主機數(shù)目,接近30個其他主機模擬客戶機,zk服務(wù)被配置成,leader不允許從客戶端連接。另外說明下,3.2讀寫性能是3.1版本的兩倍。

測試結(jié)果也說明了zk的可靠性,下圖顯示了在各種錯誤下服務(wù)器的表現(xiàn),這些錯誤包含以下幾種:

1,follower 機器的當?shù)艉突謴?fù)。

2,另外一個follower的當?shù)艉突謴?fù)。

3,leader的當?shù)簟?/p>

4,兩個follower同時當?shù)簟?/p>

5,另外一個leader的當?shù)簟?/p>

可用性

這個圖里顯示了,我們有7個主機組成的zk服務(wù)器,在一段時間內(nèi)我們注入錯誤的系統(tǒng)表現(xiàn)。這次測試我們和以前跑同樣的訪問飽和度,有一點們把寫的比率維持在30%,這也是我們比較保守負載比例。

如何實現(xiàn)zookeepr分析

從張圖里,可以看出一下重要的幾點,當followers 掛掉并很快恢復(fù)是,zk能保持很高的吞吐量。更重要是,leader選舉算法能讓系統(tǒng)很快恢復(fù),以保持它的高吞吐量??梢钥吹絲k花了不到200ms選舉新的leader.第三點,當follower恢復(fù)處理能力是,zk的吞吐量又開始維持在高水平。


zookeepr 項目

zk 已經(jīng)成功的在多個工業(yè)系統(tǒng)中應(yīng)用。比如在yahoo.它負責(zé)協(xié)調(diào)yahoo的失敗恢復(fù)。上千個主題訂閱高擴展的信使服務(wù),和數(shù)據(jù)傳輸。yahoo的獲取服務(wù),crawler,也負責(zé)它的失敗恢復(fù)協(xié)調(diào)。作為yahoo的一員,廣告也是通過zk實現(xiàn)高可用性。

上述內(nèi)容就是如何實現(xiàn)zookeepr分析,你們學(xué)到知識或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識儲備,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。

分享文章:如何實現(xiàn)zookeepr分析
網(wǎng)站URL:http://muchs.cn/article36/ghscpg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供虛擬主機、靜態(tài)網(wǎng)站、面包屑導(dǎo)航、全網(wǎng)營銷推廣網(wǎng)頁設(shè)計公司、

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

綿陽服務(wù)器托管