许吉友 - 运维

ZooKeeper介绍

准备系统学习一下 ZooKeeper,但是这个东西属于较低层的东西,一般用不到,但又很重要,所有大数据组件基本都对 ZooKeeper 有依赖。另一方面,学会 ZooKeeper 之后,自己也就有一定的能力做分布式的组件了,而不是一直使用开源组件。

既然是系统学习,就一定是按照官方文档来的,官方文档地址:http://zookeeper.apache.org/doc/r3.5.6/

先学习第一篇 ZooKeeper 介绍

ZooKeeper :针对分布式应用的分布式协调服务

ZooKeeper 是一个针对分布式应用的协调服务,它自己本身是分布式的,开源的。它开放了一组原语,分布式应用可以在此基础上实现更高级别的同步、配置维护、组和命名服务。ZK的设计是易于编程的,使用了一个目录树结构的文件系统来组织数据结构。ZK使用 Java 实现,并且提供了 Java 和 C 接口。

协调服务是很难的,特别容易出错,比如竞争条件和死锁,开发 ZK 的动机是减轻分布式应用的协调管理。

设计目标

ZK 是简单的,ZK允许分布式程序通过共享的分层命名空间进行协调,该命名空间的组织方式类似于标准文件系统。命名空间由数据注册器组成,成为 znodes,他们类似于文件和目录。与标准文件系统不同,ZK的数据是保存在内存中的,这意味着 ZK 可以实现高吞吐量和低延迟。

ZK非常重视高性能、高可用及严格排序的访问,ZK的良好性能意味着它可以在大型分布式系统中使用,高可用性使 ZK 不至于成为故障点。严格的排序意味着复杂的同步原语可以在客户端实现。

ZK本身也是分布式的,与通过ZK的分布式程序一样,ZK也是可以在多台机器上部署多个实例的。