Zookeeper服务

一、什么是Zookeeper

        Zookeeper 是一个分布式应用程序的协调服务,它提供了一个高性能的分布式配置管理、分布式锁服务和分布式协调服务。它是 Apache 软件基金会的一个项目,被设计用来处理大规模的分布式系统中的一些关键问题。

Zookeeper的组成员关系:

二、Zookeeper重要特性和功能

  1. 分布式配置管理:Zookeeper 允许开发人员存储和管理应用程序的配置信息,这些配置信息可以在分布式环境中共享和同步。

  2. 命名服务:Zookeeper 提供了一个层次化的命名空间,开发人员可以利用这个命名空间来注册、查找和管理分布式系统中的各种资源。

  3. 分布式锁:Zookeeper 提供了分布式锁服务,允许开发人员在分布式系统中实现诸如互斥访问共享资源等同步机制。

  4. 分布式队列:Zookeeper 提供了一些原语,使得开发人员可以基于 Zookeeper 实现分布式队列,用于协调和通信。

  5. 集群管理:Zookeeper 本身就是一个高可用、高可靠的分布式系统,可以用于监控和管理集群中的节点状态和健康状况。

  6. Watch 机制:Zookeeper 提供了 Watch 机制,允许客户端在节点状态发生变化时得到通知,从而可以实现事件驱动的编程模型。

  7. 原子性操作:Zookeeper 提供了一些原语,如创建、删除节点等操作都是原子性的,保证了分布式系统的一致性。

  8. 高性能:Zookeeper 的设计目标之一是提供高性能的服务,它采用了一些优化手段,如内存中数据的存储和快速的数据同步算法,以提供低延迟和高吞吐量。

三、Zookeeper运行机制

  1. 集群模式:ZooKeeper 以集群的形式运行。一个 ZooKeeper 集群通常由多个服务器节点组成,这些节点分布在不同的机器上,它们通过网络进行通信和协作。

  2. Leader-Follower 架构:ZooKeeper 集群中的服务器节点采用 Leader-Follower 架构。在集群启动时,会选举出一个节点作为 Leader,其他节点则成为 Followers。Leader 负责处理客户端的写操作,并将更新操作复制给 Followers,而 Followers 则负责处理客户端的读操作。

  3. 数据存储:ZooKeeper 使用内存数据库来存储数据,并将数据持久化到磁盘上的事务日志中,以确保数据的持久性和一致性。数据存储在树状的命名空间中,每个节点称为 ZNode。

  4. 原子性操作:ZooKeeper 提供了一系列原子性的操作,如创建节点、删除节点、读取节点、更新节点等。这些操作要么全部成功,要么全部失败,从而确保了数据的一致性。

  5. Watch 机制:ZooKeeper 提供了 Watch 机制,允许客户端注册 Watcher 来监视节点状态的变化。当节点状态发生变化时,ZooKeeper 会通知客户端,从而实现了事件驱动的编程模型。

  6. 客户端与服务器交互:客户端与 ZooKeeper 服务器之间通过 TCP 连接进行通信。客户端可以向任意一个 ZooKeeper 服务器发送请求,该服务器将请求转发给 Leader,Leader 处理请求后将结果返回给客户端。

  7. 快速的数据同步算法:ZooKeeper 使用了一种快速的数据同步算法,使得数据在集群中的复制和同步非常迅速,从而保证了系统的高性能和可用性。

四、Zookeeper操作细节

4.1、Zookeeper服务的操作

  1. 连接到 ZooKeeper 服务:在使用 ZooKeeper 之前,首先需要建立与 ZooKeeper 服务的连接。这可以通过 ZooKeeper 客户端库提供的连接函数来实现。连接函数通常包括 ZooKeeper 服务器的主机名和端口号等参数。

  2. 创建节点:可以使用 ZooKeeper 提供的 create() 函数来创建一个新的节点(ZNode)。在创建节点时,可以指定节点的路径、数据和节点类型等参数。

  3. 读取节点:可以使用 ZooKeeper 提供的 getData() 函数来读取指定节点的数据。通过这个函数可以获取节点的数据内容以及节点的元数据信息。

  4. 更新节点:可以使用 ZooKeeper 提供的 setData() 函数来更新指定节点的数据。通过这个函数可以修改节点的数据内容,同时还可以指定版本号来实现乐观并发控制。

  5. 删除节点:可以使用 ZooKeeper 提供的 delete() 函数来删除指定节点。删除节点时,可以选择是否递归删除其所有子节点。

  6. 检查节点是否存在:可以使用 ZooKeeper 提供的 exists() 函数来检查指定节点是否存在。通过这个函数可以判断节点是否存在以及节点的元数据信息。

  7. 获取子节点列表:可以使用 ZooKeeper 提供的 getChildren() 函数来获取指定节点的子节点列表。通过这个函数可以遍历和查看节点的子节点。

  8. 监听节点变化:可以使用 ZooKeeper 提供的 Watch 机制来监听指定节点的状态变化。通过注册 Watcher,客户端可以在节点状态发生变化时得到通知。

  9. 释放连接:在使用完 ZooKeeper 服务后,需要调用 ZooKeeper 客户端库提供的关闭函数来释放与 ZooKeeper 服务的连接。

4.2、Zookeeper服务一致性

        ZooKeeper 通过实现强一致性来保证数据的一致性。这意味着在任何给定时间点,所有连接到 ZooKeeper 的客户端都会看到相同的数据视图。以下是 ZooKeeper 服务一致性的几个关键点:

  1. 原子性操作:ZooKeeper 提供了一系列原子性的操作,如创建节点、删除节点、更新节点等。这些操作要么全部成功,要么全部失败,从而确保了数据更新的原子性。

  2. 顺序一致性:ZooKeeper 提供了顺序一致性的保证,即对于每个更新操作,都可以按照相同的顺序被所有客户端观察到。这意味着在 ZooKeeper 中,操作的执行顺序是确定的,不会出现数据的乱序问题。简要来说就是:来自任意特定客户端的更新都会按其发送顺序被提交。也就是说,如果一个客户端将znodez的值更新为a,在之后的操作中,它又将z的值更新为b,则没有客
    户端能够在看到z的值是b之后再看到值a(如果没有其他对z的更新)。

  3. 单一系统映像:一个客户端无论连接到哪一台服务器,它看到的都是同样的系统视图。这意味着,如果一个客户端在同一个会话中连接到一台新的服务器,它所看到的系统状态不会比在之前服务器上所看到的更老。当一台服务器出现故障,导致它的一个客户端需要尝试连接集合体中其他的服务器时,所有状态滞后于故障服务器的服务器都不会接受该连接请求,除非这些服务器将状态更新至故障服务器的水平。

  4. 持久性:ZooKeeper 使用事务日志来持久化数据更新操作。所有的写操作都会先写入事务日志,然后再应用到内存数据库中。通过这种方式,即使节点故障或重启,数据也不会丢失。

  5. 多数派原则:ZooKeeper 集群中的写操作必须得到大多数节点的确认才算成功。这种多数派原则保证了数据的一致性和可靠性,即使集群中的部分节点出现故障,仍然能够保证数据的一致性。

  6. 及时性:任何客户端所看到的滞后系统视图都是有限的,不会超过几十秒。这意味着与其允许一个客户端看到非常陈旧的数据,还不如将服务器关闭,强迫该客户端连接到一个状态较新的服务器。

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

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

相关文章

【C语言】——结构体

【C语言】——结构体 一、结构体类型的声明1.1、结构体的声明1.2、结构体变量的创建和初始化1.3、结构体的特殊声明1.4、结构体的自引用1.5、结构体的重命名 二、 结构体的内存对齐2.1、对齐规则2.2、结构体对齐实践2.3、为什么存在内存对齐2.4、修改默认对齐数 三、结构体传参…

VS Code 保存+格式化代码

在 VSCode 中,使用 Ctrl S 快捷键直接保存并格式化代码: 打开 VSCode 的设置界面:File -> Preferences -> Settings在设置界面搜索框中输入“format on save”,勾选“Editor: Format On Save”选项,表示在保存…

《Mask2Former》算法详解

文章地址:《Masked-attention Mask Transformer for Universal Image Segmentation》 代码地址:https://github.com/facebookresearch/Mask2Former 文章为发表在CVPR2022的一篇文章。从名字可以看出文章像提出一个可以统一处理各种分割任务(…

C++ | Date 日期类详解

目录 简介 日期类总代码 | Date 类的定义 & 构造 & Print 类的定义 构造函数 & Print 比较类&#xff0c;如<、>、<...... 值加减类&#xff0c;如、-、、-...... 加减类具体分类 判断某个月有多少天 GetMonthDay 日期类 / &#xff08;- / -&…

随便聊一下 显控科技 控制屏 通过 RS485 接口 上位机 通讯 说明

系统搭建&#xff1a; 1、自己研发的一个小系统&#xff08;采集信号&#xff0c;将采集的信号数字化&#xff09;通过COM口&#xff0c;连接显控屏 COM3 口采用 485 协议送到显控屏&#xff08;显控科技&#xff09;的显示屏展示出来&#xff09;。 2、显控屏 将 展示的数据…

Jenkins(超详细的Docker安装Jenkins教程!!!)

Jenkins Jenkins&#xff0c;原名 Hudson&#xff0c;2011 年改为现在的名字。它是一个开源的实现持续集成的软件工具。 官方网站&#xff1a;https://www.jenkins.io/ 中文文档&#xff1a;https://www.jenkins.io/zh/ 为什么需要Jenkins&#xff1f; 我们以前写完代码&a…

Excel中怎样把单元格里的数据拆分成多行?

时常会遇到这种情况&#xff0c;需要将一个单元格里的数据分拆到多行&#xff0c;可以使用公式&#xff0c;这里演示使用基础操作的办法。 按照excel使用经验&#xff0c;可以复制数据&#xff0c;粘贴到MS Word里&#xff0c;这个是excel的同族软件&#xff0c;兼容性好。 在…

Redis的面试

认识Redis 认识NoSQL SQL&#xff08;关系型数据库&#xff09; NoSQL&#xff08;非关系型数据库&#xff09; 1.结构化 非结构化 2.关联的 非关联的 3.SQL查询 非SQL 4.事务 …

[C++基础学习-07]----C++结构体详解

前言 结构体&#xff08;Struct&#xff09;是C中一种用户定义的复合数据类型&#xff0c;用于存储不同类型的数据项。结构体可以包含不同类型的数据成员&#xff0c;这些数据成员可以是基本类型&#xff08;如int、float、char等&#xff09;&#xff0c;也可以是数组、指针、…

【SSM进阶学习系列丨分页篇】PageHelper 分页插件导入集成实践

文章目录 一、说明什么是分页PageHelper介绍 二、导入依赖三、集成Spring框架中四、编写Service五、编写Controller六、编写queryAllByPage页面展示数据 一、说明 什么是分页 ​ 针对分页&#xff0c;使用的是PageHelper分页插件&#xff0c;版本使用的是5.1.8 。 ​ 参考文档…

第十三届蓝桥杯国赛真题 Java C 组【原卷】

文章目录 发现宝藏试题 A: 斐波那契与 7试题 B: 小蓝做实验试题 C: 取模试题 D: 内存空间试题 E \mathrm{E} E : 斐波那契数组试题 F: 最大公约数试题 G: 交通信号试题 I: 打折试题 J: 宝石收集 发现宝藏 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#x…

为什么 IP 地址通常以 192.168 开头?(精简版)

网络通讯的本质就是收发数据包。如果说收发数据包就跟收发快递一样。IP地址就类似于快递上填的收件地址和发件地址一样&#xff0c;路由器就充当快递员的角色&#xff0c;在这个纷繁复杂的网络世界里找到该由谁来接收这个数据包&#xff0c;所以说&#xff1a;IP地址就像快递里…

AG32 MCU在触摸屏的应用(AGM FPGA/MCU行业应用)

传统的屏驱MCU常见应用于洗衣机、空调、空调面板、仪器仪表等人机交互界面显示场景中&#xff0c;通常是以段码的形式显示设备运转的时间、温度、测量结果等简单运行数据&#xff0c;随着人机交互需求丰富化&#xff0c;智能家居设备、摩托车、电动车等产品也逐步增加了屏幕显示…

2024年第六届先进材料、机械和制造国际会议(AMMM 2024)即将召开!

2024年第六届先进材料、机械和制造国际会议&#xff08;AMMM 2024&#xff09;将于2024年9月6-8日在日本东京举行。AMMM 2024将以国际材料&#xff0c;机械和制造为主题&#xff0c;吸引到来自多个领域的研究人员和学者相聚在一起分享知识&#xff0c;讨论想法&#xff0c;并了…

Android 音视频播放器 Demo(一)—— 视频解码与渲染

本篇作为 Android 音视频实战系列的第二篇文章&#xff0c;主要介绍视频解码与渲染过程。本系列文章目录如下&#xff1a; Android 音视频基础知识 Android 音视频播放器 Demo&#xff08;一&#xff09;—— 视频解码与渲染 Android 音视频播放器 Demo&#xff08;二&#xff…

字符函数与字符串函数(2)

遇见她如春水映莲花 字符函数与字符串函数&#xff08;2&#xff09; 前言一、strcatstrncat 二、strcmpstrncmp在这里插入图片描述 三、strstr四、strtok五、strerror总结 前言 根据上期字符函数与字符串函数我们可以了解到字符函数与个别字符串函数的用法&#xff0c; 那么接…

STM32——GPIO篇

技术笔记&#xff01; 1. 什么是GPIO&#xff1f; GPIO是通用输入输出端口&#xff08;General-purpose input/output&#xff09;的英文简写&#xff0c;是所有的微控制器必不可少的外设之一&#xff0c;可以由STM32直接驱动从而实现与外部设备通信、控制以及采集和捕获的功…

当管道运算符遇上无限可能:探索数据流的奇妙之旅

文章目录 序言目的进程间通信的理解进程间通信的发展历史管道创建验证管道的大小管道的4种情况管道的5种特征 序言 通过该命令计算了在当前路径下一共有多少个文件夹的任务 进程虽然有独立性,但是进程并不孤僻,他们之间也会相互进行协作共同完成一件事 这个前提是他们之间的信…

嵌入式全栈开发学习笔记---C语言笔试复习大全7(编程题1~8)

目录 1、200&#xff5e;300之间能被3整除的数&#xff0c;5个一行输出&#xff1b; 2、求两个数的最大公约数、最小公倍数&#xff1b; 3、输入十个数&#xff0c;求出平均值&#xff1b; 4、通过编程实现,统计1~n有多少个9&#xff1b; 5、有1、2、3、4个数字&#xff0…

C#简单创建DLL文件并调用

DLL是Dynamic Link Library的缩写&#xff0c;意为动态链接库。动态链接库其实是由编译器将一系列相关的类型编译、链接并封装成一个独立的文件&#xff0c;与对其进行调用的程序分开。这样一个独立的文件相当于程序的一个模块&#xff0c;如果需要对程序进行更新&#xff0c;只…