Zookeeper简介:
1.什么是Zookeeper?
ZK是一个高效的分布式协调服务,他暴露了一些公用服务,比如命名、配置管理,同步控制,群组服务等,我们可以使用ZK实现比如达成共识,集团管理,leader选举等。
2.设计目标
简单:
ZK中的namespace组织结构类似与标准的文件系统,通过这些共享的有层次的namespace来互相协调分布式中的多个进程,这些namespace由Znodes组成,ZK数据被保存在内存中,这也意味着ZK将可以达到较高的吞吐量/较低的延迟。
ZK的核心目标就是
高性能,
高可用,
严格有序的存取。
高性能标志着ZK可以使用在大规模分布式环境中;
高可用标志着ZK避免单点故障,具有较强的容错能力;
严格有序意味着客户端可以实现复杂的同步。
复制:ZK的数据将会在ZK Cluster中的每台机器上协作复制(备份),构成ZK服务的机器必须能够互相感知对方。他们保持了一个内存视图状态,同事伴随着tnxlog和snapshot的持久存储。只要大部分server有效,那么ZK服务也是有效的。客户端只与一个ZKserver 建立连接,client通过建立的TCP连接来进行请求,响应,获取事件,发送心跳等。如果此TCP连接失效,Client将会尝试连接其他的ZKserver.
全序性:对于每个update请求,ZK都会为生成唯一的zid来表示其事务的顺序,接下来的操作可以使用zid的顺序实现同步原语(队列)。
高效快速:ZK在“
读主导”的应用中表现的非常优秀。
ZK应用可以运行在数台机器上,并且在read远大于write的场景中,是非常合适的,通常这个比例为10:1.
3.Zookeeper server 组成
ZK server 根据其身份特性分为三种:
leader,
follower,
Observer,其中
follower和Observer又统称Learner(学习者)。
leader : 负责客户端的writer类型请求.
follower: 负责客户端的reader类型请求,参与leader选举等。
Observer:特殊的“follower”,其可以接受客户端reader请求,但不参与选举。(扩容系统支持能力,提高了读取速度。因为它不接受任何同步的写入请求,只负责与leader同步数据)
4.数据模型
1.每个子目录项如nameservice 都被称为Znode,这个znode是被它所在的路径唯一标识,如Server1这个znode的表识为/nameservice/server1
2.znode可以有子节点目录,并且每个znode可以存储数据,注意EPHEMERAL类型的目录节点不能有子节点目录,
3.znode是有版本的,每个znode中存储的数据可以有多个版本,也就是一个访问路径可以存储多份数据
4.znode可以是临时节点,一旦创建这个znode的客户端与服务器失去联系,这个znode也将自动删除,ZK的客户端和服务器通信使用长连接方式,每个客户端和服务器通过心跳来保持连接,这个连接状态称为sesion,如果znode是临时节点,这个session失效,znode也就删除了
5.znode的目录名可以自动编号,如App1已经存在,再创建的话,将会自动命名为App2.
6
.znode 可以被监控,包括这个目录节点中存储的数据修改,子节点目录的变化等,一旦变化可以通过设置监控的客户端,这个是ZK的核心特性,Zk的很多功能都是基于这个特性是实现的。