使用zkclient操作zookeeper的學習過程記錄

前言

最近開發的分佈式(使用motan)項目中使用zookeeper作爲服務中心來提供註冊服務(@MotanService)和發現服務(@MotanRefer),雖然motan這個rpc框架對服務模塊進行了很好的封裝,但是以防以後會出現定製化的需求,以及對服務更好的監控,所以有必要了解一下zookeeper的基本知識和使用方法。關於zookeeper的知識點,網上很多的博客都已經介紹的很詳盡了,我寫這篇的博客的用意其實也就是將一些零散的卻很精妙的博客整理出來,方便以後查閱。短篇以cp的方式,長篇的以url的方式。

zookeeper是什麼?

ZooKeeper是一個分佈式的,開放源碼的分佈式應用程序協調服務,是Google的Chubby一個開源的實現,是Hadoop和Hbase的重要組件。它是一個爲分佈式應用提供一致性服務的軟件,提供的功能包括:配置維護、域名服務、分佈式同步、組服務等。
ZooKeeper的目標就是封裝好複雜易出錯的關鍵服務,將簡單易用的接口和性能高效、功能穩定的系統提供給用戶。
ZooKeeper包含一個簡單的原語集,提供Java和C的接口。 ZooKeeper代碼版本中,提供了分佈式獨享鎖、選舉、隊列的接口。
—-百度百科

一開始看的雲裏霧裏的,幸好我之前搞過一點hadoop,對他的生態體系有所瞭解,這才大概知道他想說什麼。提煉幾個關鍵詞,並且加入我後面學習的理解,總結一下就是–

zookeeper是一個組件,需要安裝客戶端和服務端,一般用於解決分佈式開發下的一些問題。化抽象爲具體,你可以把整個zookeeper理解成一個樹形數據結構,也可以理解爲一個文件系統的結構,每個葉子節點都會攜帶一些信息(data),並且也可能會攜帶一些操作(op)。分佈式場景中,每一個客戶端都可以訪問到這些葉子節點,並且進行一些操作。我們所有使用zookeeper的場景幾乎都是在CRUD某一個或者某些葉子節點,然後會觸發對應的操作…即zookeeper本身可以理解爲一個shareData。
—-來自於博主的口胡

zookeeper怎麼學?

學一個新的中間件的最好方法是先在腦子裏面有一個想法:我爲什麼要學他,是想解決什麼問題,他大概是個什麼東西,我覺得打開思路的最好方式是看幾篇博客(大多數情況你一開始看不懂,但是混個眼熟),然後看視頻,這裏我自己是瞭解過了zookeeper原生的api之後看了極客學院的視頻http://www.jikexueyuan.com/course/zookeeper/,學到一半會需要會員,如果有需要可以q我(250577914)要會員賬號,備註zookeeper。看完後再回頭去刷一刷我下面提到的博客。

zkclient的使用

學完原生api之後一般我們不直接使用,類比redis的客戶端jedis,再到spring提供的redisTemplate;類比jdbc到dbutils,再到orm框架。所以作爲小白,我建議使用這個比較簡單的客戶端zkclient,當後期需求需要一些定製化需求時使用原生的api自己重寫,或者使用更高級一點的其他客戶端。

zkclient我學完之後覺得非常輕量級,設計也很規範,大概可以參考以下的博客。
http://www.cnblogs.com/f1194361820/p/5575206.html(轉載自博客園,作者: 房繼諾)
原作者非常用心,裏面給出了一張zkclient的uml類圖,如下
這裏寫圖片描述
順便也複習一下uml類圖的知識,理解清楚圖中用到的聚合,組合,關聯,泛化,實現的箭頭含義。uml建模沒有學好的同學的移步這個鏈接http://justsee.iteye.com/blog/808799,裏面對應了java講解,還算詳細。
掌握這個客戶端之後,還需要補充一些注意點

  1. create方法:創建節點時,如果節點已經存在,仍然拋出NodeExistException,可是我期望它不在拋出此異常.
  2. retryUtilConnected: 如果向zookeeper請求數據時(create,delete,setData等),此時鏈接不可用,那麼調用者將會被阻塞直到鏈接建立成功;不過我仍然需要一些方法是非阻塞的,如果鏈接不可用,則拋出異常,或者直接返回.
  3. create方法: 創建節點時,如果節點的父節點不存在,我期望同時也要創建父節點,而不是拋出異常.
  4. data監測: 我需要提供一個額外的功能來補充watch的不足,開啓一個線程,間歇性的去zk server獲取指定的path的data,並緩存起來..歸因與watch可能丟失,以及它不能持續的反應znode數據的每一次變化,所以只能手動去同步獲取.

回到開始

這個時候看看你當初爲啥要學習zookeeper,看看能不能解決你當時遇到的問題。
如果你有興趣,可以自己去試試zookeeper前面提到的那些可以實現的功能:分佈式鎖、選舉、隊列等等

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章