ZooKeeper简介和概念知识
1. 簡介
ZooKeeper是一種分布式協(xié)調(diào)服務(wù),用于管理大型主機(jī)。在分布式環(huán)境中協(xié)調(diào)和管理服務(wù)是一個(gè)復(fù)雜的過程。
ZooKeeper通過其簡單的架構(gòu)和API解決了這個(gè)問題。ZooKeeper允許開發(fā)人員專注于核心應(yīng)用程序邏輯,而不必?fù)?dān)心應(yīng)用程序的分布式特性。
ZooKeeper框架最初是在“Yahoo!"上構(gòu)建的,用于以簡單而穩(wěn)健的方式訪問他們的應(yīng)用程序。 后來,Apache ZooKeeper成為Hadoop,HBase和其他分布式框架使用的有組織服務(wù)的標(biāo)準(zhǔn)。 例如,Apache HBase使用ZooKeeper跟蹤分布式數(shù)據(jù)的狀態(tài)。
?
?
2. 概念知識(shí)
層次命名空間
下圖描述了用于內(nèi)存表示的ZooKeeper文件系統(tǒng)的樹結(jié)構(gòu)(ZooKeeper的數(shù)據(jù)保存形式)。ZooKeeper節(jié)點(diǎn)稱為?znode?。每個(gè)znode由一個(gè)名稱標(biāo)識(shí),并用路徑(/)序列分隔。
每個(gè)znode最多可存儲(chǔ)1MB的數(shù)據(jù)。
?
Znode的類型
Znode被分為持久(persistent)節(jié)點(diǎn),順序(sequential)節(jié)點(diǎn)和臨時(shí)(ephemeral)節(jié)點(diǎn)。
- 持久節(jié)點(diǎn)?- 即使在創(chuàng)建該特定znode的客戶端斷開連接后,持久節(jié)點(diǎn)仍然存在。默認(rèn)情況下,除非另有說明,否則所有znode都是持久的。
- 臨時(shí)節(jié)點(diǎn)?- 客戶端活躍時(shí),臨時(shí)節(jié)點(diǎn)就是有效的。當(dāng)客戶端與ZooKeeper集合斷開連接時(shí),臨時(shí)節(jié)點(diǎn)會(huì)自動(dòng)刪除。因此,只有臨時(shí)節(jié)點(diǎn)不允許有子節(jié)點(diǎn)。如果臨時(shí)節(jié)點(diǎn)被刪除,則下一個(gè)合適的節(jié)點(diǎn)將填充其位置。臨時(shí)節(jié)點(diǎn)在leader選舉中起著重要作用。
- 順序節(jié)點(diǎn)?- 順序節(jié)點(diǎn)可以是持久的或臨時(shí)的。當(dāng)一個(gè)新的znode被創(chuàng)建為一個(gè)順序節(jié)點(diǎn)時(shí),ZooKeeper通過將10位的序列號(hào)附加到原始名稱來設(shè)置znode的路徑。例如,如果將具有路徑?/myapp?的znode創(chuàng)建為順序節(jié)點(diǎn),則ZooKeeper會(huì)將路徑更改為?/myapp0000000001?,并將下一個(gè)序列號(hào)設(shè)置為0000000002。如果兩個(gè)順序節(jié)點(diǎn)是同時(shí)創(chuàng)建的,那么ZooKeeper不會(huì)對(duì)每個(gè)znode使用相同的數(shù)字。順序節(jié)點(diǎn)在鎖定和同步中起重要作用。
Watches(監(jiān)視)
監(jiān)視是一種簡單的機(jī)制,使客戶端收到關(guān)于ZooKeeper集合中的更改的通知。客戶端可以在讀取特定znode時(shí)設(shè)置Watches。Watches會(huì)向注冊(cè)的客戶端發(fā)送任何znode(客戶端注冊(cè)表)更改的通知。
Znode更改是與znode相關(guān)的數(shù)據(jù)的修改或znode的子項(xiàng)中的更改。只觸發(fā)一次watches。如果客戶端想要再次通知,則必須通過另一個(gè)讀取操作來完成。當(dāng)連接會(huì)話過期時(shí),客戶端將與服務(wù)器斷開連接,相關(guān)的watches也將被刪除。
總結(jié)
以上是生活随笔為你收集整理的ZooKeeper简介和概念知识的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python的WeRoBot框架开发公众
- 下一篇: Kazoo安装和使用