摘要
這是一個(gè)關(guān)于ZooKeeper正在使用的全序廣播協(xié)議(Zab)的簡(jiǎn)短概述。它在概念上很容易理解,也很容易實(shí)現(xiàn),并且提供很高的性能。在這篇文章里,我們會(huì)呈現(xiàn)ZooKeeper在Zab上的需求,也會(huì)展示這個(gè)協(xié)議該如何使用,然后我們總體概述一下這個(gè)協(xié)議是如何工作的。
1. 簡(jiǎn)介
在雅虎(Yahoo!),我們開發(fā)了一款叫做ZooKeeper[9]的高性能高可用的協(xié)作服務(wù),它允許大規(guī)模的應(yīng)用群執(zhí)行協(xié)作任務(wù),比如Leader選舉、狀態(tài)傳播和會(huì)合(rendezvous)。該服務(wù)實(shí)現(xiàn)了一個(gè)層級(jí)的數(shù)據(jù)結(jié)點(diǎn)空間——znodes,客戶端可以用它來實(shí)現(xiàn)自己的協(xié)作任務(wù)。我們已經(jīng)發(fā)現(xiàn)這個(gè)服務(wù)有很強(qiáng)的性能擴(kuò)展性,因此它很容易就滿足雅虎的網(wǎng)絡(luò)規(guī)模,關(guān)鍵任務(wù)的產(chǎn)品需求。ZooKeeper放棄了鎖,通過實(shí)現(xiàn)了無(wú)等待(wait-free)的共享數(shù)據(jù)對(duì)象,并保證在這些對(duì)象上的操作是有序的,以此來代替鎖??蛻舳顺浞掷眠@些保障來實(shí)現(xiàn)自己的協(xié)作任務(wù)。一般而言,一個(gè)引出ZooKeeper的主要原因就是,對(duì)于應(yīng)用來說,保持更新操作的有序性比其他特定的協(xié)作技術(shù)更加重要,比如阻塞。
集成到ZooKeeper里的是一個(gè)全序的廣播協(xié)議:Zab。有序的廣播是實(shí)現(xiàn)我們的客戶端保障的關(guān)鍵,同時(shí)它也需要在每一臺(tái)ZooKeeper服務(wù)器上維護(hù)ZooKeeper的狀態(tài)副本。這些副本通過使用我們的全序廣播協(xié)議來保持一致性,比如使用復(fù)制狀態(tài)機(jī)[13]。這篇文章主要關(guān)注ZooKeeper在該廣播協(xié)議上的需求以及對(duì)它實(shí)現(xiàn)的一個(gè)概述。