1. 程式人生 > >《ZooKeeper官方文件》Zookeeper操作指南

《ZooKeeper官方文件》Zookeeper操作指南

原文連結   譯者:小村長

About

本專案是 Apache ZooKeeper官方文件的中文翻譯版,致力於為有分散式協同專案需求和對 Apache Zookeeper 感興趣的同學提供有價值的中文資料,希望能夠對大家的工作和學習有所幫助。

Zookeeper對與做大資料的人來說在熟悉不過了,畢竟經常用於分散式協同服務中,比如Hbase,Strom等大資料元件中經常用到,但是大部分人僅僅把它當著一個小小的工具,從而很少發時間去深入瞭解它,今天讓小村長為你揭開Zookeeper的神祕面紗。

這一章節主要讓開發者對ZooKeeper伺服器的所有操作,相對於前面提到的基本概念,它要比ZooKeeper API章節顯得複雜一些,本章節主要包含一下內容 :

1、錯誤資訊處理

java和C語言呼叫的時候可能會報道一個錯誤,java客戶端呼叫的時候會產生一個異常KeeperException,當呼叫程式碼的時候會返回一個表示異常的錯誤程式碼。C語言呼叫時候會返回一個錯誤編碼,這些編碼定義在一個列舉ZOO_ERRORS中,不管是java還是C語言回撥的時候都會返回結果資訊。java開發組可以看javadoc文件,而C語言開發這可以看doxygen文件。通過檢視文件可以瞭解更多的細節,以及每種錯誤編碼所代表的錯誤資訊。

2、ZooKeeper的連線

3、讀寫檢視操作

4、各種各樣的ZooKeeper操作

5、程式的結構和簡單例項

效能和可伸縮性: 常遇到的問題和故障排查

現在你已經瞭解ZooKeeper,它很快而且很簡單,你可以嘗試著把它用於工作。但是當你使用ZooKeeper的時候,你可能會遇到一些陷阱。

1、當你想檢視的時候,你必須尋找連線事件。當一個ZooKeeper的客戶端從ZooKeeper伺服器斷開的時候,你接收不到任何通知直到你從新連線。你正在檢視一個節點是否進入的時候,當你失去連線的時候你將接受不到任何通知當這個節點建立或者刪除。

2、你必須測試ZooKeeper故障,因為當大部分ZooKeeper存活的時候,這個伺服器就不會掛掉。現在的問題是:你能否處理它?在現實中ZooKeeper客戶端連線會中斷(ZooKeeper伺服器故障和網路中斷是主要原因),ZooKeeper客戶端負責維護重新連線並告訴你發生了什麼故障。但是你必須確定已經重新連線並瞭解是什麼原因導致的,查明原因並且進行測試,並不是在生產中進行測試,測試幾個伺服器組成的叢集並在主伺服器上進行測試

3、被客戶端使用的伺服器必須和實際的伺服器相匹配,儘管不是最優的,但是這樣他們都能正常的工作。如果客戶端羅列的是實際伺服器的子集,如果客戶端沒有羅列那麼叢集上面也不會存在

4、瞭解你的事務日誌存放的目錄,ZooKeeper的效能可以通過事務日誌體現出來,ZooKeeper必須同步到各個客戶端才能給你一個相應,一個專門的事務日誌是完整效能的保障,把一個日誌放在一個很繁忙的裝置上能夠影響它的效能,如果你僅僅有一個儲存裝置,你可以把日誌檔案放到網路檔案系統上面並增加一個檔案切割點,雖然它並沒有消除這個問題,但是它延緩問題。

5、正確的設定你的java堆,這個是很重要的對於避開交換區。不必要的磁碟交換也會影響效能,記住,在ZooKeeper裡面每件事都是有序的。如果一個請求觸及磁碟,其他也會這樣做。為了避免資料交換,嘗試著設定你的heapsize的大小通過設定你的實體記憶體,堆大小設定僅僅是執行你的測試,如果這樣設定有困難,估算一下你能設定的合理數字,這個數字就是你機器使用互動區的下限,比如如果一臺4G記憶體的機器,3G的堆設定就開始出現交換現象。

在正式的文件中,這裡有一些其他的資訊對於開發者非常有用:

ZooKeeper 白皮書 [tbd: find url]

Yahoo! Research寫的ZooKeeper 設計和效能討論

API Reference [tbd: find url]

ZooKeeper API參考手冊

Yahoo! Research的Benjamin Reed介紹ZooKeeper的視訊

Flavio Junqueira寫的優秀的Java教程 ,使用ZooKeeper上線簡單的生產消費者佇列和屏障

Todd Hoff的文章 (07/15/2008)

Pseudo-level discussion of the implementation of various synchronization solutions with ZooKeeper: Event Handles, Queues, Locks, and Two-phase Commits.