zookeeper簡介
ZooKeeper是一個分布式的,開放源碼的分布式應用程序協調服務,它包含一個簡單的原語集,分布式應用程序可以基於它實現同步服務,配置維護和命名服務等。目前zookeeper被應用於hadoop/hbase中進行節點的管理,通過zookeeper你可以很方便的開發出一些分布式控制的工具,比如分布式lock, barrier,countDown , Semaphore等,甚至有人使用zookeeper開發了一個分布式Collections.
zookeeper客戶端
我們構建分布式logserver系統,主要使用zookeeper的目錄服務,zookeeper本身有api可供我們來使用zookeeper的一些特性,但是zookeeper的api接口太生硬了,不方便使用,但這么強大的zookeeper肯定有很多公司在使用,他們一定會發現現有api的問題,肯定會出不少優秀的api,於是我們找到了Curator,Curator是Netflix開源的一套ZooKeeper客戶端框架. Netflix在使用ZooKeeper的過程中發現ZooKeeper自帶的客戶端太底層, 應用方在使用的時候需要自己處理很多事情, 於是在它的基礎上包裝了一下, 提供了一套更好用的客戶端框架。
Curator主要解決了三類問題:
封裝ZooKeeper client與ZooKeeper server之間的連接處理;
提供了一套Fluent風格的操作API;
提供ZooKeeper各種應用場景(recipe, 比如共享鎖服務, 集群領導選舉機制)的抽象封裝.
Curator實現的zookeeper的特性有如下這些:
使用Curator
使用Curator向zookeeper注冊logserver,具體代碼見logserver的ZooKeeperManager類中的init方法:
使用Curator向zookeeper獲取注冊到zookeeper中的logserver信息,具體代碼見logserver項目ZooLogClient類中的init方法:
具體總結下來,就是使用curator向zookeeper注冊logserver,log的客戶端再使用curator獲取注冊的zookeeper信息,當某台logserver當機,zookeeper能通知到log的客戶端,以重新獲取新的logserver服務。