Curator翻译成中文是馆长,Zookeeper是动物园看守人、饲养员,而Curator就是指挥这些饲养员的馆长。从名字可以看出Curator的定位:指挥zookeeper操作的利器。
"Guava is to Java what Curator is to Zookeeper" —— Patrick Hunt, zookeeper committer
Zookeeper原生API的不足: - 不能递归创建和删除节点
- Watcher只能使用一次
- 许多分布式应用问题需要自行实现,比如分布式锁、Leader选举、共享计数器、分布式队列、配置管理等。
Curator是Netflix公司开源的一个Zookeeper Java库,2011年7月捐献给Apache。Curator在zookeeper原生API上进行了包装,解决了很多非常底层的细节开发。提供各种分布式应用场景的抽象封装, 比如:分布式锁服务、集群领导选举、共享计数器、缓存机制、分布式队列等。实现了Fluent风格的API接口,是最好用、最流行的zookeeper的客户端。
Zookeeper的以下特性决定他可以作为分布式架构中用于协调的基础组件:
1. 创建节点的唯一性(写数据强一致保证)
2. 能创建临时节点(服务器是否存活的判断依据)
3. watch机制(事件监听和通知)
4. 能创建顺序节点(全局步骤协调)
Zookeeper以下不足决定不会把他用于分布式存储:
1. zk节点的数据有1MB限制;
2. zk上节点过多会影响zk服务启动和恢复过程(zk在恢复模式下是不可能对外服务的);
3. zk数据会全部存在内存中,虽然它也会持久化到文件。
所以在zk主要应用场景是分布式协调,如Master选举、分布式锁、服务发现。这些场景主要创建临时节点,数据量比较小,通常和集群机器数量同等规模。
|