zookeepr 简介

简介:

  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

架构:

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

iptables和firewalld防火墙

安全技术和防火墙概述 安全技术 入侵检测系统(Intrusion Detection Systems):特点是不阻断任何网络访问,量化、定位来自内外网络的威胁情况,主要以提供报警和事后监督为主,提供有针对性的指导措施和安全决…

Java核心技术 卷1-总结-16

Java核心技术 卷1-总结-16 线程属性线程优先级守护线程未捕获异常处理器 同步竞争条件的一个例子竞争条件详解锁对象 线程属性 线程的各种属性包括:线程优先级、守护线程、线程组以及处理未捕获异常的处理器。 线程优先级 在Java程序设计语言中,每一个…

OpenGL入门教程之 纹理

引言 我们已经了解到,我们可以为每个顶点添加颜色来增加图形的细节,从而创建出有趣的图像。但是,如果想让图形看起来更真实,我们就必须有足够多的顶点,从而指定足够多的颜色。这将会产生很多额外开销,因为每…

ChatGPT国内可用版-国内chatGPT哪个软件好用

国内chatGPT哪个软件最好用 国内对接ChatGPT软件,让智能的对话变得更加简单便捷!ChatGPT是由OpenAI公司开发的最新一代自然语言处理技术,为聊天机器人赋予了更加真实、流畅、智能的语言表达能力。 我们是国内一家专注于人工智能和自然语言处…

旧版VS安装 Visual Studio 2019/2017/2015官方安装教程

安装VisualStudio找不到官方版本?只能找到第三方?害怕中毒? 不要急,本文例举了VS 2019 2017 2015的官方位置,不用但心装成第三方Visual Studio 百度搜索 Visual Studio 2017,只有第三方的包,而…

大孔树脂型号,A-722,ADS500,ADS600,ADS750,ADS800

一、产品介绍 基于吸附功能的聚苯乙烯特种树脂 Tulsimer ADS-600 是一款没有离子官能基的,由交联聚苯乙烯合成的功能强大的吸附型树脂。 Tulsimer ADS-600 主要应用于水溶液中吸附酚及其化合物,氯代烃等含氯物质,表面活性剂&#xff0…

Three——二、加强对三维空间的认识

Three——二、加强对三维空间的认识 接上个例子我们接着往下看 辅助观察坐标系 THREE.AxesHelper()的参数表示坐标系坐标轴线段尺寸大小,你可以根据需要改变尺寸。 使用方法: // AxesHelper:辅助观察的坐标系 const axesHelper new THRE…

java的社区养老服务系统 ssm空巢老人

创新点: 1、根据时间、类型统计用户下单记录,形成可视化图形(饼状图) 2、根据用户爱好推荐项目 包含模块:关于我们、联系我们、外链信息、资讯类型、服务资讯、服务类型、服务项目、案例类型、服务案例、讨论类型、讨论…

【数据库】— 2NF、3NF、BCNF、最小函数依赖集例题

判断范式级别 设有关系模式W(C,P,S,G,T,R),其中各属性的含义是:C课程,P教师,S学生,G成绩,T时间,R教室,根据定义有如下数据依赖集 D{ C→P,(S,C)→G,(T,R)→C&…

2023.04.23 学习周报

文章目录 摘要文献阅读1.题目2.摘要3.介绍4.模型4.1 研究区域4.2 自相关分析4.3 LSTM 5.实验与讨论5.1 高架道路不同位置空气污染物的变化5.2 高架道路不同位置空气污染物的相关性5.3 高架道路不同位置空气污染物预测 6.结论7.展望 度规张量1.曲率2.度量张量3.代码实现4.平行四…

【go】三色标记-垃圾回收机制

垃圾回收原因 : 垃圾回收是一种内存管理技术,它的主要目的是自动管理程序中的内存分配和释放,以减少内存泄漏和野指针等问题 赋值器与回收器: 赋值器(Mutator)是指程序中的执行部分,负责创建…

LinkedBlockingQueue原理

1. 基本的入队出队 public class LinkedBlockingQueue<E> extends AbstractQueue<E>implements BlockingQueue<E>, java.io.Serializable {static class Node<E> {E item;/*** 下列三种情况之一* - 真正的后继节点* - 自己, 发生在出队时* - null, 表…

Django框架之创建项目、应用并配置数据库

django3.0框架创建项目、应用并配置数据库 创建项目 进入命令行 新建一个全英文的目录 进入目录 输入命令 django-admin startproject project 项目目录层级 查看当前目录层级 tree /f 目录文件说明 创建数据库 做一个学生管理系统做演示&#xff0c;使用navicat创建数据…

windows中vscode配置C/C++环境

首先要把MinGW的环境安装完&#xff0c;我一般是下载带有MinGW的codeblocks&#xff0c;这样省去自己安装MinGW。因为安装MinGW还挺麻烦的。 安装完codeblocks&#xff0c;找到其安装目录&#xff0c;把bin文件配置到环境变量去&#xff1a; 将bin添加到环境变量 然后打开vsco…

[读书笔记] 从问题和公式角度理解 Diffusion Model

[小全读书笔记] 从问题和公式角度理解 Diffusion Model 1. Diffusion Model的结构1.1 定义与限制1.2 定义与限制的数学体现 2. Diffusion Model的模型训练2.1 似然函数转换成ELBO2.2 拆解ELBO2.3 求解关键&#xff1a; q ( x t − 1 ∣ x t , x 0 ) q(x_{t-1}|x_t,x_0) q(xt−1…

【c语言】函数的数据传递原理 | 数组传入函数方法

创作不易&#xff0c;本篇文章如果帮助到了你&#xff0c;还请点赞支持一下♡>&#x16966;<)!! 主页专栏有更多知识&#xff0c;如有疑问欢迎大家指正讨论&#xff0c;共同进步&#xff01; 给大家跳段街舞感谢支持&#xff01;ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ…

ChatGPT实现语义分析情感分类

语义分析情感分类 我们从开源社区找到了中科院谭松波博士整理的携程网酒店评论数据集(https://raw.githubusercontent.com/SophonPlus/ChineseNlpCorpus/master/datasets/ChnSentiCorp_htl_all/ChnSentiCorp_htl_all.csv)。一共七千余条数据&#xff0c;包括 label 和 review …

5G基站外市电改造建设方案 (ppt可编辑)

本资料来源公开网络&#xff0c;仅供个人学习&#xff0c;请勿商用&#xff0c;如有侵权请联系删除 外市电定义及分类 定义&#xff1a;由供电部门提供的专用高压电源或非专用高压电源或低压电源均称为市电。分类&#xff1a; &#xff08;1&#xff09;按电压等级分类 ①提供…

Linux Shell 实现一键部署http+用户名密码登录

Apache 前言 Apache(音译为阿帕奇)是世界使用排名第一的Web服务器软件。它可以运行在几乎所有广泛使用的计算机平台上&#xff0c;由于其跨平台和安全性被广泛使用&#xff0c;是最流行的Web服务器端软件之一。它快速、可靠并且可通过简单的API扩充&#xff0c;将Perl/Python等…

西交大-一百本书-解决不能粘贴的限制

快毕业了&#xff0c;要填四个一百&#xff0c;其他三个都几分钟就填完了。只有读一百本书要写读书笔记且不能粘贴&#xff0c;防谁呢真是的。发现一种解决不能粘贴限制的方法。顺道附上利用ChatGpt快速生成书评的方法。 四个一百网址 一、 解除粘贴限制 以edge浏览器为例 登…