zookeeper高级应用原理

文章目录

  • 分布式锁
    • 分布式锁-读写锁
    • 分布式锁-Curator实现
    • ZK集群管理
  • zookeeper 集群
    • zookeeper 集群节点个数配置
    • zookeeper 选举
    • ZAB协议
    • zookeeper 选举
    • zookeeper 集群数据读写

分布式锁

  • 分布式锁:在分布式环境下,保护跨进程、跨主机、跨网络的共享资源,实现互斥访问,保证一致性;在zk中,锁就是一个数据节点
  • 普通实现:注册临时节点,谁注册成功谁获取锁,其他监听该节点的删除事件,一旦被删除,通知其他客户端,再次重复该流程;此为最简单的实现,但容易引发羊群效应。这种情况下,大量客户端在短时间内对 ZooKeeper 服务器发起请求,可能超出了服务器的处理能力,导致延迟增加、响应时间变长,甚至导致服务不可用。
  • “羊群效应”(Herd Effect)是指当大量客户端同时对某一事件或资源发起请求时,这些请求会出现在相对较短的时间内集中到服务器上,从而导致服务器过载或性能下降的现象。在ZooKeeper中,这种效应可能会导致严重的性能问题,甚至使整个系统崩溃。

在这里插入图片描述

  1. 所有服务要获取锁时都去zookeeper中注册一个临时顺序节点,并将基本信息写入临时节点
  2. 所有服务获取节点列表并判断自己的节点是否是最小的那个,谁最小谁就获取了锁
  3. 未获取锁的客户端添加对前一个节点删除事件的监听
  4. 锁释放/持有锁的客户端宕机 后,节点被删除
  5. 下一个节点的客户端收到通知,重复上述流程

分布式锁-读写锁

  • 共享锁:读锁。如果事务T1对数据对象O1加上共享锁,那么当前事务只能对O1进行读取操作,其他事务也只能对这个数据对象加共享锁,直到该数据对象上的所有共享锁都被释放
  • 排它锁:写锁或独占锁。如果事务T1对数据对象O1加上了排他锁,那么在整个加锁期间,只允许事务T1对O1进行读取或更新操作,其他任务事务都不能对这个数据对象进行任何操作,直到T1释放排他锁
    在这里插入图片描述
    可以将临时有序节点分为读锁节点和写锁节点
  1. 对于读锁节点而言,只关心前一个写锁节点的释放。如果前一个写锁释放了,则多个读锁节点对应的线程可以并发地读取数据
  2. 对于写锁节点而言,只关心前一个节点的释放,而不需要关心前一个节点是写锁节点还是读锁节点。因为为了保证有序性,写操作必须要等待前面的读操作或者写操作执行完成。

分布式锁-Curator实现

在这里插入图片描述
➢InterProcessMutex:分布式可重入排它锁(可重入可以借助LocalMap存计数器)
➢InterProcessSemaphoreMutex:分布式排它锁
➢InterProcessMultiLock:将多个锁作为单个实体管理的容器
➢InterProcessReadWriteLock:分布式读写锁

ZK集群管理

在这里插入图片描述

  • 配置管理:指集群中的机器拥有某些配置,并且这些配置信息需要动态地改变,那么我们就可以使用发布订阅模式把配置做统一的管理,让这些机器订阅配置信息的改变,但是配置改变时这些机器得到通知并更新自己的配置。
  • 服务注册,服务发现:指对集群中的服务上下线做统一管理,每个工作服务器都可以作为数据的发布方,向集群注册自己的基本信息,而让某些监控服务器作为订阅方,订阅工作服务器的基本信息。当工作服务器的基本信息改变时,如服务上下线、服务器的角色或服务范围变更,那么监控服务器可以得到通知并响应这些变化

zookeeper 集群

zookeeper 集群节点个数配置

  • 为什么zookeeper节点推荐配奇数?
  1. 容错率:需要保证集群能够有半数进行投票
    • 2台服务器,至少2台正常运行才行(2的半数为1,半数以上最少为2),正常运行1台服务器都不允许挂掉,但是相对于单节点服务器,2台服务器还有两个单点故障,所以直接排除了。
    • 3台服务器,至少2台正常运行才行(3的半数为1.5,半数以上最少为2),正常运行可以允许1台服务器挂掉
    • 4台服务器,至少3台正常运行才行(4的半数为2,半数以上最少为3),正常运行可以允许1台服务器挂掉
    • 5台服务器,至少3台正常运行才行(5的半数为2.5,半数以上最少为3),正常运行可以允许2台服务器挂掉
  2. 防脑裂:脑裂集群的脑裂通常是发生在节点之间通信不可达的情况下,集群会分裂成不同的小集群,小集群各自选出自己的leader节
    点,导致原有的集群出现多个leader节点的情况,这就是脑裂
    • 3台服务器,投票选举半数为1.5,一台服务裂开,和另外两台服务器无法通行,这时候2台服务器的集群(2票大于半数1.5票),所以可以选举出leader,而 1 台服务器的集群无法选举。
    • 4台服务器,投票选举半数为2,可以分成 1,3两个集群或者2,2两个集群,对于 1,3集群,3集群可以选举;对于2,2集群,则不能选择,造成没有leader节点。
    • 5台服务器,投票选举半数为2.5,可以分成1,4两个集群,或者2,3两集群,这两个集群分别都只能选举一个集群,满足zookeeper集群搭建数目。

zookeeper 选举

  • Paxos算法是基于消息传递且具有高度容错特性的一致性算法,其解决的问题是在分布式系统中如何就某个值(决议)达成一致,paxos是一个分布式选举算法
  • 该算法的三种角色
    ➢ Proposer:提案(决议)发起者
    ➢ Acceptor:提案接收者,可同意或不同意
    ➢ Learners:虽然不同意提案,但也只能被动接收学习;或者是后来的,只能被动接受提案遵循少数服从多数的原则,过半原则。
    在这里插入图片描述

ZAB协议

  • ZooKeeper使用的是ZAB协议作为数据一致性的算法, ZAB(ZooKeeper Atomic Broadcast ) 全称为:原子消息广播协议。在Paxos算法基础上进行了扩展改造而来的,ZAB协议设计了支持原子广播、崩溃恢复,ZAB协议保证Leader广播的变更序列被顺序的处理。
    四种状态,其中三种跟选举有关,选举时也是半数以上通过才算通过
    ➢ LOOKING:系统刚启动时或者Leader崩溃后正处于选举状态
    ➢ FOLLOWING:Follower节点所处的状态,同步leader状态,参与投票
    ➢ LEADING:Leader所处状态
    ➢ OBSERVING,观察状态,同步leader状态,不参与投票

zookeeper 选举

在这里插入图片描述

zookeeper 集群数据读写

  • 读请求:当Client向zookeeper发出读请求时,无论是Leader还是Follower,都直接返回查询结果

在这里插入图片描述

  • 写请求->leader

    • Client向Leader发出写请求,Leader将数据写入到本节点,并将数据发送到所有的Follower节点,等待Follower节点返回,当Leader接收到一半以上节点(包含自己)返回写成功的信息之后,返回写入成功消息给client。
      在这里插入图片描述
  • 写请求->follwer

    • Client向Follower发出写请求,Follower节点将请求转发给Leader,Leader将数据写入到本节点,并将数据发送到所有的Follower节点,等待Follower节点返回,当Leader接收到一半以上节点(包含自己)返回写成功的信息之后,返回写入成功消息给原来的Follower,原来的Follower返回写入成功消息给Client。
      在这里插入图片描述

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

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

相关文章

Day57力扣打卡

打卡记录 最小体力消耗路径 链接 Dijkstra 将Dijkstra算法从计算最短路径转化为计算路径最大差值。 class Solution:def minimumEffortPath(self, heights: List[List[int]]) -> int:n, m len(heights), len(heights[0])dist [0] [0x3f3f3f3f] * (n * m - 1)vis set…

iPhone 数据恢复:iMyFone D-Back iOS

iMyFone D-Back iOS 最佳 iPhone 数据恢复,最好的 iPhone 数据恢复软件,恢复成功率最高。 直接从iOS设备、iTunes/iCloud/第三方程序备份快速恢复数据。 有选择地恢复已删除的照片、WhatsApp、消息和 18 多种其他数据类型。 仅通过 iCloud 帐户访问即可从…

【组合数学】递推关系

目录 1. 递推关系建立2. 常系数齐次递推关系的求解3. 常系数非齐次递推关系的求解4. 迭代法 1. 递推关系建立 给定一个数的序列 f ( 0 ) , f ( 1 ) , . . . , f ( n ) , . . . , f (0), f(1), ..., f(n ),... , f(0),f(1),...,f(n),..., 若存在整数 n 0 n_0 n0​ &#xff…

启动jar包命令

一、Windows环境 找到jar包的位置; 按shift键,点击鼠标右键,选中在此处打开PowerShell窗口; 此时进入命令行工具 输入java -jar .\java_web-0.0.1-SNAPSHOT.jar(注意空格)。 二、Linux环境 2.1 方式一 …

【二者区别】cuda和cudatoolkit

Pytorch 使用不同版本的 cuda 由于课题的原因,笔者主要通过 Pytorch 框架进行深度学习相关的学习和实验。在运行和学习网络上的 Pytorch 应用代码的过程中,不少项目会标注作者在运行和实验时所使用的 Pytorch 和 cuda 版本信息。由于 Pytorch 和 cuda 版…

【JVM从入门到实战】(二)字节码文件的组成

一、Java虚拟机的组成 二、字节码文件的组成 字节码文件的组成 – 应用场景 字节码文件的组成部分-Magic魔数 什么是魔数? Java字节码文件中的魔数 文件是无法通过文件扩展名来确定文件类型的,文件扩展名可以随意修改,不影响文件的内容。…

用23种设计模式打造一个cocos creator的游戏框架----(十三)模板方法模式

1、模式标准 模式名称:模板方法模式 模式分类:行为型 模式意图:定义一个操作中的算法骨架,而将一些步骤延迟到子类中。Template Method 使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。 结构图&#xff1a…

【ArcGIS Pro微课1000例】0053:基于SQL Server创建与启用地理数据库

之前的文章有讲述基于SQL Server创建企业级地理数据库,本文讲述在SQL Server中创建常规的关心数据库,然后在ArcGIS Pro中将其启用,转换为企业级地理数据库。 1. 在SQL Server中创建数据库** 打开SQL Server 2019,连接到数据库服务器。 展开数据库连接,在数据库上右键→新…

使用Android Studio的Gradle Tasks对源码生成jar包

一. 前言 As工具可以用来编译第三方源码(比如okhttp ,retrofit源码), 用于打jar包或aar包,使用工具自带的Tasks工具可以帮忙我们完成这些事情。 二. 遇到问题 Android Studio Gradle打包Tasks不显示,如图…

销售技巧培训之如何提升房地产销售技巧

在房地产销售这个竞争激烈的行业中,要想获得成功,不仅需要熟练掌握销售技巧,还需要不断地提升自己的能力。下面,我们将从以下几个方面探讨如何提升房地产销售技巧。 一、了解客户需求 倾听客户:在与客户沟通时&#x…

正运动ZDevelop软件使用流程

ZDevelop是正运动技术ZMoiton系列运动控制器的PC端程序开发调试与诊断软件,通过它用户能够很容易的对控制器进行程序编辑与配置,快速开发应用程序、实时诊断系统运行参数以及对运动控制器正在运行的程序进行实时调试,支持中英双语环境。 BAS…

Vue自定义指令插槽作用域插槽具名插槽

Vue自定义指令&插槽&作用域插槽&具名插槽 一、学习目标 1.自定义指令 基本语法(全局、局部注册)指令的值v-loading的指令封装 2.插槽 默认插槽具名插槽作用域插槽 3.综合案例:商品列表 MyTag组件封装MyTable组件封装 4.路…

Linux高级管理-基于域名的虚拟Web主机搭建

客服机限制地址 通过 Require 配置项&#xff0c;可以根据主机的主机名或P地址来决定是否允许客户端访问。在httpd服 务器的主配置文件的<Location>&#xff0c;<Directory>、<Files>、<Limit>配置段中均可以使用Require 配置 项来控制客户端的访问。使…

HyperGCN笔记

1 Title HyperGCN: A New Method of Training Graph Convolutional Networks on Hypergraphs&#xff08;Naganand Yadati、Prateek Yadav、Anand Louis、Madhav Nimishakavi、Vikram Nitin、Partha Talukdar&#xff09;【NeurIPS 2019】 2 Conclision This paper proposes H…

【TCP/IP协议】LDAP,轻型目录访问协议(Lightweight Directory Access Protocol)

文章目录 LDAP名词解释LDAP protocolLDAP协议的特点LDAP的主要功能和用途LDAP工作原理LDAP的工作步骤LDAP查询范例 LDAP数据组件LDAP操作类型LDAP认证类型LDAP可能的风险如何保护LDAP推荐阅读 LDAP名词解释 LDAP&#xff0c;全称轻型目录访问协议&#xff08;Lightweight Dire…

JVM面试连环炮:你准备好迎接挑战了吗?

在Java开发领域&#xff0c;JVM面试一直是一个热门话题。作为一名优秀的开发者&#xff0c;你是否已经准备好迎接这场挑战了呢&#xff1f;今天&#xff0c;我们就来深度解析一下JVM面试的热点问题&#xff0c;帮助你更好地应对面试&#xff0c;一举拿下offer&#xff01; 1、…

文章解读与仿真程序复现思路——电力系统自动化EI\CSCD\北大核心《考虑低碳需求响应及主从博弈的综合能源系统低碳优化调度》

这个标题涉及到综合能源系统的低碳优化调度&#xff0c;并强调了两个关键方面&#xff1a;低碳需求响应和主从博弈。下面对标题的关键词进行解读&#xff1a; 综合能源系统&#xff1a; 这指的是整合了多种能源形式&#xff08;例如电力、燃气、可再生能源等&#xff09;的能源…

鸿蒙开发之@State案例

基于State来创建一个任务管理的案例。 //任务类 class Task {static id: number 1name:string 任务名称Task.idfinished:boolean false }//公共卡片样式 Styles function card() {.width(90%).padding(20).backgroundColor(Color.White).borderRadius(15).shadow({radius…

【深度学习】注意力机制(二)

本文介绍一些注意力机制的实现&#xff0c;包括EA/MHSA/SK/DA/EPSA。 【深度学习】注意力机制&#xff08;一&#xff09; 【深度学习】注意力机制&#xff08;三&#xff09; 目录 一、EA&#xff08;External Attention&#xff09; 二、Multi Head Self Attention 三、…

数据在内存中的存储(浮点型篇)

1.例子&#xff1a;5.5&#xff1a;内存存储为101.1&#xff0c;十分位百分位依次为2的-1次方&#xff0c;2的-2次方&#xff0c;而使用科学计数法可以改写为1.011*2的2次方 2.国际标准公式&#xff1a;-1的D次方*M*2的E次方&#xff0c;x1负0正 3.M在存储时默认整数部分为1&…