前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Zookeeper基本概念

Zookeeper基本概念

作者头像
张申傲
发布2020-09-03 15:36:53
发布2020-09-03 15:36:53
3690
举报
文章被收录于专栏:漫漫架构路漫漫架构路

Zookeeper基本概念

一. Zookeeper概述

Zookeeper是一个分布式协调服务,分布式应用程序可以基于它来实现注入数据发布/订阅、负载均衡、命名服务、分布式协调/通知、集群管理、Master选举和分布式锁等功能。

二. Zookeeper的特性

  1. 顺序一致性 对于同一个客户端发出的事务操作,Zookeeper会严格按照顺序执行。
  2. 原子性 对于一个事务操作,集群上的所有节点的结果都是一样的,不会存在一部分节点操作成功,而另一部分节点失败的情况。
  3. 单一视图 无论客户端访问集群中的哪个节点,所看到的数据模型都是一样的。
  4. 可靠性 一旦服务端成功执行了一个事务操作,并完成了对客户端的响应,那么该操作所带来的结果就会被一直保存起来,直到另一个事务修改了该结果。
  5. 实时性 严格意义上讲,Zookeeper保证的是最终一致性,即事务操作发起后,Zookeeper能够给保证在一段时间内,客户端一定能从服务器上读取到最新的数据。

三. Zookeeper的设计目标

  1. 简单的数据模型 Zookeeper提供了一个类似于Unix文件系统的数据结构,称为ztree,而其中的每个节点称为一个znode。每个znode都可以保存数据,并且维护自己的元数据信息。ztree的结构如下图所示:

与Unix文件系统不同的是,Zookeeper将全量数据都保存在内存中,以实现服务器集群的高吞吐和低延时。

  1. 方便构建集群 一个Zookeeper集群通常由一组机器组成,一般3~5台机器就可以构建一个Zookeeper集群。集群模式如下图:

组成集群的每台机器都会在内存中维护当前的服务器状态,并且每两台机器之间都保存互相通信。只要集群中有超过一半的节点正常工作,整个集群就能够正常对外提供服务。 Zookeeper客户端可以选择和集群中的任意一台机器建立TCP连接。如果客户端与该节点的连接异常断开,则客户端会自动重连到其他节点上。

  1. 顺序访问 对于客户端的每个更新请求,Zookeeper都会为该请求分配一个全局递增的唯一id,这个id反映了所有事务操作的先后顺序。应用程序可以基于Zookeeper的这一特性,实现更改层次的同步原语。
  2. 高性能 由于Zookeeper将所有数据保存在内存中,并直接服务于客户端的所有非事务请求,因此Zookeeper的读性能很高,十分适合用于大量读请求的场景。

四. 集群角色

  1. Leader:由集群选举产生,每个集群有且仅有一个Leader,可以为客户端提供读写服务。
  2. Follower:提供读服务,并参与集群选举。
  3. Observer:仅提供读服务,不参与集群的选举等操作。Observer可以在不影响集群写性能的情况下,提升读性能。

五. 会话(Session)

Session为客户端与Zookeeper服务器建立的一个TCP长连接。在客户端启动,并向服务器建立连接成功后,一个Session的生命周期就开始了。客户端可以通过Session向服务器发送请求并接收响应,同时还可以接收来自服务器的Watch事件通知。客户端通过心跳检测来保持与客户端的有效会话。

六. 数据节点(ZNode)

如前文所述,Zookeeper将全量数据保存在内存中,并以树形结构组织起来。用“/”进行分割的一个路径,就是一个Znode,如/zookeeper/data。每个Znode上都会保存自己的数据内容,同时还会保存一系列属性信息(节点元信息)。

Znode有以下几种类型:

  1. 持久节点:除非主动进行移除操作,否则持久节点会一直保存在Zookeeper上。
  2. 临时节点:节点的生命周期与客户端会话绑定,一旦客户端会话失效,则该客户端创建的所有临时节点都会被移除。
  3. 顺序节点:该类型的节点有一个特殊的属性:Sequential。一旦节点被标记上这个属性,那么该节点在创建时,Zookeeper会自动在其节点名称后面追加一个整形数字,这个数字是由其父节点维护的一个自增id。
  4. 非顺序节点:无Sequential标记,也即名称后面不会自动追加数字。

七. 版本(Version)

对于每一个Znode,Zookeeper都会为其维护一个叫做Stat的数据结构,Stat中记录了这个ZNode的三个数据版本:

  1. version:当前ZNode的版本
  2. cversion:当前ZNode子节点的版本
  3. aversion:当前ZNode的ACL版本

八. 事件监听器(Watcher)

Watcher是Zookeeper中一个十分重要的特性。Zookeeper允许用户在指定节点上注册一些Watcher,这样在一些特定事件触发的时候,Zookeeper服务器会将该事件通知给所有感兴趣的客户端。Watcher机制是Zookeeper实现分布式协调服务的重要特性。

九. ACL权限

Zookeeper采用ACL(Access Control Lists)策略来进行权限控制,与Unix文件系统的权限机制类似。Zookeeper定义了以下5种权限:

  1. CREATE:创建子节点的权限
  2. READ:读取节点数据和子节点列表的权限
  3. WRITE:更新节点数据的权限
  4. DELETE:删除子节点的权限
  5. ADMIN:设置节点ACL的权限

其中尤其要注意的是,CREATE和DELETE都是针对子节点的权限控制。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019/03/11 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Zookeeper基本概念
    • 一. Zookeeper概述
    • 二. Zookeeper的特性
    • 三. Zookeeper的设计目标
    • 四. 集群角色
    • 五. 会话(Session)
    • 六. 数据节点(ZNode)
    • 七. 版本(Version)
    • 八. 事件监听器(Watcher)
    • 九. ACL权限
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档