《zetcd:讓應(yīng)用解除對(duì)ZooKeeper的依賴》要點(diǎn):
本文介紹了zetcd:讓應(yīng)用解除對(duì)ZooKeeper的依賴,希望對(duì)您有用。如果有疑問(wèn),可以聯(lián)系我們。
首先,獲得etcd和zetcd源碼,并編譯成二進(jìn)制代碼:
go?get?github.com/coreos/etcd/cmd/etcd? go?get?github.com/coreos/zetcd/cmd/zetcd
其次,運(yùn)行etcd,將zetcd連接到etcd客戶服務(wù)端:
#etcd?uses?localhost:2379?by?default? etcd?&? zetcd?-zkaddr?localhost:2181?-endpoints?localhost:2379?&
通過(guò)增加訂閱和創(chuàng)建一個(gè)key來(lái)試用zetd:
go?install?github.com/coreos/zetcd/cmd/zkctl? zkctl?watch?/?&? zkctl?create?/abc?"foo"
從概念上講,上述例子即完成在一個(gè)單個(gè)的etcd實(shí)例上增加一層zetcd.etcd這層到底是做什么的呢?
ZooKeeper以目錄方式列出key(getChildren),而etcd則是通過(guò)間隔(Range)方式.下圖講解了zetcd如何對(duì)etcd下的key進(jìn)行編碼從而有效地支持以目錄形式列出.所有在etcd中的zetcd key都有一個(gè)包括全目錄名的前綴(例如:”/”和“/abc”分別代表深度為0 和1).要列出一個(gè)目錄時(shí),zetcd發(fā)出一個(gè)帶前綴的range請(qǐng)求(例如[“/zk/key/002/abc/”, “/zk/key/002/abc0”)來(lái)列出滿足目錄深度和路徑的所有/abc/下的key.深度限制只針對(duì)目錄本身;如果zetcd只使用路徑而不使用深度,那么etcd將返回這個(gè)目錄下的所有key,zetcd則會(huì)丟棄該結(jié)果,反之則只返回本目錄下的key.
此外,zetcd可以和一臺(tái)授權(quán)的ZooKeeper服務(wù)器做動(dòng)態(tài)校驗(yàn).為了做比較,zetcd可以同時(shí)連到etcd和外部ZooKeeper服務(wù)器.當(dāng)客戶端發(fā)起請(qǐng)求給該模式下的zetcd時(shí),請(qǐng)求會(huì)被同時(shí)轉(zhuǎn)發(fā)到zetcd和ZooKeeper服務(wù)端.如果兩個(gè)服務(wù)器響應(yīng)的數(shù)據(jù)不一致,zetcd會(huì)給此響應(yīng)標(biāo)識(shí)一個(gè)警告.
跟etcd性能工具的接口及報(bào)告形式類似,zetcd命令行工具zkboom可以用來(lái)判斷一個(gè)zetcd的性能基準(zhǔn)是否滿足要求.其它ZooKeeper性能工具應(yīng)該也可以用在zetcd;zkboom為用戶提供了便利,我們不妨試試用它來(lái)做下創(chuàng)建key的測(cè)試:
go?get?github.com/coreos/zetcd/cmd/zkboom? zkboom?--conns=50?--total=10000?--endpoints=localhost:2181?create
下圖揭示了zetcd客戶端并發(fā)數(shù)與創(chuàng)建key的平均延遲之間的關(guān)系.由于etcd在延遲上比ZooKeeper要有5-35ms的優(yōu)勢(shì),zetcd有足夠余地處理由于額外負(fù)載和網(wǎng)絡(luò)跳轉(zhuǎn)造成的延遲.比起ZooKeeper,zetcd代理始終還是存在20ms左右的差距,但是從處理2500請(qǐng)求的吞吐量數(shù)據(jù)來(lái)看,并沒(méi)有出現(xiàn)隊(duì)列堵塞.一種對(duì)zetcd寫比較慢的解釋是,與讀不一樣,由于數(shù)據(jù)模型上存在差異,所以在每個(gè)ZooKeeper key寫時(shí)需要寫多個(gè)key.
下圖揭示了zetcd客戶端并發(fā)數(shù)與key取值的平均延遲之間的關(guān)系.由于ZooKeeper的取值延遲比etcd要快那么2ms左右,想要zetcd提供數(shù)據(jù)的速度快過(guò)ZooKeeper的話恐怕還得依賴于etcd本身性能的進(jìn)一步提升.然而,盡管zetcd需要從etcd請(qǐng)求額外的key來(lái)模擬Zookeeper znode的元數(shù)據(jù),zetcd的命中延遲在等待etcd key提取數(shù)據(jù)方面只增加了大概1.5ms.zetcd在key的數(shù)據(jù)提取操作方面僅需一次往返,因?yàn)樽x請(qǐng)求會(huì)被打包到一個(gè)etcd事務(wù)中.
zetcd從去年十月開始在開源社區(qū)發(fā)行,最近剛發(fā)布第一個(gè)版本:zetcd v0.0.1.盡管是第一個(gè)beta發(fā)行版,但是已經(jīng)為未來(lái)生產(chǎn)系統(tǒng)提供穩(wěn)定管理和部署.如果跟etcd配合起來(lái)使用,運(yùn)行zetcd的系統(tǒng)將會(huì)一套自驅(qū)動(dòng)的“ZooKeeper”集群,它可以自動(dòng)后臺(tái)升級(jí),備份和TLS管理.如想了解更多,請(qǐng)參閱?https://github.com/coreos/zetcd/.
深入淺出學(xué)習(xí)etcd
etcd為分布式系統(tǒng)提供可靠、高效的配置管理服務(wù),在Docker、Kubernetes、Mesos等平臺(tái)中扮演了越來(lái)越重要的角色.作為2013年開始的項(xiàng)目,它還很年輕,官方文檔中缺乏實(shí)現(xiàn)上全面、系統(tǒng)的介紹,本課程深入淺出地介紹了etcd的實(shí)現(xiàn),并為運(yùn)維和二次開發(fā)提供了系統(tǒng)的指導(dǎo)和建議.
文章來(lái)自微信公眾號(hào):Docker
轉(zhuǎn)載請(qǐng)注明本頁(yè)網(wǎng)址:
http://www.fzlkiss.com/jiaocheng/4073.html