【ZooKeeper】ZooKeeper 应用场景

news/2024/4/25 2:25:19/文章来源:https://blog.csdn.net/qq_36679460/article/details/127234985

ZooKeeper 应用场景

    • 发布订阅
    • 命名服务
    • 集群管理
    • 分布式锁
    • 分布式队列管理
    • 负载均衡
    • 配置管理

ZooKeeper:分布式协调服务,仲裁机构。基于ZNode数据模型和Watcher监听机制可以解决很多问题,比如分布式锁问题。
应用场景如下:
1、发布/订阅
2、命名服务
3、配置管理
4、集群管理
5、分布式锁
6、队列管理
7、负载均衡

发布订阅

应用服务器集群可能存在两个问题:
1、集群中有很多机器,当某个通用的配置发生变化后,怎么自动让所有服务器的配置同时生效?——配置管理问题
2、当集群中某个节点宕机,如何让集群中的其他节点感知?——集权管理的问题
为了解决这两个问题,ZooKeeper引入了Watcher机制来实现发布/订阅功能,能够让多个订阅者同时监听某一个主题对象,当这个主题对象自身状态发生变化时,会通知所有订阅者。
订阅者:在zookeeper架构中,其实就是 注册监听的客户端
发布者:在zookeeper架构中,其实就是 触发事件发生的客户端

数据发布/订阅即所谓的配置中心:发布者将数据发布到ZooKeeper的一个或一些节点上,订阅者进行数据订阅,可以及时得到数据变化的通知。

消息/数据的发送有2中设计模式,推Push和拉Pull。
ZooKeeper采用推拉结合,客户端向服务端注册自己需要关注的事件,一旦该节点数据发生该事件,服务器向客户端发送事件Watcher通知,客户端收到消息主动从服务端获取最新数据。这种模式适用于配置信息获取同步。

命名服务

唯一ID生成服务。
命名服务是分布式系统中较为常见的一类场景,分布式系统中,被命名的实体通常可以是集群中的机器、提供的服务地址或远程对象等,通过命名服务,客户端可以根据指定名字来获取资源的实体、服务地址和提供者的信息。ZooKeeper也可帮助应用系统通过资源引用的方式实现对资源的定位和使用,广义上的命名服务的资源定位都不是真正意义上的实体资源,在分布式环境中,上层应用仅仅需要一个全局唯一的名字。ZooKeeper可以实现一套分布式全局唯一ID的分配机制。

ZooKeeper系统中每个znode都有一个绝对唯一的路径。所以只要你创建成功了一个znode节点,意味着,命名了一个全局唯一的名称。另一种方式,通过创建带顺序编号的节点。

由于ZooKeeper可以创建顺序节点,保证了同一节点下子节点是唯一的,所以直接按照存放文件的方法,设置节点,比如一个路径下不可能存在两个相同的文件名,这种定义创建节点,就是全局唯一ID。
切记:这种方式能实现,不推荐在生产环境使用。利用ZooKeeper关于事务请求的严格顺序处理的机制,由于有多台机制执行分布式事务的存在,不如使用一台高性能的服务器做所有请求的顺序处理高效,而且可以自由定义命名规则。

命名服务算法: Twitter的SnowFlake雪花算法,美团的Leaf,滴滴的TinyID等

集群管理

ZooKeeper集群管理理解两点:是否有机器退出和加入(从节点管理)、选举Master(主节点管理)

第一点,所有机器约定在父目录GroupMembers下创建临时目录节点,然后监听父目录节点的子节点变化消息。一旦有机器挂掉,该机器与ZooKeeper的连接断开,其所创建的代表该节点存货状态的临时目录节点被删除,所有其他机器都将收到通知:某个目录被删除。

第二点:所有机器创建临时顺序编号目录节点,每次选取编号最小的机器作为master。这只是其中一种策略,选举策略完全可以由管理员自己指定。在分布式环境中,相同的业务应用分布在不同的机器上,有些业务逻辑(例如一些耗时的计算,网络I/O处理),往往只需要让整个集群中的某一台机器进行执行,其余机器可以共享这个结果,这样可以大大减少重复劳动,提高性能。

利用ZooKeeper的强一致性,能够保证在分布式高并发情况下节点创建的全局唯一性,即:同时有多个客户端请求创建/currentMaster节点,最终一定只有一个客户端请求能够创建成功。利用这个特性,能轻易的在分布式环境中进行 集群选举了。其实只要实现数据唯一就可以做到选举,关系型数据库也可以,但是性能不好,设计复杂。

利用ZooKeeper实现集群管理:包括集群从节点上下线即时感知管理,和 集群主节点选举管理
在这里插入图片描述
HDFS中DataNode死掉,NameNode需要经过至少630s默认时间,才认为这个节点死掉。
HBase中HRegionServer死掉,HMaster需要经过1s的默认时间,才认为这个接待你死掉。

分布式锁

锁:并发编程中保证线程安全(一个JVM内部的多个线程并发执行的安全)的一种机制,针对临界资源直接进行加锁的操作。只能一个线程拿到。
分布式锁:分布式环境中,如果多个线程想要访问临界资源,也需要加锁,但是比起单进程中的多线程加锁机制,分布式锁,还要考虑网络通信的问题。网络不可靠,消息丢失和消息延迟。

锁服务:独占锁、共享锁、时序锁
独占锁/写锁:对写加锁,保持独占,或者排他锁
共享锁/读锁:对读加锁,可共享访问,释放锁之后才可进行事务操作
时序锁:控制时序

对于第一类(独占锁),将 ZooKeeper 上的一个 znode 看作是一把锁,通过 createznode() 的方式来实现。所有客户端都去创建 /distribute_lock 节点,最终
成功创建的那个客户端代表拥有了这把锁。用完删除掉自己创建的 /distribute_lock 节点就释放出锁。
对于第二类(读写锁),在 ZooKeeper 上生成两个 znode,分别是:/lock_read 和 /lock_write,如果有一个客户端过来读取数据,则先判断 /lock_write 是否
存在,如果不存在,则可以进行读取操作,同时创建一个 /lock_read 下的子节点代表读锁,读取完毕删除掉。如果有一个客户端过来写数据,则先判断 /lock_write
是否存在,再判断 /lock_read 下是否有读锁,如果都没有,则可以进行写操作。
对于第三类(时序锁),/distribute_lock 已经预先存在,所有客户端在它下面创建临时顺序编号目录子节点,和选 Master 一样,编号最小的获得锁,用完删除,
依次有序
在这里插入图片描述

分布式队列管理

两种类型的队列:
1、同步队列/分布式屏障/分布式栅栏:当一个队列成员都聚齐时,队列才可用,否则一直等待所有成员到达
2、先进先出/顺序控制:队列按照FIFO方式进行入队和出队操作。和分布式时序锁一样
第一类,在约定目录下创建临时目录节点,监听节点数目是否是要求的数目。
第二类,和分布式锁服务中的控制时序场景基本原理一致,入列有编号,出列按编号。

负载均衡

ZooKeeper 实现负载均衡本质上是利用 ZooKeeper 的配置管理功能,实现负载均衡的步骤:
1、服务提供者把自己的域名及 IP 端口映射注册到 zk 中。
2、服务消费者通过域名从 zk 中获取到对应的 IP 及端口,这里的 IP 及端口可能有多个,只是获取其中一个。
3、当服务提供者宕机时,对应的域名与 IP 的对应就会减少一个映射。
4、阿里的 dubbo 服务框架就是基于 zk 实现服务路由和负载均衡。

ZooKeeper 能实现负载均衡,但是跟 命名服务一样,不推荐使用!

配置管理

HBase 和 Kafka 的架构设计实现中,用 ZooKeeper 做了三件事:
注册中心,利用发布/订阅功能
配置管理,集群中相关重要元数据,保存在ZooKeeper上
HA选举,HBase的Master,Kafka中的Controller角色都是通过ZooKeeper来进行选举

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

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

相关文章

servlet基础知识

早期的Web应用主要用于浏览新闻等静态页面,HTTP服务器(比如 Apache、Nginx)向浏览器返回静态 HTML,浏览器负责解析HTML,将结果呈现给用户。随着互联网的发展,还希望进行一些交互操作来获取动态结果&#xf…

Python Turtle绘图基础(一)——Turtle简介、绘图窗体与绘图区域

今天继续给大家介绍渗透测试相关知识,本文主要内容是Python Turtle绘图基础,包括Turtle简介、绘图窗体与绘图区域。 一、Turtle库简单介绍 Turtle库时Python语言的标准库(所谓标准库,就是在安装Python时自带的库,与之…

【经典面试题-LeetCode69/剑指 Offer II 072:x 的平方根 (Python3实现)】

x 的平方根一、题目描述1.题目内容2.样例二、解决方案1.基本代码(成功提交)2.略微拓展一、题目描述 这是一道经典的面试题,需要我们在不使用任何内置函数的前提下,手动实现求指定整数的算术平方根。 1.题目内容 给你一个非负整数…

Android开发——底部导航栏设计

底部导航栏设计1.依赖配置2.tabbar的UI实现3.tabbar的逻辑绑定4.tabbar的滑动与点击联动其实,常见的Android和微信小程序一样,通常最下面一排需要有一排导航栏,可以通过点击导航栏图标和滑动实现页面跳转,具体实现使用的是Android的 ViewPage…

在MUI框架中对于事件绑定与取消和监听的触发自定义的深入运用与实战

事件绑定 除了使用addEventListener()方法侦听特定元素上的事件外,还可以使用。on()方法实现批元素的事件绑定。 event Type: String 需监听的事件名称,例如:‘tap’ selector Type: String 选择…

MySQL集群搭建——主从同步(一主二从)

一、安装MySQL数据库 Centos7安装MySQL5.7 目前准备了三台服务器作为主从配置数据库 #主 192.168.159.100:3306 #从 192.168.159.101:3306 #从 192.168.159.102:3306二、修改主数据库配置文件 vim /etc/my.cnf #在mysqld模块中添加如下配置信息 #开启二进制日志 log-binmast…

Win10家庭版利用Hyper-V虚拟机安装Kali Linux

目录 安装Hyper-V 批处理安装 重启电脑 下载Kali镜像 Kali官网下载 Hyper-V虚拟机 创建虚拟机 启动虚拟机 安装Kali 安装前配置 磁盘分区 系统安装 登录系统 近期学习网络安全的相关内容,需要用到很多的安全工具。偶然得知Kali Linux就是专门为网络安…

SD-WAN是面向分支机构的新兴、不断发展的解决方案

在过去的二十年里,人们的工作方式发生了很大变化。共享办公空间、移动性和云现在很常见。业务分散,分支机构得到授权。 当然,这个新功能是一件好事。但是,与此同时,它提出了一个巨大的挑战:多协议标签交换(…

【潮流计算】基于matlab粒子群算法优化电力系统潮流计算【含Matlab源码 2157期】

一、粒子群算法简介 1 标准粒子群优化(PSO)算法 PSO算法根据对环境的适应度将群体中的个体移动到好的区域,将每个个体看作是D维搜索空间中的一个粒子,根据粒子本身的飞行经验和群体中其他同伴的飞行经验调整下一步飞行方向,从而搜索到最好的空间位置解。设第i个粒子的位置表示…

什么是 IoT App SDK?

目录 为什么要开发 IoT App? IoT App SDK 的优势 IoT App SDK 分类 智能生活 App SDK 商用照明 App SDK 智慧社区 App SDK 智慧居住 App SDK 行业 App SDK 其他概念 IoT 设备 通信过程 IoT 云平台 智能面板 名词解释 涂鸦 IoT App SDK 是专为物联网移…

沉睡者IT:你理解的元宇宙是怎样呢?

这半年来关于元宇宙的话题成为了一场舆论的热点,很多即使是从事与其毫无相关职业的人,也多少有些耳闻。 ​ 编辑 但是对于元宇宙,它是什么,为什么需要元宇宙,怎样才能建立元宇宙以及大家对元宇宙的看法,…

Hack The Box靶机——Ambassador

文章目录前言一、Web部分二、提权部分前言 难度:中等,Hack The Box网站在线靶机。本文涉及知识点有:Grafana系统任意文件读取,CURL下载文件,SSL本地端口转发,Consul命令执行。 靶机地址:1…

【windows kernel源码分析】对初学者友好的底层理解,让你对计算机内核不再迷茫

文章目录🍃概念梳理windows kernel引导加载程序完成后的RAM内容🍑实现过程--还是看原文吧 🌸参考原文链接对市面上的文章再做一次整合。给渴望得到内核知识的人提供一些帮助。 🍃博主昵称:一拳必胜客 博主主页面链接&a…

各种平均值:算术平均值,几何平均值,调和平均值等

平均值概述 平均数反映了一组数据的一般水平,最常见的平均数是算术平均数,除了算数平均数外,还有几何平均数,调和平均数,加权平均数等。 算术平均值(Arithmetic Mean) 公式解读:表…

list全部功能模拟实现

目录&#xff1a; list的深度剖析及模拟实现 list底层是双向循环链表 ------而实现list最重要的就是迭代器类的实现 下面我们会重点学习迭代器 list整体接口函数罗列 //模拟实现list底层---全部功能 namespace std {//结点类模拟实现template<class T>struct list_node…

java数据结构-------栈和队列

文章目录1、栈(Stack)1、什么是栈2、栈中常使用的方法3、栈的应用场景1、逆序打印链表2、有效的括号2、队列(Queue)1、什么是队列2、队列的使用3、循环队列目标&#xff1a;1、 栈的概念及使用&#xff0c;2、 队列的概念及使用&#xff0c;3.、相关OJ题1、栈(Stack) 1、什么是…

FISCO BCOS(十五)——— Windows下的go环境配置及beego环境配置并解决bee run报错问题

1、下载地址 https://golang.google.cn/dl/2、双击打开下载的文件&#xff0c;一路按照默认点击下一步&#xff0c;&#xff08;安装位置可选&#xff0c;默认安装在c盘&#xff09; 3、go环境配置&#xff08;很重要的&#xff09; 在系统变量名中新建变量名&#xff1a;GOP…

Java如何生成花里胡哨的二维码

目录一、序言二、找资料1、寻觅文档2、寻觅代码三、代码示例1、简单的二维码2、带颜色的二维码3、带logo的二维码四、工具类封装一、序言 之前在做头马演讲俱乐部哼哈官可视化汇报报告时&#xff0c;为了方便大家移动端查看可视化报告&#xff0c;而不是通过点击链接这种生硬的…

Android 面试java知识小结

1.-1的二进制是多少&#xff0c;怎么算出来的&#xff1f; 1111 1111 在计算机里是以补码的形式存在的&#xff0c;那为什么要使用补码呢&#xff1f; 计算机中的有符号数有三种表示方法&#xff0c;即原码、反码和补码。三种表示方法均有符号位和数值位两部分&#xff0c;符号…

如何使用界面控件DevExpress WinForms自带的UI模板?其实很简单

DevExpress WinForm拥有180组件和UI库&#xff0c;能为Windows Forms平台创建具有影响力的业务解决方案。DevExpress WinForms能完美构建流畅、美观且易于使用的应用程序&#xff0c;无论是Office风格的界面&#xff0c;还是分析处理大批量的业务数据&#xff0c;它都能轻松胜任…