zookeeper简单学习总结(三)

        在上面一篇文章主要总结了zookeeper的服务端数据的同步机制算法的了解,这里自己总结下客户端和服务端是如何进行数据交互的。

        我们都知道zookeeper可以用作分布式引用程序管理配置信息,那么我们是如何保证配置信息在zookeeper服务器上面发生变化后客户端怎么去感知?这里就需要说到zookeeper的watch机制了,在代码中我们需要去订阅指定路径下面的数据发生改变时我们应该如何处理,这里的数据变化包括子节点数据的新增和节点数据的增删改,zookeeper官方提供了一个客户端API,但是它的一些实现机制并不完善,如下:

1).Zookeeper的Watcher是一次性的,每次触发之后都需要重新进行注册;

2).Session超时之后没有实现重连机制;

3).异常处理繁琐,Zookeeper提供了很多异常,对于开发人员来说可能根本不知道该如何处理这些异常信息;

4).只提供了简单的byte[]数组的接口,没有提供针对对象级别的序列化;

5).创建节点时如果节点存在抛出异常,需要自行检查节点是否存在;

6).删除节点无法实现级联删除;

因此我们需要使用第三方的客户端去实现zookeeper的连接,这里主要有zkclient和curator两种方式,在完善性上面curator比zkclient更好,他们都实现了session会话超时重连,watch反复注册等功能,zkclient缺少如下:

1).zkClient社区不活跃,文档不够完善,几乎没有参考文档;

2).异常处理简化(抛出RuntimeException);

3).重试机制比较难用;

4).没有提供各种使用场景的参考实现;

而curator实现了共享锁服务、Master选举机制和分布式计算器等使用场景的参考。这里就不展示具体的实现逻辑,需要注意的是如果使用zkclient的话,我们需要使用到分布式锁,可以通过实现Lock并实现watch机制来实现分布式锁。

猜你喜欢

转载自357029540.iteye.com/blog/2440898