Zookeeper概述
一:什么是Zookeeper?
ZK是一个开源的分布式协调服务。他提供了一组简单的原生接口,分布式应用可以基于它实现,高水准的同步,集群,配置管理和命名服务。它基于开发,
使用简单的原则而设计。使用类似于文件系统目录树结构的数据模型。它基于java实现,可以为c和java应用服务。
二:他能干什么?
1、维护配置信息
在Hadoop中会有数量庞大的节点,它们共用一些配置文件。假如要修改配置文件的话,所有的节点配置文件都要修改。如果
一个个去修改的话很耗费时间和精力,也不利于管理。Zookeeper提供的这个配置管理,就是把这些公用的配置文件提取出来放到一个地方,
对这个地方(目录节点)进行监听,一旦配置文件发生变动,每个应用程序都会收到Zookeeper的通知,然后从Zookeeper中获取新的配置文件
应用到自己的系统中。
2、命名
在分布式环境下,经常需要对应用、服务进行统一命名,便于识别。
3、分布式同步
在分布式上,如果A要调用B的方法C,C方法也要加锁,但这个锁不能想单服务器那样加,因为这个是分布式调用的方法,不一样。
就像事务一样,单服务器上的事务和分布式事务不一样。zookeeper提供了一个分布式同步(锁)的方法,使用其提供的,客户可以省了很多事。
zookeeper分布式锁的思路:
4、提供组服务
组服务其实就是集群管理。服务器上的服务注册或者获取服务都是在ZK上操作的,所以所谓的提供组服务也就包括创建组、加入组成员、列出组成员和删除组成员。
对于这些服务,主要通过zookeeper心跳机制,它会去检测与其连接的一些服务器的数量,以及信息。什么时候连上zookeeper,或什么时候断开都有其心跳机制完成。
5、软负载均衡
在ZK中记录每台服务器的访问数,让访问数最少的的服务器去处理最新的客户端请求
三:特点
1、ZK由一个Leader和多个Follower组成
2、集群中要保证有半数以上节点存活,ZK才能正常服务。
3、全局数据一致:每个Server保存一份相同的数据副本,Client无论连接到哪个Server上,数据都是一致性的。
4、数据更新原子性,一次数据更新要么成功要么失败。
5、更新请求顺序进行,来自同一个Client的更新请求按其发送顺序依次执行。
6、实时性,在一定时间范围内,Client能读到最新数据。
四:数据结构
ZK数据模型的结构和Unix文件系统类似,整体看作一棵树,每个节点称作一个ZNode.每个ZNode默认能够存储1MB的数据,每个ZNode都可以
通过其路径唯一标识。