ZooKeeper之基本概念

  |   0 评论   |   0 浏览

1. 来源

Apache ZooKeeper由Apache Hadoop的子项目发展而来,为分布式应用提供了高效且可靠的分布式协调服务,提供了诸如统一命名服务,配置管理和分布式锁等分布式的基础服务。由雅虎创建,是Google Chubby的开源实现。在解决分布式数据一致性方面,并没有采用Paxos算法,而是采用了ZAB(ZooKeeper Atomic Broadcase)的一致性协议

2. 特性

顺序一致性

从同一客户端发起的请求,之中将会严格的按照其发起的顺序被应用到ZooKeeper中去

原子性

所有事务请求的处理结果在整个集群中所有机器上的应用情况是一致的。

单一视图

无论客户端连接的是哪个ZooKeeper服务器,其看到的服务端数据模型都是一致的

可靠性

一旦服务端成功的应用了一个事务,并完成了对客户端的响应,那么该事务所引起的服务端状态变更将会被一直保留下来,除非有另一个事务又对其进行了变更

实时性

ZooKeeper能保证在一定的时间段内,客户端最终一定能够从服务端上读取到最新的数据状态,并不能保证实时的

3. 设计目标

ZooKeeper致力于提供一个高性能、高可用,且具有严格的顺序访问控制能力的分布式协调服务。

简单的数据模型

通过一个共享的,树型结构的名字空间来进行相互协调。这个数据模型存在于内存中(以此来实现提供服务吞吐、减少延迟的目的),由一系列被称为ZNode的数据节点组成,类似于一个文件系统,ZNode之间的层级关系类似于文件系统的目录结构。

可以构建集群

一个ZooKeeper集群通常由3~5台机器组成。没台机器都会在内存中维护当前的服务器状态,并且没台机器之间都互相保持着通信。集群中存在超过半数的机器能够正常工作,那么整个集群就能够正常对外服务。

ZooKeeper客户端会选择集群中任意一台集群共同来创建一个TCP连接,而一旦客户端和某台机器断开连接后,客户端会自动连接到集群中的其他机器

顺序访问

对于客户端的每个更新请求,ZooKeeper都会分配一个全局唯一的递增编号,这个编号反映了所有事务操作的先后顺序,应用程序可以使用ZooKeeper的这个特性来实现更高层次的同步原语。

高性能

由于ZooKeeper将全量数据存储于内存中,并直接服务于客户端的所有非事务请求,因此它尤其适用于以读操作为主的应用场景

4. 基本概念

集群角色

在ZooKeeper中,没有沿用传统的Master/Slave概念,而是引入了Leader、Follwer、Observer三种角色。zk集群中所有的机器通过一个Leader选举过程选定一台被称为Leader的机器,Leader服务器为客户端提供读和写服务。除Leader外,其他机器包括Follower、Observer能够提供读服务。唯一的区别是Observer机器不参与Leader选举过程,也不参与写操作的过半写成功策略。因此Observer可以在不影响写性能的情况下提升集群的读性能。

会话

zk中,一个客户端连接是指客户端和服务端之间的一个TCP长连接,zk对外提供的默认端口是2181,客户端启动的时候,首先会与服务器建立一个TCP长连接,从第一次连接开始建立,客户端会话的生命周期也开始了。通过这个连接,客户端能够通过心跳检测与服务器保持有效会话,也能够向zk服务器发送请求并接受响应,同时能够通过该连接来接收来自服务器的Watch事件通知。sessionTimeout用来设置一个会话超时时间,当由于各种原因客户端断开连接时,只要在sessionTimeout时间内建立连接,之前的会话还会有效。

数据节点

zk中节点分为两类

  1. 组成机器的节点,称为机器节点
  2. 指数据模型的单元,称为数据节点(ZNode)
    zk中,ZNode可以分为持久节点和临时节点两类。
    持久节点:一旦ZNode被创建,除非进行主动移除操作,否则一个ZNode将一直保存在zk上
    临时节点:生命周期和客户端会话绑定,一旦客户端会话失效,那么这个客户端的所有临时节点都会被移除

版本

zk会维护一个叫作Stat的数据结构,Stat中记录了这个ZNode的三个数据版本,分别是version(当前ZNode版本)、cversion(当前ZNode子节点版本)和aversion(当前ZNode的ACL版本)

Watcher

事件监听器,是zk一个重要特性。zk允许用户在指定节点上注册一些Watcher,并且在一些特定事件触发的时候,zk服务端会将事件通知到感兴趣的客户端上去。该机制是实现分布式协调服务的重要特性。

ACL

zk采用了ACL(Access Control Lists)策略来进行权限控制,zk定义了5种权限

  • Create:创建子节点的权限
  • Read:获取节点数据和子节点列表的权限
  • Write:更新节点数据的权限
  • Delete:删除子节点的权限
  • Admin:设置节点ACL的权限

来自《从paxos到zookeeper 分布式一致性原理与实战》,稍微进行了归纳总结。


标题:ZooKeeper之基本概念
作者:guobingwei
地址:http://guobingwei.tech/articles/2019/03/06/1551827974804.html