本文只是简单介绍zookeeper,做一个备忘。具体的详细介绍可以自己看代码。另外http://agapple.iteye.com/的博客里也有详细的学习记录。
什么是zookeeper?
Zookeeper是hadoop社区的一款开源框架,用来解决分布式环境下的一致性问题。
类似于google的chubby系统的实现。关于chubby可以阅读google的论文:
http://wenku.baidu.com/view/472d27a0284ac850ad0242ee.html,google的bigtable论文为了解决分布式系统中master节点唯一性的问题,就采用了chubby的解决方案。在bigtable的变种hbase中也采用了类似解决方案,也就是zookeeper.关于bigtable的论文可以阅读:
http://wenku.baidu.com/view/4967070e76c66137ee061993.html
Zookeeper实现
Paxos主要是对Paxos算法做了一个实现,淘宝的人已经有了总结:http://rdc.taobao.com/blog/cs/?p=162
然后我们来看看zookeeper实现那些特点。
1. 树形目录文件结构
从图中可以看出,整个集群维护这么一份树状结构。
2. 配置推送
客户端可以通过注册的方式向服务端注册一个watch,假如服务端事件发生,则会通知客户端回调watch的逻辑, 每一种按同步还是异步,添加指定watcher还是默认watcher又分为4种。默认watcher可以在ZooKeeper zk = new ZooKeeper(serverList, sessionTimeout, watcher)中进行指定。如果包含boolean watch的读方法传入true则将默认watcher注册为所关注事件的watch。如果传入false则不注册任何watch
3. 通过选举仲裁集群成员的集群管理策略
这块可以阅读:
http://rdc.taobao.com/blog/cs/?p=162
还能用来做什么?
在单机环境下产生的锁问题,以及临界区代码的一致性问题,到了分布式环境下这么解决呢?这个时候就可以利用zookeeper了。
例如分布式的队列,锁,Barrier等等
官方就提供好几个例子供大家查阅:
http://zookeeper.apache.org/doc/r3.3.2/recipes.html#sc_doubleBarriers