说一说Zookeeper的应用场景及其原理

一 ZooKeeper简介
ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。

二 Zookeeper 主要解决什么问题
在分布式多节点组成的集群环境中,所面临的三个常见的挑战。
第一种:集群管理。为了保证集群的高可用,每个节点都会创建一个数据副本,那么在这种情况下,要保证客户端访问集群中任意一个节点都要是最新的数据;
第二种:分布式锁,对于分布式系统来说,如何去保证共享资源的并发安全性,也是一个比较大的挑战,为了达到这样一个目的,我们必须使用一个跨进程的锁,也就是分布式锁来实现。
第三种:Master选举,在多个节点的集群中,为了去降低集群数据同步的复杂度,一般会将节点设置成两个角色,分别是Master和Slave。Master一般是负责数据的读写等事务性操作,而Slave只负责数据的读操作,如何去确定某个节点是 Master 还是 Salve,也是一件比较复杂的工作。
Zookeeper 的出现,主要是为了满足分布式环境中,以上三种常见的场景的需求。作为一个分布式的中间件而存在,它相当于一个分布式的开源的协调组件,协调和解决分布式系统中的各类问题。

三 Zookeeper分布式协调的基本原理
在这里插入图片描述
Zookeeper的基本原理是通过维护一份类似文件系统的树状数据结构(Znode树),并提供监听这些数据变化的机制,来实现分布式系统的协调。它提供了一种 CP 模型,来保证集群中的每个节点的数据一致性,当然Zookeeper的本身的集群并不是强一致性的,而是一个顺序一致性的一个模型,如果我们需要去保证CP特性的话,我们需要 调用“sync”同步方法来进行同步。

四 Zookeeper分布式锁基本原理

在我们进行单机应用开发,涉及并发同步的时候,我们往往采用synchronized或者Lock的方式来解决多线程间的代码同步问题,这时多线程的运行都是在同一个JVM之下,没有任何问题。但当我们的应用是分布式集群工作的情况下,属于多JVM下的工作环境,跨JVM之间已经无法通过多线程的锁解决同步问题。那么就需要一种更加高级的锁机制,来处理种跨机器的进程之间的数据同步问题——这就是分布式锁。
Zookeeper分布式锁的基本原理主要基于其提供的临时有序节点(Ephemeral Sequential Nodes)和Watch机制来实现。以下是详细的基本原理:

★临时节点:在Zookeeper中,临时节点是在客户端会话期间创建的。一旦客户端与Zookeeper服务器的会话结束(如客户端崩溃、断开连接等),这些临时节点会被自动删除。这一特性确保了如果持有锁的客户端出现问题,锁能够被自动释放,避免了死锁的发生。
★有序节点:每次在相同父节点下创建临时节点时,Zookeeper都会为这些节点添加一个自增的数字作为后缀,以保证节点的有序性。这种有序性使得节点可以按照创建的顺序进行排序。

★在Spring cloud 中可以用curator框架实现分布式锁,见下:
在Curator中有五种锁方案:
InterProcessSemaphoreMutex:分布式排它锁(非可重入锁)
InterProcessMutex:分布式可重入排它锁
InterProcessReadWriteLock:分布式读写锁
InterProcessMultiLock:将多个锁作为单个实体管理的容器
InterProcessSemaphoreV2:共享信号量

五 、 Master选举原理

ZooKeeper的Master选举原理主要基于其提供的节点特性和集群中的投票机制,具体原理如下:

1、选举机制概述
ZooKeeper集群中的每个服务器(节点)都有可能成为Master(也称为Leader),但集群在任何给定时间点只能有一个Master,以确保数据的一致性和服务的稳定性。当集群中的某个节点想要成为Master时,它会通过特定的机制进行选举。

2、基于节点的选举方式
ZooKeeper提供了两种基于节点的选举方式:

★基于临时节点的选举:
所有参与选举的节点会尝试在ZooKeeper中创建一个具有唯一名称的临时节点,如/master-election。
由于ZooKeeper保证同一层级下节点名称的唯一性,因此只有一个节点能够成功创建该临时节点。
成功创建临时节点的节点即被选为Master。
如果Master节点出现故障(如宕机),它创建的临时节点会自动从ZooKeeper中删除,其他节点通过注册Watcher监听该节点的变化,并在监听到变化后重新尝试创建临时节点,从而触发新一轮的选举。
★基于临时有序节点的选举:
所有参与选举的节点在同一父节点下(如/master-election)创建临时有序节点。
ZooKeeper会给这些节点分配一个全局递增的编号,如/master-election/lock-00000001、/master-election/lock-00000002等。
编号最小的节点成为Master。
其他节点会监听编号比自己小的节点的变化。如果Master节点宕机,它创建的临时有序节点会被删除,监听该节点的下一个节点会收到通知,并检查自己是否成为新的编号最小的节点,如果是,则成为新的Master。
3、集群投票与ZAB协议
ZooKeeper的选举机制还依赖于ZAB(ZooKeeper Atomic Broadcast)协议,该协议保证了集群中数据的一致性。在选举过程中,每个节点会进行投票,投票基于过半数原则:

一个节点想要成为Master时,会向其他节点发送一个提议,并等待超过一半的节点同意这个提议。
如果超过一半的节点同意,那么这个节点就会成为Master;否则,它会被否决并继续等待下一次选举。
投票时,节点会考虑其他节点的最新事务ID(zxid)和服务器ID。zxid是一个逻辑时钟,用于标识数据更新的顺序,确保新选出的Master具有最新的数据状态。如果两个节点的zxid相同,则服务器ID更大的节点会获得优先权。

4、选举的公平性和高效性
公平性:通过临时有序节点的编号分配和集群投票机制,确保了选举的公平性,即请求创建节点的顺序与选举结果的顺序基本一致。
高效性:通过Watcher机制和节点编号的有序性,减少了不必要的选举竞争和网络通信开销,提高了选举的效率。
综上所述,ZooKeeper的Master选举原理是一个复杂但高效的过程,它充分利用了ZooKeeper的节点特性和集群中的投票机制,确保了分布式环境下Master节点的选举和切换的高效性和一致性。
目前主流的kfaka,HBase、hadoop 都是用Zookeeper 来实现集群节点的主从选择。

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

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

相关文章

K8S - Access Control 机制介绍

作为开发人员, 我们通常会直接用root 帐号操作 k8s master node 里的kubectl 命令,并不能感知k8s 多用户权限管理存在。 即使自动化, 我们也会考虑用ansible 来远程操作master node… 所以大部分开发人员默认上是不用深入研究k8s的Access c…

基于AlexNet实现猫狗大战

卷积神经网络介绍 卷积神经网络(Convolutional Neural Network,简称CNN),是一种深度学习模型,特别适用于处理图像、视频等数据。它的核心思想是利用卷积层(Convolutional layers)来提取输入数据…

[C语言]连子棋游戏

文章目录 一、前言二、游戏思路三、游戏方法1、初始化2、判断胜利3、交互4、电脑下棋 四、核心方法说明1、初始化游戏2、销毁棋盘3、显示游戏4、电脑下棋5、用户下棋6、判断游戏状态7、游戏交互 五、游戏效果展示与源码分享1、游戏效果2、源代码 一、前言 对于指针和数组理解尚…

关于std::swap原理

swap 操作交换两个相同类型容器的内容。调用swap之后&#xff0c;两个容器中的元素将会 交换&#xff1a; vector<striong> svec1(10); //10个元素的vector vector<string> svec2(24); //24个元素的vector swap(svec1,svec2); 调…

C++ | Leetcode C++题解之第413题等差数列划分

题目&#xff1a; 题解&#xff1a; class Solution { public:int numberOfArithmeticSlices(vector<int>& nums) {int n nums.size();if (n 1) {return 0;}int d nums[0] - nums[1], t 0;int ans 0;// 因为等差数列的长度至少为 3&#xff0c;所以可以从 i2 开…

一款免费开源且功能强大的思维导图软件-思绪思维导图

思绪思维导图是一款免费开源的思维导图软件&#xff0c;旨在帮助用户有效地组织和表达思想。它提供了丰富的功能&#xff0c;包括支持富文本、图片、图标、超链接、备注、标签等内容&#xff0c;以及关联线、概要等特性。 思绪思维导图下载&#xff1a;https://pan.quark.cn/s…

在STM32工程中使用Mavlink与飞控通信

本文讲述如何在STM32工程中使用Mavlink协议与飞控通信&#xff0c;特别适合自制飞控外设模块的项目。 需求来源&#xff1a; 1、增稳云台里的STM32单片机需要通过串口接收飞控传来的云台俯仰、横滚控制指令和相机拍照控制指令&#xff1b; 2、自制的有害气体采集器需要接收飞…

基于Springboot的医疗健康助手开题报告

文未可获取一份本项目的java源码和数据库参考。 一&#xff0e;选题意义, 研究现状,可行性分析 选题意义&#xff1a;随着科技的高速发展&#xff0c;人们的生活水平也正在稳步提高&#xff0c;解决温饱问题以后&#xff0c;广大人民群众也越来越注重自己的身体健康&#xff0…

[Redis][前置知识][下][高并发架构演进]详细讲解

目录 1.单机架构2.应⽤数据分离架构3.应⽤服务集群架构4.读写分离/主从分离架构5.引⼊缓存⸺冷热分离架构6.垂直分库/分表7.业务拆分⸺微服务8.总结 1.单机架构 只有一台服务器&#xff0c;这个服务器负责所有的工作 大部分公司的产品&#xff0c;都是这种单机架构 2.应⽤数…

自己建网站怎么建

自己建立一个网站可能听起来有点复杂&#xff0c;但实际上&#xff0c;有很多简单且免费的方法可以实现。下面将介绍一些基本步骤&#xff0c;帮助你开始自己建立一个网站。 首先&#xff0c;你需要明确你的网站目的是什么。是个人博客、商业网站&#xff0c;还是其他类型的网…

frp内网穿透功能使用教程

frp 是一款高性能的反向代理应用&#xff0c;专注于内网穿透。它支持多种协议&#xff0c;包括 TCP、UDP、HTTP、HTTPS 等&#xff0c;并且具备 P2P 通信功能。使用 frp&#xff0c;您可以安全、便捷地将内网服务暴露到公网&#xff0c;通过拥有公网 IP 的节点进行中转。 文档地…

深度学习----------------------文本预处理

目录 文本预处理读取数据集词源化词表该部分总代码该部分总代码 整合所有功能该部分总代码 文本预处理 文本预处理&#xff1a;把文本当作一个时序序列 将解析文本的常见预处理步骤。 这些步骤通常包括&#xff1a; ①将文本作为字符串加载到内存中。 ②将字符串拆分为词元&…

【数据结构篇】~链表算法题3(环形链表)

链表算法题3&#xff08;环形链表&#xff09; 环形链表的证明1. 环形链表I​1) 思路2&#xff09;代码实现 2. 环形链表II​1) 思路11) 思路22&#xff09;代码实现 环形链表的证明 1. 环形链表I​ https://leetcode.cn/problems/linked-list-cycle/description/ 1) 思路 判断…

Nginx搭建直播服务器,并用rtmp,http-flv,hls三种模式拉流观看直播的流程

一、首先搭建直播服务器 环境widows&#xff0c;并且已经集成了 &#xff1a;nginx-http-flv-module模块 nginx.conf配置如下&#xff1a; worker_processes 1;#error_log logs/error.log; #error_log logs/error.log notice; #error_log logs/error.log info; #error…

计算机人工智能前沿进展-大语言模型方向-2024-09-15

计算机人工智能前沿进展-大语言模型方向-2024-09-15 1. Towards the holistic design of alloys with large language models Z Pei, J Yin, J Neugebauer, A Jain - Nature Reviews Materials, 2024 利用大型语言模型实现合金的全面设计 摘要 文章讨论了大型语言模型在材料…

nginx服务器安装和部署代理

文章目录 Linux下面安装nginx nginx下载官网: [nginx: download](https://nginx.org/en/download.html) 使用yum命令安装gcc环境 yum install -y wget gcc-c pcre-devel zlib-devel openssl-devel//安装多个环境 wget gcc pcre-devel 支持正则表达式 zlib-devel提供了压缩和…

CleanClip vs 传统剪贴板:究竟谁更胜一筹?

在日常工作和生活中,复制粘贴可以说是我们使用最频繁的操作之一。传统的剪贴板功能虽然简单易用,但在功能性和效率上还有很大的提升空间。今天,我们就来比较一下新兴的剪贴板增强工具CleanClip与传统剪贴板,看看到底谁更胜一筹。 1. 剪贴历史管理 传统剪贴板只能存储最后一次…

Java项目实战II基于Java+Spring Boot+MySQL的图书管理系统的设计与实现 (源码+数据库+文档)

目录 一、前言 二、技术介绍 三、系统实现 四、论文参考 五、核心代码 六、源码获取 全栈码农以及毕业设计实战开发&#xff0c;CSDN平台Java领域新星创作者&#xff0c;专注于大学生项目实战开发、讲解和毕业答疑辅导。获取源码联系方式请查看文末 一、前言 在信息爆炸…

【图虫创意-注册安全分析报告-无验证方式导致安全隐患】

前言 由于网站注册入口容易被黑客攻击&#xff0c;存在如下安全问题&#xff1a; 1. 暴力破解密码&#xff0c;造成用户信息泄露 2. 短信盗刷的安全问题&#xff0c;影响业务及导致用户投诉 3. 带来经济损失&#xff0c;尤其是后付费客户&#xff0c;风险巨大&#xff0c;造…

用来用去还是用回了ueditor-Vue富文本编辑器二次扩展

用来用去还是用回了ueditor-Vue富文本编辑器二次扩展。我们使用用过UEditor、TinyMCE、CKEditor、wangEditor、Tiptap、Quill项目经历过多次富文本的编辑器的选型使用&#xff0c;发现现在新的富文本编辑总感觉还是没达到我们的要求&#xff0c;果然改回了ueditor。 UEditor 是…