zookeeper Curator zkClient 客戶端對比
瘋狂創客圈 Java 分布式聊天室【 億級流量】實戰系列之 -23【 博客園 總入口 】
@
寫在前面
大家好,我是作者尼恩。目前和幾個小伙伴一起,組織了一個高並發的實戰社群【瘋狂創客圈】。正在開始高並發、億級流程的 IM 聊天程序 學習和實戰
前面,已經完成一個高性能的 Java 聊天程序的四件大事:
接下來,需要進入到分布式開發的環節了。 分布式的中間件,瘋狂創客圈的小伙伴們,一致的選擇了zookeeper,不僅僅是由於其在大數據領域,太有名了。更重要的是,很多的著名框架,都使用了zk。
本篇介紹和對比zookeeper的兩個客戶端。
1.1. zookeeper應用開發
Zookeeper應用開發,需要使用Zookeeper的java 客戶端API ,去連接和操作Zookeeper 集群。
可以供選擇的java 客戶端API 有:Zookeeper 官方的 java客戶端API,第三方的java客戶端API。
Zookeeper官方的 客戶端API提供了基本的操作,比如,創建會話、創建節點、讀取節點、更新數據、刪除節點和檢查節點是否存在等。但對於開發人員來說,Zookeeper提供的基本操縱還是有一些不足之處。
Zookeeper API不足之處如下:
(1)Zookeeper的Watcher是一次性的,每次觸發之后都需要重新進行注冊;
(2)Session超時之后沒有實現重連機制;
(3)異常處理繁瑣,Zookeeper提供了很多異常,對於開發人員來說可能根本不知道該如何處理這些異常信息;
(4)只提供了簡單的byte[]數組的接口,沒有提供針對對象級別的序列化;
(5)創建節點時如果節點存在拋出異常,需要自行檢查節點是否存在;
(6)刪除節點無法實現級聯刪除;
第三方開源客戶端主要有zkClient和Curator。
1.1.1. ZkClient簡介
ZkClient是一個開源客戶端,在Zookeeper原生API接口的基礎上進行了包裝,更便於開發人員使用。zkClient客戶端,在一些著名的互聯網開源項目中,得到了應用,比如:阿里的分布式dubbo框架,對它進行了集成使用。
zkClient解決了Zookeeper原生API接口的很多問題。比如,zkClient提供了更加簡潔的api,實現了session會話超時重連、Watcher反復注冊等問題。雖然ZkClient對原生API進行了封裝,但也有它自身的不足之處。
具體如下:
(1)zkClient社區不活躍,文檔不夠完善,幾乎沒有參考文檔;
(2)異常處理簡化(拋出RuntimeException);
(3)重試機制比較難用;
(4)沒有提供各種使用場景的參考實現;
1.1.2. Curator簡介
Curator是Netflix公司開源的一套Zookeeper客戶端框架,和ZkClient一樣,解決了非常底層的細節開發工作,包括連接重連、反復注冊Watcher和NodeExistsException異常等。Curator是Apache基金會的頂級項目之一,Curator具有更加完善的文檔,另外還提供了一套易用性和可讀性更強的Fluent風格的客戶端API框架。
不止上面這些,Curator中還提供了Zookeeper各種應用場景(Recipe,如共享鎖服務、Master選舉機制和分布式計算器等)的抽象封裝。
另外,Curator供了一套非常優雅的鏈式調用api,對比ZkClient客戶端 Api的使用,發現 Curator的api 優雅太多。
使用ZkClient客戶端,創建節點的代碼為:
```
ZkClient client = new ZkClient("192.168.1.105:2181",
10000, 10000, new SerializableSerializer());
System.out.println("conneted ok!");
String zkPath = "/test/node-1";
Stat stat = new Stat();
User u = client.readData(zkPath, stat);
```
使用Curator客戶端,創建節點的代碼如下:
```
CuratorFramework client = CuratorFrameworkFactory.newClient(
connectionString, retryPolicy);
String zkPath = "/test/node-1";
client.create().withMode(mode).forPath(zkPath);
```
總之,由於Curator客戶端確實非常優秀,Patrixck Hunt(Zookeeper)以一句“Guava is to Java that Curator to Zookeeper”,對Curator給予了高度評價。
因此,對於Zookeeper的客戶端,我們這里只學習和研究Curator的使用。而且,在實際的開發場景中,使用Curator客戶端,就足可以應付日常的Zookeeper集群操作需求。
瘋狂創客圈社群的億級流量IM實戰項目,也使用Curator客戶端來操作Zookeeper集群。
寫在最后
下一篇:開啟zk的客戶端開發。
瘋狂創客圈 億級流量 高並發IM 實戰 系列
- Java (Netty) 聊天程序【 億級流量】實戰 開源項目實戰
- Netty 源碼、原理、JAVA NIO 原理
- Java 面試題 一網打盡
- 瘋狂創客圈 【 博客園 總入口 】