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

分布式协调系统 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 负载均衡的效果,让每一台服务器的压力都不会那么大。

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

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

相关文章

【C++期末编程题题库】代码+详解18道

适合期末复习c看,或者刚入门c的小白看,有的题会补充知识点,期末复习题的代码一般比较简单,所以语法上没那么严谨。本文所有题目要求全在代码块的最上面。 目录 1、设计复数类 2、设计Computer类 3、实现相加的函数模板 4、圆类…

基于Java SSM框架实现新闻推送系统项目【项目源码】计算机毕业设计

基于java的SSM框架实现新闻推送系统演示 SSM框架 当今流行的“SSM组合框架”是Spring SpringMVC MyBatis的缩写,受到很多的追捧,“组合SSM框架”是强强联手、各司其职、协调互补的团队精神。web项目的框架,通常更简单的数据源。Spring属于…

Python 快速合并PDF表格转换输出CSV文件

单位的刷脸考勤机后台系统做得比较差,只能导出每个部门的出勤统计表pdf,格式如下: 近期领导要看所有部门的考勤数据,于是动手快速写了个合并pdf并输出csv文件的脚本。 安装模块 pypdf2,pdfplumber,前者用…

年底了,准备跳槽的可以看看...

前两天跟朋友感慨,今年的铜九铁十、裁员、疫情导致好多人都没拿到offer!现在已经1月了,具体明年的金三银四只剩下两个月。 对于想跳槽的职场人来说,绝对要从现在开始做准备了。这时候,很多高薪技术岗、管理岗的缺口和市场需求也出…

企业该如何选择好的跨境数据传输平台

跨境数据传输平台是一种可以帮助企业在不同国家和地区之间安全传输数据的工具。它可以通过对数据进行加密、脱敏、压缩等处理,确保数据在传输过程中的安全性和完整性。同时,它还可以根据不同的合规要求,对数据进行分类、分级、备份等处理&…

Prometheus实战篇:Prometheus监控redis

准备环境 docker-compose安装redis docker-compose.yaml version: 3 services:redis:image:redis:5container_name: rediscommand: redis-server --requirepass 123456 --maxmemory 512mbrestart: alwaysvolumes:- /data/redis/data: /dataport:- "6379:6379"dock…

数据结构之各大排序(C语言版)

我们这里话不多说,排序重要性大家都很清楚,所以我们直接开始。 我们就按照这张图来一一实现吧! 一.直接插入排序与希尔排序. 这个是我之前写过的内容了,大家可以通过链接去看看详细内容。 算法之插入排序及希尔排序&#xff08…

Spring中的工厂类

目录 1.ApplicationContext 4.2.BeanFactory 1.ApplicationContext ApplicationContext的实现类,如下图: ClassPathXmlApplicationContext:加载类路径下 Spring 的配置文件 FileSystemXmlApplicationContext:加载本地磁盘下 S…

安徽2024考试公告一览表!有需要的速收藏

考公群体,越来越多! 考研减少的很多学生转来考公,24年国考人数突破291万,较23年增长约40万 考试难度,逐年增大,逐年创新! 结束的24国考,江浙省考,学生普遍反映难度增大&a…

[C#]使用OpenCvSharp实现二维码图像增强超分辨率

【官方框架地址】 github.com/shimat/opencvsharp 【算法介绍】 借助于opencv自带sr.prototxt和sr.caffemodel实现对二维码图像增强 【效果展示】 【实现部分代码】 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin…

代码随想录-刷题第四十七天

139. 单词拆分 题目链接:139. 单词拆分 思路:本题可以使用记忆化回溯,不再过多介绍,主要讲解完全背包方法。 单词就是物品,字符串s就是背包,单词能否组成字符串s,就是问物品能不能把背包装满。…

VSCode编辑器下载与安装

1、下载 官网下载地址: 打开下载地址,如下图,根据自己的平台选择相应版本下载(本文只针对Windows系统的安装,所以下载Windows版的)。 点击会自动下载,下载完成文件如下图: 2、安装…

python入门,list列表详解

目录 1.list的定义 2.index查找某元素的下标 3.修改 ​编辑 4.插入 ​编辑 5.追加元素 1.append,追加到尾部 2.extend,追加一批元素 ​编辑 6.删除元素 1.del 列表[下标] 2.列表.pop(下标) 3.列表.remove(元素) 7.清空列表 8.统计某一元素在列表内的数量 9.计算…

计算机组成原理 控制器

控制器 #mermaid-svg-cDexVavlf0QIZRSF {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-cDexVavlf0QIZRSF .error-icon{fill:#552222;}#mermaid-svg-cDexVavlf0QIZRSF .error-text{fill:#552222;stroke:#552222;}#me…

iOS苹果和Android安卓测试APP应用程序的差异

Hello大家好呀,我是咕噜铁蛋!我们经常需要关注移动应用程序的测试和优化,以提供更好的用户体验。在移动应用开发领域,iOS和Android是两个主要的操作系统平台。本文铁蛋讲给各位小伙伴们详细介绍在App测试中iOS和Android的差异&…

设计模式之装饰者模式【结构型模式】

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档> 学习的最大理由是想摆脱平庸,早一天就多一份人生的精彩;迟一天就多一天平庸的困扰。各位小伙伴,如果您: 想系统/深入学习某…

Linux内存管理:(五)反向映射RMAP

文章说明: Linux内核版本:5.0 架构:ARM64 参考资料及图片来源:《奔跑吧Linux内核》 Linux 5.0内核源码注释仓库地址: zhangzihengya/LinuxSourceCode_v5.0_study (github.com) 1. 前置知识:page数据结…

【unity】基于Obi的绳/杆蓝图、绳杆区别及其创建方法

绳索 是通过使用距离和弯曲约束将粒子连接起来而形成的。由于规则粒子没有方向(只有位置),因此无法模拟扭转效应(维基百科),绳子也无法保持其静止形状。然而,与杆不同的是,绳索可以被撕裂/劈开,并且可以在运行时改变其…

LeetCode(36)有效的数独 ⭐⭐

请你判断一个 9 x 9 的数独是否有效。只需要 根据以下规则 ,验证已经填入的数字是否有效即可。 数字 1-9 在每一行只能出现一次。数字 1-9 在每一列只能出现一次。数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。(请参考示例图) 注…

微商城怎么弄才能开通呢?

​微商城的开通,对于许多商家来说,是进入移动电商领域的重要一步。它不仅能帮助你扩大销售渠道,还能让你更好地管理和服务你的客户。那么,微商城怎么弄才能开通呢? 1、注册微信公众号:首先,你需…