Zookeeper设计目标与基本概念

2022-09-03 09:35:40

Zookeeper简介

Zookeeper是一个开源的分布式协调服务,设计目标是将那些复杂且容易出错的分布式一致性服务封装起来,构成一个高效且简单易用的框架。

分布式应用程序可以基于它实现:数据发布/订阅、负载均衡、命名服务(服务注册与发现)、集群管理、Master选举、分布式锁和分布式队列等功能。

Zookeeper保证分布式一致性特性如下

顺序一致性

从同一个客户端发起的事物请求,最终将会严格地按照发起顺序被应用到Zookeeper中去。

原子性

所有事物请求的处理结果在整个集群中所有机器上应用请求是一致的,也就是说要么全部成功,要么多没有成功,不会出现部分成功,而另外部分没有成功的情况。

单一试图(Single System Image)

客户端连接的任何一个Zookeeper服务器,其看到的服务器数据都是一致的。

可靠性

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

实时性

Zookeeper保证在一定的时间段内,客户端最终一点能从服务端上读取到最新的数据状态。

Zookeeper的设计目标

Zookeeper致力于提供一个高性能、高可用、且严格的顺序访问能力(主要是写操作的严格顺序)的分布式协调服务。
高性能:使得能够在吞吐量有明确要求的大型分布式系统中。
高可用:使得分布式单点问题很好解决,而严格的顺序访问控制,使得客户端能够实现一些复杂的同步操作。

简单的数据模型

提供一个共享、树型结构的名字空间来进行相互协调。树型结构的名字空间:是Zookeeper的数据模型,由一系列ZNode的数据节点组成,类似于一个文件系统。数据存储在内存中,以此来提高吞吐率、减少延迟的目的。

可以构建集群

每台服务器都会在内存中维护当前的服务器状态,并且每台服务器之间都相互保持通信,且只要集群中存在半数以上的服务器,就能保证正常工作。
客户端会选择集群中任意一台服务器,来创建TCP长连接,当服务器异常后,客户端会自动连接到集群中其他服务器中。

顺序访问

客户端每一个更新请求,Zookeeper都会分配一个全局唯一的递增编号,这个编号反映了事务的先后顺序。

高性能

全量数据存在内存中,对于非事物请求每台服务器都可以提供服务。适合已读操作为主的场景。

Zookeeper基本概念

集群角色

分为Leader(领导)、Follower(追随者)和Observer(观察者)三种角色。
通过Leader选举过程中选定的一台服务称为”leader“服务器,Leader服务器为客户端提供读和写服务。
其他服务为器为Follower或Observer,只能提供读服务。
Follower和Observer区别是Observer不参与Leader选举过程,也不参与写操作的”过半写成功“策略。因此Observer可以在不影响写性能的情况下提升集群的读性能。

会话(Session)

客户端和服务器端会话会创建一个TCP长连接。服务器端默认端口是2181。
从第一次建立连接开始,客户端会话的生命周期也开始了,客户端可以通过心跳检查与服务器保持有效的会话。
能够向服务器端发送请求并接受响应
同时还能够通过该连接接受到服务器的Watch时间通知。
通过sessionTimeout值来设置客户端会话超时时间,由服务器压力大、网络故障或客户端主动断开连接等各种原因导致客户端连接断开时,只要在sessionTimeout规定的时间内能够重新连接上集群中的任意一台服务器,那么之间创建的会话仍然有些。

数据节点(ZNode)

服务器所有数据都存储在内存中,数据模型是一棵树(ZNode Tree),由斜杠(/)进行分割的路径,就是一个ZNode。如:/foo/path1。每个ZNode会报错自己的数据内容,同时还会保存一系列属性信息。

ZNode分为持久节点和临时节点
持久节点:一旦创建就会一直保存在服务器端,除非执行删除操作。
临时节点:生命周期和客户端会话绑定,一旦会话失效,那么服务器就会删除失效会话创建的所有临时节点。

版本

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

Watcher(事件监听器)

客户端在服务器端指定节点上注册Watcher,并且在一些特定事件触发的时候,服务器端会将时间通知到感兴趣的客户端上。

ACL(访问控制列表)

ACL(Access Control Lists)策略来进行权限控制

  1. CREATE:创建子节点的权限
  2. READ:获取节点数据和子节点列表的权限
  3. WRITE:更新节点数据的权限
  4. DELETE:删除子节点的权限
  5. ADMIN:设置节点ACL的权限。
  • 作者:swg321321
  • 原文链接:https://blog.csdn.net/swg321321/article/details/126191253
    更新时间:2022-09-03 09:35:40