关于ZooKeeper
ZooKeeper是Hadoop的分布式协调服务。
写分布式应用的主要困难在于会出现“部分失败”(partial failure)。当一条消息在网络中两个节点之间传送时,如果出现网络错误,发送者无法知道接收者是否已经收到这条消息。接收者可能在出现网络错误之前就已经收到这条消息,也有可能没有收到,又或者接收者的进程已经死掉。发送者能够获得真实情况的唯一途径就是重新连接接收者,并向它发出询问。这种情况就是部分失败,即我们不知道一个操作是否已经失败。
由于部分失败是分布式系统固有的特征,因此使用zookeeper并不能避免出现部分失败,当然它也不会隐藏部分失败。Zookeeper可以提供一组工具,在构建分布式应用时能够对部分失败进行正确处理。
ZooKeeper具有以下特点
1.ZooKeeper是简单的:ZooKeeper的核心是一个精简的文件系统,它提供一些简单的操作和一些额外的抽象操作,例如,排序和通知。
2.ZooKeeper是富有表现力的:ZooKeeper的基本操作是一组丰富的构件(building block),可用于实现多种协调数据结构和协议。相关的例子包括:分布式队列、分布式锁和一组节点中的“领导者选举”(leader election)。
3.ZooKeeper具有高可用性:ZooKeeper运行于一组机器之上,并且在设计上具有高可用性,因此应用程序完全可以依赖于它。ZooKeeper可以帮助系统避免出现单点故障,因此可以用于构建一个可靠的应用程序。
4.ZooKeeper采用松耦合交互方式:在ZooKeeper支持的交互过程中,参与者不需要彼此了解。例如,ZooKeeper可以被用于实现“数据汇集”(rendezvous)机制,让进程在不了解其他进程(或网络状况)的情况下能够彼此发现并进行信息交互。参与的各方甚至可以不必同时存在,因为一个进程可以在ZooKeeper中留下一条信息,在改进程结束后,另外一个进程还可以读取这条消息。
5.ZooKeeper是一个资源库:ZooKeeper提供了一个通用协调模式实现方法的开源共享库,使程序员免于编写这类通用的协议。所有人都能够对这个资源库进行添加和改进,久而久之,会使每个人都从中受益。
同时,ZooKeeper也是高性能的。对于以写操作为主的工作负载来说,ZooKeeper的基准吞吐量已经超过每秒10000个操作;对于常规的以读操作为主的工作负载来说,吞吐量更是高出好几倍。