zookeepr 简介

news2024/10/6 18:34:14

简介:

  zookeeper是为分布式应用提供协调服务的高性能组件。zookeeper通过简单的接口暴露了一些公共服务(命名、配置管理、同步和分组服务), 因此你不需要从头开始写这些服务。你可以现成得使用zookeeper来实现共识、组管理、领导者选举和存在协议。你可以根据自己的特殊需求来构建它。

      zookeepr是分布式、开源协调服务为分布式应用。zookeeper暴露了一些简单的原语。分布式应用通过原语实现更高层级的服务(命名、配置管理、同步和分组服务)。

      zookeeper设计为易于编程、并仿照熟悉的文件系统目录树结构设计的数据模型。

     ZooKeeper 背后的动机是减轻分布式应用程序从头开始实施协调服务的责任

设计目标:

     简单:

     zookeeper允许分布式进程通过类似于标准文件系统的共享分层namespace互相协调,namespace由 data registers 组成,按照zookeeper说法就是znodes 。znodes类似于文件或者目录,不同的是,znode被设计为可以存储。zookeeper数据保存在内存中,这意味着zookeeper可以轻易达到高吞吐和低延迟。

    zookeeper非常重视高性能、高可用、严格的有序访问。zookeeper的高性能意味着可以用于大规模的分布式系统。zookeepr的可靠性保证不会成为单点故障。有序性意味着客户端可以复杂的一致性原语。

可复制-扩展:

     就像它协调的分布式进程一样,ZooKeeper 本身旨在通过一组称为集成的主机进行复制。

正在上传…重新上传取消

构成 ZooKeeper 服务的服务器必须相互了解。它们在内存中维护状态图像,以及持久存储中的事务日志和快照。只要大多数服务器可用,ZooKeeper 服务就可用。

客户端连接到单个 ZooKeeper 服务器。客户端维护一个 TCP 连接,通过它发送请求、获取响应、获取监视事件和发送心跳。如果与服务器的 TCP 连接中断,客户端将连接到另一台服务器。

    有序性:

ZooKeeper用一个数字标记每个更新,这个数字反映了所有ZooKeeper事务的顺序,后续操作可以使用该顺序来实现更高级别的抽象,例如同步原语。

   速度快:

它在“读主导”工作负载中特别快。ZooKeeper 应用程序在数千台机器上运行,它在读取比写入更常见的情况下表现最佳,比率约为 10:1。    

场景:

概念:

namespace:

    

ZooKeeper 提供的namespace与标准文件系统的名称空间非常相似。名称是由斜杠 (/) 分隔的一系列路径元素。ZooKeeper 命名空间中的每个znode都由路径标识。

ZooKeeper 的分层namespace

znode:

Znodes 维护一个统计结构,其中包括数据更改的版本号、ACL 更改和时间戳,以允许缓存验证和协调更新。每次 znode 的数据更改时,版本号都会增加。

存储在命名空间中每个 znode 的数据是原子读取和写入的。读取获取与 znode 关联的所有数据字节,写入替换所有数据。每个节点都有一个访问控制列表 (ACL),用于限制谁可以做什么。

ZooKeeper 也有临时节点的概念。只要创建 znode 的会话处于活动状态,这些 znode 就会存在。当会话结束时,znode 将被删除。

ZooKeeper 旨在存储协调数据:状态信息、配置、位置信息等,因此每个节点存储的数据通常很小,在字节到千字节范围内

quorum:

   A replicated group of servers in the same application is called a quorum,

watches

ZooKeeper 支持watches的概念。客户端可以在 znode 上设置监视。当 znode 更改时,将触发并删除 watch。触发监视时,客户端会收到一个数据包,说明 znode 已更改。如果客户端和其中一个 ZooKeeper 服务器之间的连接断开,客户端将收到本地通知。

3.6.0 中的新增功能:客户端还可以在 znode 上设置永久的递归监​​视,这些监视在触发时不会被删除,并且会递归地触发已注册 znode 以及任何子 znode 上的更改。

Guarantees:

ZooKeeper 非常快速且非常简单。但是,由于它的目标是成为构建更复杂服务(例如同步)的基础,因此它提供了一组保证。这些都是:

  • 顺序一致性——来自客户端的更新将按照它们发送的顺序应用
  • 原子性——更新要么成功要么失败。没有部分结果。
  • 单一系统映像——无论连接到哪个服务器,客户端都将看到相同的服务视图。即,即使客户端故障转移到具有相同会话的不同服务器,客户端也永远不会看到系统的旧视图。(全局数据试图)
  • 可靠性——应用更新后,它将一直持续到客户端覆盖更新为止。
  • 及时性——系统的客户视图保证在特定时间范围内是最新的。
  • tickTime:ZooKeeper 使用的基本时间单位,以毫秒为单位。它用于执行心跳,最小会话超时将是 tickTime 的两倍。

  • dataDir:存储内存数据库快照的位置,除非另有说明,否则存储更新数据库的事务日志。

  • clientPort:侦听客户端连接的端口

Simple API:

ZooKeeper 的设计目标之一是提供一个非常简单的编程接口。因此,它仅支持这些操作:

  • create:在树中的某个位置创建一个节点

  • delete : 删除一个节点

  • exists : 测试节点是否存在于某个位置

  • get data:从节点读取数据

  • set data:将数据写入节点

  • get children:检索节点的子节点列表

  • sync:等待数据传播

实现流程:

复制数据库是包含整个数据树的内存数据库。更新被记录到磁盘以实现可恢复性,写入在应用于内存数据库之前被序列化到磁盘。

每个 ZooKeeper 服务器都为客户端服务。客户端仅连接到一台服务器以提交请求。读取请求由每个服务器数据库的本地副本提供服务。更改服务状态的请求,写入请求,由协议协议处理。

作为协议的一部分,来自客户端的所有写请求都被转发到一个称为leader的服务器。其余的 ZooKeeper 服务器,称为followers,从领导者那里接收消息提议并就消息传递达成一致。消息传递层负责在失败时更换领导者并将追随者与领导者同步。

ZooKeeper 使用自定义原子消息传递协议。由于消息传递层是原子的,ZooKeeper 可以保证本地副本永远不会发散。当领导者收到写请求时,它会计算要应用写时系统的状态,并将其转换为捕获此新状态的事务。

数据模型:

    zookeeper 使用分层的namespace,namespace中的每个node都会关联data和children。任何unicode字符都可以在受以下约束的路径中使用,因此是二进制安全的。

 znodes:

     zookeeper namespace 结构中的每个节点叫做znode。znode维护着一个状态结构,保存着数据改变的版本、acl changes、timestamp、version nubmber。允许ZooKeeper验证缓存并协调更新。每次znode的数据更改时,版本号都会增加。当客户端执行更新或删除操作时,它必须提供它正在更改的znode的数据版本。如果它提供的版本与数据的实际版本不匹配,则更新将失败 

在分布式应用程序工程中,节点一词可以指通用主机、服务器、集合的成员、客户端进程等。在ZooKeeper文档中,znodes表示数据节点。服务器是指组成ZooKeeper服务的机器;Quorum对等体指的是组成集合的服务器;client指所有使用ZooKeeper服务的主机或进程。Znodes是程序员访问的主要实体。它们有几个值得一提的特点。

 watches:

client可以在znodes上设置watches。znode上的改变会触发watch并且清除watch。当watch触发,zookeeper将发送client一个notification。

  data  access

    每个znode的数据读写都是原子的。每个znode都有一个acl来限制谁来做什么!zookeeper不被设计为传统数据库或者大数据存储。相反,zookeeper管理协调数据。这些数据可以是 配置、状态、集合。ZooKeeper客户端和服务器实现进行了完整性检查,以确保znode的数据小于1M,但数据应该远远小于平均数据。对相对较大的数据进行操作会导致某些操作比其他操作花费更多时间,并且会影响某些操作的延迟,因为将更多数据通过网络移动到存储介质上需要额外的时间。

  ephemeral nodes:

ZooKeeper也有临时节点的概念。只要创建znode的会话处于活动状态,这些znode就存在。当会话结束时,znode被删除。由于这种行为,ephemeral znode不允许有子节点。会话的ephemeral nodes列表可以使用getEphemerals() api检索。

  sequence nodes:

   当创建一个znode时,你也可以要求ZooKeeper在路径的末尾添加一个单调递增的计数器

  container nodes:

   Added in 3.6.0

    zookeeper有container nodes的概念,主要用来服务leader、lock等,当container nodes节点的最后一个child删除后,container nodes变成一个候选人,会被server在未来的某一时刻将被删除。

  TTL nodes:

Added in 3.6.0

    如果节点在ttl内内有被修改且没有字节点 childern的话会变成一个候选人,会被server在未来的某一时刻将被删除。

Time in zookeeper:

 zookeeper通过各种方式追踪时间:

Zxid:ZooKeeper Transaction Id。

    对ZooKeeper状态的每一次更改都会以zxid (ZooKeeper事务Id)的形式接收一个戳。这将向ZooKeeper公开所有更改的总顺序。每个变化都有一个唯一的zxid,如果zxid1小于zxid2,那么zxid1发生在zxid2之前。

Version numbers:

对节点的每次更改都将导致该节点的一个版本号增加。这三个版本号分别是version(对znode的数据进行更改的次数)、cversion(对znode的子节点进行更改的次数)和averse(对znode的ACL进行更改的次数)。    

Ticks:

When using multi-server ZooKeeper, servers use ticks to define timing of events such as status uploads, session timeouts, connection timeouts between peers, etc. The tick time is only indirectly exposed through the minimum session timeout (2 times the tick time); if a client requests a session timeout less than the minimum session timeout, the server will tell the client that the session timeout is actually the minimum session timeout.  

Real time:

 ZooKeeper doesn't use real time, or clock time, at all except to put timestamps into the stat structure on znode creation and znode modification.

zookeeper stat structure:

The Stat structure for each znode in ZooKeeper is made up of the following fields:

  • czxid The zxid of the change that caused this znode to be created.
  • mzxid The zxid of the change that last modified this znode.
  • pzxid The zxid of the change that last modified children of this znode.
  • ctime The time in milliseconds from epoch when this znode was created.
  • mtime The time in milliseconds from epoch when this znode was last modified.
  • version The number of changes to the data of this znode.
  • cversion The number of changes to the children of this znode.
  • aversion The number of changes to the ACL of this znode.
  • ephemeralOwner The session id of the owner of this znode if the znode is an ephemeral node. If it is not an ephemeral node, it will be zero.
  • dataLength The length of the data field of this znode.
  • numChildren The number of children of this znode.

ZooKeeper Sessions:

zookeeper watches

  • Semantics of Watches
  • Persistent, Recursive Watches
  • remove watches
  • what zookeeper guarantees about watches
  • things to remember about watches

 zookeeper access control using ACLs

  • Consistency Guarantees

  • ZooKeeper Operations

架构:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/443531.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ConcurrentHashMap分段锁

1.分段锁的设计目的 ConcurrentHashMap 是支持高并发的线程安全的 HashMap。相较于 HashTable 使用 synchronized 方法来保证线程安全,ConcurrentHashMap 采用分段锁的方式,在线程竞争激烈的情况下 ConcurrentHashMap 的效率高很多。 ConcurrentHashMa…

考勤系统的最佳实践 - 静态活体检测 API 技术

引言 静态活体检测(Static Liveness Detection)API 是一种基于人脸识别技术,用于判断面部图像或视频是否为真实人脸的 API 接口。它基于图片中人像的破绽(摩尔纹、成像畸形等),判断目标是否为活体&#xf…

abpvnext 创建数据时发布本地事件ILocalEventBus.PublishAsync ,创建的数据被阻塞的问题解决

一、问题背景描述: 我有一个需求,需要在字典服务里创建字典类型成功后执行ILocalEventBus.PublishAsync 发布一个事件,让主业务服务订阅这个事件,然后执行业务代码将字典类型同步给所有租户。 最开始我在字典服务员的applicatio…

数据结构实验 C语言 一元二项式操作

东莞理工学院请勿抄袭 1.实验目的 通过实验达到: ⑴ 理解和掌握线性结构的概念及其典型操作的算法思想; ⑵ 熟练掌握基本线性结构-线性表的顺序存储结构、链式存储结构及其操作的实现; ⑶ 理解和掌握受限线性结构——堆栈、队列、串、数…

HTTP 1 2 3 的演变过程

1 HTTP/1.1 相比 HTTP/1.0 提高了什么性能? HTTP/1.1 相比 HTTP/1.0 性能上的改进: 使用长连接的方式改善了 HTTP/1.0 短连接造成的性能开销。支持管道(pipeline)网络传输,只要第一个请求发出去了,不必等…

【ECharts+Vue】学习笔记(快速入门版)

一、ECharts 1.1 什么是Echarts ECharts 是一个使用 JavaScript 实现的开源可视化库,涵盖各行业图表,满足各种需求。提供了丰富的可视化图标,帮助你轻松实现大屏展示。 官网地址:Apache ECharts 1.2 ECharts的安装 直接下载 下载官…

分布式之搜索解决方案es

一 ES初识 1.1 概述 ElasticSearch:是基于 Lucene 的 Restful 的分布式实时全文搜索引擎,每个字段都被索引并可被搜索,可以快速存储、搜索、分析海量的数据。是ELK的一个组成,是一个产品,而且是非常完善的产品,ELK代表…

webRtc播放rtsp视频流(vue2、vue3+vite+ts)

一、下载webRtc 开发环境用的win10版本的。 github上直接下载,速度感人。 Releases mpromonet/webrtc-streamer GitHub 提供资源下载,0积分 https://download.csdn.net/download/weiqiang915/87700892 二、启动,测试 webrtc-streame…

PDD滑块分析

文章目录 1.流程分析2.关键点分析3.结果展示 声明:本文只作学习研究,禁止用于非法用途,否则后果自负,如有侵权,请告知删除,谢谢! 欢迎大佬加群一起交流哇( Q群:985475126…

基于web的电动车租赁管理系统C#+asp.net+sqlserver

具体功能如下:个人信息管理:实现登陆后对个人信息进行修改和查看的功能。 修改登录密码:实现登陆后对个人密码进行修改的功能。 申请租车订单:客户用户登陆后可以申请租车订单。同时可以查看租赁订单信息。 售后评价管理&#xff…

深度学习中的一阶段目标检测

博主简介 博主是一名大二学生,主攻人工智能研究。感谢让我们在CSDN相遇,博主致力于在这里分享关于人工智能,c,Python,爬虫等方面知识的分享。 如果有需要的小伙伴可以关注博主,博主会继续更新的&#xff0c…

飞行机器人专栏(十二)-- 提高机器人系统可靠性的关键要素与实践

本文将介绍如何在机器人系统的开发过程中融入关键要素,从而提高系统的可靠性。我们将从需求分析、设计阶段、开发与调试、验证与优化、迭代与升级等方面进行详细讨论,并提供示例代码以帮助您更好地理解相关概念。 目录 一、需求分析与规划 二、…

XML与JSON知识学习

目录 XML简介 XML的结构 小结 使用DOM 练习 小结 使用SAX 练习 小结 使用Jackson 练习 小结 使用JSON 反序列化 练习 小结 XML简介 XML是可扩展标记语言(eXtensible Markup Language)的缩写,它是一种数据表示格式&#xf…

管理后台项目-01-项目模板-登录相关-路由搭建-品牌相关

目录 1-项目模板 1.1-项目目录结构说明​编辑 1.2-前置项目相关配置 2-登录相关开发 3-路由的搭建 4-品牌管理 4.1-品牌列表 4.2-新增/修改品牌 4.3-删除品牌名称 1-项目模板 前端的后台管理系统我们采用github上有的成熟项目作为模板来开发; 简洁版:GitHu…

【CocosCreator入门】CocosCreator组件 | ScrollView(滚动视图)组件

Cocos Creator 是一款流行的游戏开发引擎,具有丰富的组件和工具,其中的ScrollView组件是一种用于实现滚动视图效果的重要组件。它可以让我们在游戏中实现各种滚动视图效果,例如列表、地图等。 目录 一、组件介绍 二、组件属性 三、详细说明…

java+mysql crm客户关系管理系统的设计与实现

在众多网站开发技术中,JSP支持现在绝大多数操作平台,它在代码执行效率、代码可移植性及组建的应用上均优越于其他动态网页技术。因此,本文研究了基于JSP技术的系统动态网站。根据JSP的原理按照网站时机原则以及步骤,对动态网站的定义了目标、分析了网站功能需求,进行了结构…

windows 10 下安装配置mysql8.0 (保姆级教程)

文章目录 一、MySQL 8.0的基本信息二、MySQL 8.0的系统要求三、MySQL 8.0的安装步骤3.1. 下载MySQL 8.03.2. 运行MySQL安装文件3.3. 选择安装类型3.4. 配置MySQL Server3.5 mysql shell 的使用 四、总结 一、MySQL 8.0的基本信息 MySQL是一种开放源代码的关系型数据库管理系统…

2023Java高频面试题,jvm虚拟机体系结构,收藏必看!

1. 前言 最近很多小伙伴在找工作. 在面试中, 面试官经常问到的一个面试题是 : 请说出Jvm虚拟机体系结构? 小伙伴们, 一般会说堆, 栈.....然后面试官问, 那还知道其他的吗, 然后小伙伴们就语塞了....... 面试后来问千锋健哥, 所以健哥在这里为大家来讲讲这个Jvm虚拟机体系结…

【一起啃书】《机器学习》第三章 线性模型

第三章 线性模型 3.1 基本形式 给定由 d d d个属性描述的示例 x ( x 1 ; x 2 ; . . . ; x d ) {\bf{x}} ({x_1};{x_2};...;{x_d}) x(x1​;x2​;...;xd​),其中 x i x_i xi​是 x \bf{x} x在第 i i i个属性上的取值,线性模型试图学得一个通过属性的线性…

瀚高股份吕新杰:创新开源双驱动,躬耕国产数据库

作者 | 伍杏玲 近年来,国际形势不断变幻,也给人们带来巨大警示:关键核心技术是买不来、讨不来的,中国科技企业需寻找研发自强之路。 瀚高基础软件股份有限公司(简称瀚高股份)专注数据库十八年,始…