1.1、引子

Zookeeper专注于解决分布式协作问题,那分布式协作下会出现什么问题呢?我们举一个例子:例如东风路小学一年级二班需要组织一次户外野营活动,时间是本周六。如果本次活动没有组织者,全班所有的人员就会在周六不同时间段去野营活动地点,还有可能有些童鞋临时有事无法去,这样就会出现整个活动随时都可能有人进来,也会出现随时都有可能有人离开,活动就会失败。那我们看到这个活动的特点是全班人类似一个个分布式节点,他们之间的协调配合都需要一个组织者来处理,zookeeper就是实现的这种功能。

1.2、定义

ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。

1.3、特点

Zookeeper具有如下一些特点:数据结构简单、高可用、高效、有序性

数据结构简单:Zookeeper通过一种和文件系统很像的层级命名空间来让分布式进程互相协同工作。这些命名空间由一系列数据寄存器组成,我们也叫这些数据寄存器为znodes。这些znodes就有点像是文件系统中的文件和文件夹。和文件系统不一样的是,文件系统的文件是存储在存储区上的,而zookeeper的数据是存储在内存上的。数据结构示意图如下:


高可用性:组成Zookeeper的各个服务器必须要能相互通信。他们在内存中保存了服务器状态,也保存了操作的日志,并且持久化快照。只要大多数的服务器是可用的,那么Zookeeper就是可用的。客户端连接到一个Zookeeper服务器,并且维持TCP连接。并且发送请求,获取回复,获取事件,并且发送连接信号。如果这个TCP连接断掉了,那么客户端可以连接另外一个服务器。

高效:Zookeeper的高效更表现在以读为主的系统上。Zookeeper可以在千台服务器组成的读写比例大约为10:1的分布系统上表现优异。

有序性:Zookeeper使用数字来对每一个更新进行标记。这样能保证Zookeeper交互的有序。后续的操作可以根据这个顺序实现诸如同步操作这样更高更抽象的服务。


Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐