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、修改默认对齐数 三、结构体传参…

GPU、DPU、苹果M1芯片的晶体管数量收集汇总(不断更新)

马斯克说 第一性原理可以用一个系统最底层的物理学方程去计算它可以出现的所有现象,所以也称为从头计算法,拉丁文是ab intio; 与之相对的,是不去探究一个系统最底层的物理学规律,而是在现象层面总结一些规律&#xff0…

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…

富格林:揭秘暗箱避免欺诈套路

富格林指出&#xff0c;黄金投资在投资市场上扮演着重要的角色&#xff0c;在任何时期总有人在投资黄金。在投资市场中&#xff0c;据小编所知有不少投资者曾经遭遇过欺诈的经历&#xff0c;而这其中一个重要的原因是投资者落入暗箱陷阱中&#xff0c;所以富格林给大家总结了以…

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

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

代码随想录算法训练营第三十八天| 509. 斐波那契数,70. 爬楼梯 , 746. 使用最小花费爬楼梯

509. 递归经典入门&#xff0c;不难。需要注意在初始化dp数组的时候注意的是new int[n 1], 不是n. 因为下标从0开始所以在遍历的时候要等n再停止&#xff0c;最后返回dp的最后一个值就可以。 class Solution {public int fib(int n) {if (n < 1) return n; in…

Redis的面试

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

matlab绘制热点图

在MATLAB中&#xff0c;通常使用imagesc、pcolor、heatmap&#xff08;需要Statistics and Machine Learning Toolbox&#xff09;等函数来绘制热点图&#xff08;也称为热力图&#xff09;。热点图通常用于可视化矩阵数据&#xff0c;其中每个单元格的颜色表示矩阵中相应元素的…

sql注入手注语句

?id100 union select 1,database(),3-- asd ​ ?id100 union select 1,table_name,3 from information_schema.tables where table_schemasecurity limit 0,1-- asd ?id100 union select 1,group_concat(table_name),3 from information_schema.tables where table_schemada…

Element-UI库:Web前端开发的强大助力

Element-UI库&#xff1a;Web前端开发的强大助力 一、引言二、Element-UI概述三、Element-UI的使用场景四、Element-UI的最佳实践五、Element-UI的未来发展趋势六、Element-UI的进阶应用七、Element-UI的性能优化八、结语使用Element-UI框架的代码示例示例1&#xff1a;基本按钮…

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

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

逃逸分析、栈上分配、标量替换大展神威

一、逃逸分析 1.逃逸分析的目的是判断对象的作用域是否会逃逸出方法体&#xff08;方法逃逸&#xff09;或者外部线程&#xff08;线程逃逸&#xff09;。 2.注意&#xff0c;任何可以在多个线程之间共享的对象&#xff0c;一定都属于逃逸对象。 3.若重写了一个类的finalize方法…

海洋数字孪生技术

信息技术智能化高速发展&#xff0c;海洋信息体系建设经历以数字化为目标的初期发展阶段后&#xff0c;其智慧化发展&#xff0c;形成从数据&#xff0c;到知识&#xff0c;到预测&#xff0c;再到最优决策的海洋发展模式&#xff0c;即“智慧海洋”&#xff0c;成为了海洋信息…

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

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

Java基础(14)UDP、TCP

UDP&#xff08;用户数据报协议&#xff09;和TCP&#xff08;传输控制协议&#xff09;是互联网协议套件&#xff08;TCP/IP&#xff09;的两个核心协议&#xff0c;用于数据的传输。这两个协议在功能上是相互补充的&#xff0c;分别适用于不同的网络应用场景。 TCP&#xff…

创建和激活python虚拟环境(venv), 以及在vscode上运行python虚拟环境

最近使用python做项目&#xff0c;发现佬们都是在用python的虚拟环境来放项目。发现确实有一些优势在这之中&#xff0c; 首先就是隔离性&#xff0c;我们将每个项目放入相对应的环境配置&#xff0c;可以有效避免乱七八糟的库出现在解释器中。其次就是可移植性强&#xff0c;…