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

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

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

相关文章

IO进程线程 day4

进程状态间的转化 创建出三个进程完成两个文件之间拷贝工作&#xff0c;子进程1拷贝前一半内容&#xff0c;子进程2拷贝后一半内容&#xff0c;父进程回收子进程的资源 #include <head.h> int main(int argc, const char *argv[]) {FILE *fp1NULL,*fp2NULL;//定义两个文…

【Java基础篇】常见的字符编码、以及它们的区别

常见的字符编码、以及它们的区别 ✔️ 解析✔️扩展知识仓✔️Unicode和UTF-8有啥关系?✔️有了UTF-8&#xff0c;为什么要出现GBK✔️为什么会出现乱码 ✔️ 解析 就像电报只能发出 ”滴” 和 ”答” 声一样&#xff0c;计算机只认识 0 和 1 两种字符&#xff0c;但是&#x…

【驱动序列】C#获取电脑硬件基本组合以及基础信息

大家好&#xff0c;我是全栈小5&#xff0c;欢迎阅读《小5讲堂之知识点实践序列》文章。 这是2024年第7篇文章&#xff0c;此篇文章是C#知识点实践序列文章&#xff0c;博主能力有限&#xff0c;理解水平有限&#xff0c;若有不对之处望指正&#xff01; 要开发一款驱动小助手&…

vue封装基础input组件(添加防抖功能)

先看一下效果&#xff1a; // 调用页面 <template><div><!-- v-model&#xff1a;伪双向绑定 --><my-input v-model"inputVal" label"姓名" type"textarea" /></div> </template><script> import…

第3章 【例题】(完整版)

目录 前言 【例3.1】有关成绩结构体的例子 【例3.2】使用Score类的完整程序 【例 3.3】一个存在错误的程序 【例3.4】用对象赋值语句的例子 【例3.5】为类Score定义一个构造函数 【例3.6】建立对象的同时&#xff0c;用构造函数给数据成员赋初值 【例3.7】用成员初始…

【Spark精讲】Spark on Hive性能优化

目录 第一章 1.1 集群配置概述 1.2 集群规划概述 第二章 Yarn配置 2.1 Yarn配置说明 yarn.nodemanager.resource.memory-mb yarn.nodemanager.resource.cpu-vcores yarn.scheduler.maximum-allocation-mb yarn.scheduler.minimum-allocation-mb 第三章 Spark的配置说…

Vue3中配置env环境变量

什么时候会用到这个呢&#xff0c;比如我们的后端开发有多名&#xff0c;很多时候需要切换调用不同人的接口地址&#xff0c;或者在打包的时候&#xff0c;需要指定环境中的后台接口地址&#xff0c;那么我们频繁修改代码&#xff0c;就很麻烦&#xff0c;这个时候&#xff0c;…

burpsuite模块介绍之项目选项

使用该模块中的功能实现对token的爆破 靶场搭建:phpstudy的安装与靶场搭建 - junlin623 - 博客园 (cnblogs.com) 实现 1)先抓个包 2)设置宏 要实现我们爆破的时候请求的token也跟靶场一样一次一换从而实现爆破,那就需要用到项目选项中的宏(预编译功能)

MathType2024MAC苹果电脑版本下载安装图文教程

在数学和科学的世界里&#xff0c;表达精确的方程式和化学公式是至关重要的。MathType作为一款及其优秀且有全球影响力的数学公式编辑器&#xff0c;让这一切变得触手可及。MathType Mac版已全新升级&#xff0c;作为Microsoft Word和PowerPoint的Add-In插件&#xff0c;为您的…

Js的String的replace(和replaceAll(

EcmaJavascriptJs的String的 replace( 和 replaceAll( 方法 String.prototype.replaceString.prototype.replaceAll 相同点 都是String.prototype的函数都是用于字符串替换都是两个参数第一个参数都可以是正则或字符串第二参数都可以是字符串或者回调函数, 回调会传入一个参…

如何选择合适的语音呼叫中心?

市场上不同的语音呼叫中心提供商&#xff0c;都有其独特的优势和不足。企业在选择语音呼叫中心服务公司时&#xff0c;主要考虑以下因素&#xff1a;服务质量、价格、技术支持、客户支持等。 首先&#xff0c;服务质量是选择语音呼叫中心需关注的最重要因素之一。 为确保语音…

大数据StarRocks(四) :常用命令

这次主要介绍生产工作中Starrocks时的常用命令 4.1 连接StarRocks 4.1.1 Linux命令行连接 [roothadoop1011 fe]# yum install mysql -y [roothadoop1011 fe]# mysql -h hadoop101 -uroot -P9030 -p4.1.2 Windows客户端 DBeaver 连接 4.2 常用命令 4.2.1 查看状态 1. 查看f…

linux安装nodejs

一&#xff0c;yum安装 yum -y install nodejs 二&#xff0c;下载安装包安装 官网下载地址&#xff1a;Download | Node.js 建议安装低版本的&#xff0c;安装高版本的会有很多依赖&#xff0c;处理起来非常麻烦&#xff0c;还浪费时间 [rootmaster1 local]# wget https://…

全解析阿里云Alibaba Cloud Linux镜像操作系统

Alibaba Cloud Linux是基于龙蜥社区OpenAnolis龙蜥操作系统Anolis OS的阿里云发行版&#xff0c;针对阿里云服务器ECS做了大量深度优化&#xff0c;Alibaba Cloud Linux由阿里云官方免费提供长期支持和维护LTS&#xff0c;Alibaba Cloud Linux完全兼容CentOS/RHEL生态和操作方式…

conda环境下Could not create share link解决方法

1 问题描述 在运行chatglm-6B项目时&#xff0c;运行python web_demo.py&#xff0c;出现如下错误&#xff1a; (chatglm) [rootlocalhost ChatGLM2-6B]# python web_demo.py Loading checkpoint shards: 100%|██████████████████████████████…

SwiftUI之深入解析如何创建一个灵活的选择器

一、前言 在 Dribbble 上找到的设计的 SwiftUI 实现时&#xff0c;可以尝试通过一些酷炫的筛选器扩展该项目以缩小结果列表。筛选视图将由两个独立的筛选选项组成&#xff0c;两者都有一些可选项可供选择。但是&#xff0c;在使用 UIKit 时&#xff0c;总是将这种类型的视图实…

RK3568 学习笔记 : ubuntu 20.04 下 Linux-SDK 镜像烧写

前言 开发板&#xff1a;【正点原子】ATK-DLRK3568 开发板&#xff0c;编译完 Linux-SDK 后&#xff0c;生成了相关的镜像文件&#xff0c;本篇记录一下 镜像烧写&#xff0c;当前编译环境在 VMware 虚拟机中&#xff0c;虚拟机系统是 ubuntu 20.04 此次烧写还算顺利&#xff…

Callback Hook

一、Callback Hook 函数名&#xff1a;useCallback 用于得到一个固定引用值的函数&#xff0c;通常用它进行性能优化。 useCallback: 该函数只需要传入两个参数&#xff1a;一个回调函数和一个依赖数组即可。 1.函数&#xff0c;useCallback会固定该函数的引用&#xff0c;…

搜索二维矩阵 II(LeetCode 240)

1.问题描述 编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性&#xff1a; 每行的元素从左到右升序排列。每列的元素从上到下升序排列。 示例&#xff1a; 输入&#xff1a;matrix [[1,4,7,11,15],[2,5,8,12,19],[3,6,9,16,22],[10…

快速、准确地检测和分类病毒序列分析工具 ViralCC的介绍和详细使用方法,fudai shiyong ijaoben

介绍 viralcc是一个基因组病毒分析工具&#xff0c;可以用于快速、准确地检测和分类病毒序列。 github&#xff1a;dyxstat/ViralCC: ViralCC: leveraging metagenomic proximity-ligation to retrieve complete viral genomes (github.com) Instruction of reproducing resul…