【大数据】分布式协调系统 Zookeeper

news2024/9/23 4:26:08

分布式协调系统 Zookeeper

  • 1.Zookeeper 的特点
  • 2.Zookeeper 的数据结构
  • 3.Zookeeper 的应用场景
    • 3.1 统一命名服务
    • 3.2 统一配置管理
    • 3.3 统一集群管理
    • 3.4 服务器动态上下线
    • 3.5 软负载均衡

Zookeeper 是 Apache 开源的一个顶级项目,目的是为分布式应用提供协调服务,当然 Zookeeper 本身也是分布式的。

而从设计模式的角度来理解:Zookeeper 是一个基于观察者模式设计的 分布式服务管理框架,它负责存储和管理大家都关心的数据,然后接收观察者的注册。一旦数据的状态发生变化,Zookeeper 就会通知那些已经注册的观察者,以便它们能够及时做出反应。

在这里插入图片描述
所以 Zookeeper 可以看作是一个 文件系统 + 通知机制。文件系统指的是 Zookeeper 可以存储数据,尽管数据量比较少,但还是像文件一样可以存储的;而通知机制指的是当数据有变化,会立即通知观察者。

1.Zookeeper 的特点

那么 Zookeeper 都有哪些特点呢?

  • 1️⃣ Zookeeper 本身也是分布式的,可以组成集群。Zookeeper 集群由一个领导者节点(Leader)和多个追随者节点(Follower)组成,Leader 负责接收写请求,Follower 负责和 Leader 之间进行数据同步并接收读请求。
  • 2️⃣ 集群中只要有半数以上的节点存活,Zookeeper 集群就能正常服务,所以集群内部的节点数量最好是奇数个。
  • 3️⃣ Zookeeper 是 CP 模型,在一致性(Consistency)和可用性(Availability)之间选择了一致性,因此集群里面的数据是全局一致的,每个 Server 都保存了一份相同的数据副本。客户端无论连接到哪一个 Server,数据都是一致的。这也意味着 Leader 只有将新数据同步给所有的 Follower 之后,整个 Zookeeper 集群才能对外提供服务,否则客户端就有可能读到旧数据。因为根据 CAP 理论,在保证 P(Partition tolerance)的前提下,C 和 A 是不可兼顾的,至于选择哪一个则看是否对数据有强一致性的要求。而 Zookeeper 存储的数据一般都不大,所以选择了一致性。
  • 4️⃣ 写请求顺序进行,来自同一个 Client 的写请求按其发送顺序依次执行。
  • 5️⃣ 实时性,Client 可以很快地读到最新数据。虽然 Leader 和 Follower 之间的数据同步需要一定时间,但 Zookeeper 保存的数据量很小,因此同步速度非常快。

2.Zookeeper 的数据结构

Zookeeper 数据结构和 UNIX 文件系统很类似,整体上可以看做是一棵树,节点被称为 ZNode。每个 ZNode 默认能够存储 1MB 的数据,因为 Zookeeper 是 CP 模型,所以它不适合存储大量的数据,只适合存储一些简单的配置信息。此外,每个节点都可以通过路径进行唯一标识,我们通过 ZNode 的路径即可获取某个 ZNode 存储的数据。

在这里插入图片描述
整体还是很好理解的,但是要明白,ZNode 能够存储的数据量比较少,不应该超过 1MB。

3.Zookeeper 的应用场景

Zookeeper 在生产上都能解决哪些问题呢?其实能解决的问题还蛮多的,比如 统一命名服务统一配置管理统一集群管理服务器节点动态上下线软负载均衡 等等。下面一个一个介绍。

3.1 统一命名服务

在分布式环境下,经常需要对应用/服务进行统一命名,便于识别。例如:IP 不容易记住,但是域名容易记住。
在这里插入图片描述
当访问域名的时候,会自动转发到某个服务器当中。

3.2 统一配置管理

分布式环境下,配置文件同步非常常见。一个集群中,所有节点的配置信息是一致的,对配置文件修改之后,希望能够快速同步到各个节点上。比如 Kafka 集群,当然 Kafka 自带 Zookeeper,但是我们一般不用自带的。
在这里插入图片描述
配置管理可交由 Zookeeper 实现,可将配置信息写入 Zookeeper 的一个 ZNode,各个客户端监听这个 ZNode。一旦 ZNode 中的数据被修改,Zookeeper 将通知各个客户端,这样一来每个客户端读到的配置信息都是一致的。

3.3 统一集群管理

分布式环境中,实时掌握每个节点的状态是必要的,这样便可根据节点的实时状态做出一些调整。

而 Zookeeper 可以实现实时监控节点的变化,通过将节点信息写入 Zookeeper 的一个 ZNode,监听这个 ZNode 便可获取它的实时状态变化。

此外每一个客户端的状态也可以写到节点上面,只要状态发生变化,就会更新节点上客户端的数据。只要数据发生更新,会立刻同步到其他的节点上,从而通知其他的客户端。

3.4 服务器动态上下线

客户端能实时洞察到服务器上线的情况,还是最开始说的,如果某台服务器宕机,比如 Server3。那么客户端就会被 Zookeeper 通知,之后就不会再请求 Server3 了。

当然这只是宕机的情况,如果 Server3 修好了重新上线,那么 Zookeeper 也要通知客户端。客户端会再次重新注册监听,之后仍然可以访问 Server3。

3.5 软负载均衡

在 Zookeeper 中记录每台服务器的访问数,让访问数最少的服务器去处理最新的客户端请求。
在这里插入图片描述
当新的客户端来访问的时候,会自动分发到访问次数比较少的服务器上。也就是类似 Nginx 负载均衡的效果,让每一台服务器的压力都不会那么大。

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

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

相关文章

910b上跑Chatglm3-6b进行流式输出【pytorch框架】

文章目录 准备阶段避坑阶段添加代码结果展示 准备阶段 配套软件包Ascend-cann-toolkit和Ascend-cann-nnae适配昇腾的Pytorch适配昇腾的Torchvision Adapter下载ChatGLM3代码下载chatglm3-6b模型,或在modelscope里下载 避坑阶段 每个人的服务器都不一样&#xff0…

01-连接池项目背景:C++的数据库操作

从0开始学习C与数据库的联动 1.原始方式-使用MySQL Connector/C 提供的API查询 1.1 数据库预操作 我的本地电脑上有mysql数据库,里面预先创建了一个database名叫chat,用户名root,密码password。 1.2 Visual Studio预操作 在Windows上使用…

分析一个项目(微信小程序篇)一

分析一个项目讲究的是如何进行对项目的解析分解,进一步了解项目的整体结构,熟悉项目的结构,能够知道每个组件所处在哪个位置,发挥什么作用。 本次所介绍的是微信小程序项目(甑选商场): 其首页…

深度解析HubSpot数据分析:洞察未来商业趋势

在当今数字化的商业环境中,数据是推动决策和业务增长的关键。作为业内领先的CRM平台,HubSpot不仅为企业提供了高效的客户关系管理工具,同时也成为了数据分析的利器。 1. HubSpot数据分析的核心价值 1.1 洞察客户行为和趋势 HubSpot数据分析…

【SkyWant.[2304]】路由器操作系统,移动【Netkeeper】使用教程校园网

目录 步骤一:正确连接网线,插电开机正确连接网线: 认识系统灯: 插电开机: 步骤二:开机之后,系统的基本设置 1.进入设置界面: 2.设置辅助热点wifi: 3.设置日常…

domain adapation

假设测试资料和训练资料分布不一样, 训练为黑白数字,测试为彩色数字时,识别率很低 称之为 Domain shift Domain adaptation : 可以看做 transfer 的一种 输出分布也有可能不一样 target domain 有部分数据,但是无标签 分布也不…

css中的变量和辅助函数

变量 --name 两个破折号加变量名称(可以在当前的选择器内定义)var(--*) 命名规则 body {--深蓝: #369;background-color: var(--深蓝); } 变量值只能做用属性值,不能用做属性名。变量命名不能包含 $,[,^,(,% 等字符 普通字符局限在只要是数…

如何快速编写高效的测试用例? -5个建议让你的测试更准确、更全面

逛知乎的时候,经常看到无论是刚入职场的新人,还是工作了一段时间的老人,都会对编写测试用例感到困扰?例如: 固然,编写一份好的测试用例需要:充分的需求分析能力理论及经验加持。 但这并不意味着…

【每日论文阅读】Do Perceptually Aligned Gradients Imply Robustness?

近似人眼梯度 https://icml.cc/virtual/2023/oral/25482 对抗性鲁棒分类器具有非鲁棒模型所没有的特征——感知对齐梯度(PAG)。它们相对于输入的梯度与人类的感知非常一致。一些研究已将 PAG 确定为稳健训练的副产品,但没有一篇研究将其视为…

windows同时安装mysql5.0和8.0步骤(完美测试)

mysql5.0和mysql8.0配置如下 1.把如下配置复制下替换到my.ini中 mysql5.0配置如下 [mysqld] # 设置3306端口 port3306 # 设置mysql的安装目录 basedirF:\mysql-5.7.38 # 设置mysql数据库的数据的存放目录 datadirF:\mysql-5.7.38\data # 允许最大连接数 max_connections200 #…

串口乱码原因

开发板上外部时钟的晶振与代码中的外部时钟的晶振不一致,使用cubemx配置时钟时要格外注意,选好芯片之后再看外部晶振是啥,不然随便设置可能乱码 重写fputc函数之后,需要自己手动勾选下面选项

【Linux系统编程二十七】:线程的互斥与同步(互斥锁的使用与应用)

【Linux系统编程二十七】:线程的互斥与同步(互斥锁的使用与应用) 一.问题:数据不一致(混乱/不安全)1.多线程并发计算不安全2.将数据加载到寄存器的本质 二.解决方法--互斥锁三.互斥锁的概念与接口1.定义锁2.加锁/解锁 四.互斥锁实现原理与应用1.原理&…

AArch64 Exception Model学习

提示 该博客主要为个人学习,通过阅读官网手册整理而来(个人觉得阅读官网的英文文档非常有助于理解各个IP特性)。若有不对之处请参考参考文档,以官网文档为准。 1 Privilege and Exception Levels 1.1 为什么要划分权限&#xf…

swaggerUI不好用,试试这个openapiUI?

title: swaggerUI不好用,试试这个openapiUI? date: 2024-01-08 categories: [tool] tags: [openapi,工具] description: 基于swaggger2, openapi3规范的UI文档 1.背景 由于长期使用 swaggerUI 工具,它的轻量风格个人觉得还是不错的,但是它…

npm v10.2.4 is known not to run on Node.js v14.16.1.

报错: ERROR: npm v10.2.1 is known not to run on Node.js v10.24.1. This version of npm supports the following node versions: ^18.17.0 || >20.5.0. You can find the latest version at https://nodejs.org/. 这种情况降级npm,降不了&…

目标检测-One Stage-YOLOv6

文章目录 前言一、YOLOv6的网络结构和流程二、YOLOv6的创新点总结 前言 YOLOv6 是美团视觉智能部研发的一款目标检测框架,致力于工业应用。论文题目是《YOLOv6: A Single-Stage Object Detection Framework for Industrial Applications》。 和YOLOv4、YOLOv5等不…

Linux——firewalld防火墙(一)

一、Linux防火墙基础 Linux 的防火墙体系主要工作在网络层.针对TCP/P数据包实时过滤和限制.属于典型的包过滤防火墙(或称为网络层防火墙)。Linux系统的防火墙体系基于内核编码实现.具有非常稳定的性能和高效率,也因此获得广泛的应用.在CentOS 7系统中几种…

虾皮如何查看自己的店铺

在虾皮(Shopee)平台上查看自己的店铺是非常重要的,因为它可以帮助您了解店铺的运营情况、管理商品和处理客户服务等。下面是在虾皮平台上查看店铺的步骤: 先给大家推荐一款shopee知虾数据运营工具知虾免费体验地址(复制…

【leetcode 447. 回旋镖的数量】审慎思考与推倒重来

447. 回旋镖的数量 题目描述 给定平面上 **n **对 互不相同 的点 points ,其中 points[i] [xi, yi] 。回旋镖 是由点 (i, j, k) 表示的元组 ,其中 i 和 j 之间的距离和 i 和 k 之间的欧式距离相等(需要考虑元组的顺序)。 返回平…

remote-ssh如何离线下载历史版本

remote-ssh离线下载任意历史版本方法,简单有效 很多小伙伴都会遇到这样的问题,由于内网服务器中安装的vs code版本较低,比如1.62.0版本,官网发布的version history 只展示最新的五个版本,还是太高了,导致下…