ZooKeeper 进阶:基本介绍
zppkeeper是什么
zookeeper是一个高性能、开源的分布式应用协调服务,它提供了简单原始的功能,分布式应用可以基于它实现更高级的服务,比如实现同步(分布式锁)、配置管理、集群管理。它被设计为易于编程,使用文件系统目录树作为数据模型。服务端使用Java语言编写,并且提供了Java和C语言的客户端。
note:分布式的意味着由多台计算机构成的集群,每台计算机之间通过网络通信,这些计算机协调完成共同的目标,对外看来这些机器就是一个整体;协调的意思是多个节点一起完成某一个动作
zookeeper数据模型
如下图所示,zookeeper数据模型是一种分层的树形结构:
- 树形结构中每个节点称为Znode;
- 每个Znode都可以有数据(byte[]类型),也可以有子节点;
- Znode的路径使用斜线分割,例如:/Zoo/Duck,zookeeper中没有相对路径的说法,也即所有节点的路径都要写为绝对路径的方式;
- zookeeper定义了
org.apache.zookeeper.data.Stat
数据结构来存储数据的变化、ACL(访问权限)的变化和时间戳; - 当zookeeper中节点的数据发生变化时,版本号会递增;
- 可以对Znode中的数据进行读写操作;
zookeeper典型的应用场景
数据发布/订阅
数据发布/订阅即所谓的配置中心:发布者将数据发布到zk的一个或一系列节点上,订阅者进行数据订阅,可以及时得到数据的变化通知,如下图所示:
应用A将数据发布到zkServer的某个节点(Znode)上,应用B和C会先在zkServer上注册监听该节点的watcher(相当于Listener,基于RPC实现),一旦该节点有数据变化,B和C上的watcher变化得到通知,继而从zkServer上获取最新的数据
负载均衡
zookeeper实现负载均衡本质上是利用zookeeper的配置管理功能,zookeeper实现负载均衡的步骤为:
1、 服务提供者把自己的域名及IP端口映射注册到zookeeper中;
2、 服务消费者通过域名从zookeeper中获取到对应的IP及端口,这里的IP及端口可能有多个,只是获取其中一个;
3、 当服务提供者宕机时,对应的域名与IP的对应就会减少一个映射;
4、 阿里的dubbo服务框架就是基于zookeeper来实现服务路由和负载;
命名服务
在分布式系统当中,命名服务(name service)也是很重要的应用场景,通过zookeeper也可以实现类似于J2EE中JNDI的效果;分布式环境下,命名服务更多的是资源定位,并不是真正的实体资源,其本质也是到zookeeper的集中配置和管理
分布式协调/通知
例如通过zookeeper的watcher和通知机制实现分布式锁和分布式事物
集群管理
获取当前集群中机器的数量、集群中机器的运行状态、集群中节点的上下线操作、集群节点的统一配置等
此外还可以通过zookeeper实现集群master节点的选举、分布式锁(排他锁、共享锁)、分布式队列等。
zookeeper中的一些基本概念
集群角色
- Leader: 为客户端提供
读写
服务; - Follower: 为客户端提供度服务,客户端到Follower的写请求会转交给Leader角色,Follower会参与Leader的选举;
- Observer:为客户端提供度服务,不参与Leader的选举过程,一般是为了增强zookeeper集群的读请求并发能力;
会话(Session)
- session是客户端与zookeeper服务端之间建立的长链接;
- zookeeper在一个会话中进行心跳检测来感知客户端链接的存活;
- zookeeper客户端在一个会话中接收来自服务端的watch事件通知;
- zookeeper可以给会话设置超时时间;
zookeeper的数据节点(ZNode)
- Znode是zookeeper树形结构中的数据节点,用于存储数据;
- Znode分为持久节点和临时节点两种类型:
- 持久节点:一旦创建,除非主动调用删除操作,否则一直存储在zookeeper上;
- 临时节点:与客户端回话绑定,一旦客户端失效,这个客户端创建的所有临时节点都会被删除;
- 可以为持久节点或临时节点设置Sequential属性,如果设置该属性则会自动在该节点名称后面追加一个整形数字
zookeeper中的版本
zookeeper中有三种类型的版本:
- Version:代表当前Znode的版本;
- Cversion:代表当前Znode的子节点的版本,子节点发生变化时会增加该版本号的值;
- Aversion:代表当前Znode的ACL(访问控制)的版本,修改节点的访问控制权限时会增加该版本号的值;
zookeeper中的watcher
- watcher监听在Znode节点上;
- 当节点的数据更新或子节点的状态发生变化都会使客户端的watcher得到通知;
zookeeper中的ACL(访问控制)
类似于Linux/Unix下的权限控制,有以下几种访问控制权限:
- CREATE:创建子节点的权限;
- READ:获取节点数据和子节点列表的权限;
- WRITE:更新节点数据的权限;
- DELETE: 删除子节点的权限;
- ADMIN:设置节点ACL的权限;
note:
CREATE
和DELETE
是针对子节点的权限控制
zookeeper的部署模式
zookeeper可以单机部署或集群部署,生产环境下一定要使用集群部署,开发测试可以使用单机部署。当然在单机环境下也可以通过修改端口或使用docker实现集群部署。这里我们只演示单机部署和单机下通过修改端口实现集群部署,docker部署以后有空再研究。
相关文章:
ZooKeeper 进阶:基本介绍
zppkeeper是什么 zookeeper是一个高性能、开源的分布式应用协调服务,它提供了简单原始的功能,分布式应用可以基于它实现更高级的服务,比如实现同步(分布式锁)、配置管理、集群管理。它被设计为易于编程,使用文件系统目录树作为数…...

CSS的常用元素属性,显示模式,盒模型,弹性布局
目录 1.常用元素属性 1.1字体属性 设置字体 设置大小 字体粗细 文字样式 1.2文本属性 文字颜色 文字对齐 编辑文本装饰 文本缩进 编辑行高 编辑1.3背景属性 背景颜色 背景位置 背景尺寸 1.4圆角矩形 2.元素的显示模式 2.1块级元素(display:block) 2.…...

【20230308】串口接收数据分包问题处理(Linux)
1 问题背景 一包数据可能由于某些传输原因,经常出现一包数据分成几包的情况。 2 解决方法 2.1 通过设定最小读取字符和读取超时时间 可以使用termios结构体来控制终端设备的输入输出。可以通过VTIME和VMIN的值结合起来共同控制对输入的读取。此外,两…...
数据库复试问题总结
数据库复试问题 由《数据库系统概论(第5版)》总结而来,用于本人研究生复试准备。也欢迎各位准研究生们学习使用。 文章目录数据库复试问题1、三级模式结构及二级映射有什么优点?2、关系模型中的完整性约束是哪几类?3、SQL的特点?…...

Linux操作系统安装——服务控制
个人简介:云计算网络运维专业人员,了解运维知识,掌握TCP/IP协议,每天分享网络运维知识与技能。座右铭:海不辞水,故能成其大;山不辞石,故能成其高。个人主页:小李会科技的…...

【C语言】编译+链接
一、程序的翻译环境和执行环境 在ANSI C的任何一种实现中,存在两个不同的环境。 第1种是翻译环境,在这个环境中源代码被转换为可执行的机器指令。 第2种是执行环境,它用于实际执行代码。详解编译链接翻译环境1.组成一个程序的每个源文件通过…...

为「IT女神勋章」而战
大家好,我是空空star,今天为「IT女神勋章」而战 文章目录前言一、IT女神勋章二、绘制爱心1.htmlcssjs来源:一行代码代码效果2.python来源:C知道代码效果3.go来源:复制代码片代码效果4.java来源:download代码…...
JS 动画 之 setInterval、requestAnimationFram
帧率:一秒中内页面刷新的次数,一般为60FPS,每一帧的时间是1000/6016.67ms setInterval 当我们使用setInterval做动画时,有两点会影响动画效果 由于setInterval是异步任务(宏任务),会放到异步队…...

【LeetCode——排序链表】
文章目录排序链表二、解题思路:二.实现的代码总结:排序链表 一道链表排序题,链接在这里 二、解题思路: 解题思路:使用归并排序(用递归实现) 第一步:先找到链表的中间节点 第二步…...

二叉树的遍历(前序、中序、后序)| C语言
目录 0.写在前面 1.前序遍历 步骤详解 代码实现 2.中序遍历 步骤详解 代码实现 3.后序遍历 步骤详解 代码实现 0.写在前面 认识二叉树结构最简单的方式就是遍历二叉树。所谓遍历二叉树就是按照某种特定的规则,对二叉树的每一个节点进行访问,…...

【建议收藏】深入浅出Yolo目标检测算法(含Python实现源码)
深入浅出Yolo目标检测算法(含Python实现源码) 文章目录深入浅出Yolo目标检测算法(含Python实现源码)1. One-stage & Two-stage2. Yolo详解2.1 Yolo命名2.2 端到端输入输出2.3 Yolo中的标定框2.4 Yolo网络结构2.5 Yolo的算法流…...

Vue常见的事件修饰符
前言 vue一共给我们准备了6个事件修饰符,前三个比较常用,后三个少见,这里着重讲下前三个 1.prevent:阻止默认事件(常用) 2. stop:阻止事件冒泡(常用) 3. once:事件只触发一次(常用) 4.captrue:使用事件的捕捉模式(不常用) 5.self:只有event…...

【卷积神经网络】激活函数 | Tanh / Sigmoid / ReLU / Leaky ReLU / ELU / SiLU / GeLU
文章目录一、Tanh二、Sigmoid三、ReLU四、Leaky ReLU五、ELU六、SiLU七、Mish本文主要介绍卷积神经网络中常用的激活函数及其各自的优缺点 最简单的激活函数被称为线性激活,其中没有应用任何转换。 一个仅由线性激活函数组成的网络很容易训练,但不能学习…...
刷题记录:牛客NC24048[USACO 2017 Jan P]Promotion Counting 求子树的逆序对个数
传送门:牛客 题目描述 奶牛们又一次试图创建一家创业公司,还是没有从过去的经验中吸取教训–牛是可怕的管理者! 为了方便,把奶牛从 1∼n1\sim n1∼n 编号,把公司组织成一棵树,1 号奶牛作为总裁(这棵树的根…...

MpAndroidChart3最强实践攻略
本篇主要总结下Android非常火爆的一个三方库MpAndroidChart的使用。可能在大多数情况下,我们很少会在Android端去开发图表。但如果说去做一些金融财经类、工厂类、大数据类等的app,那么绝对会用到MpAndroidChart。 一、前言 2018年,那年的我…...
Spring笔记(9):事务管理ACID
一、事务管理 一个数据库事务是一个被视为单一的工作单元操作序列。 事务管理有四个原则,被成为ACID: Atomicity 原子性—— 事务作为独立单元进行操作,整个序列是一体的,操作全都成功或失败。Consistency 一致性—— 引用完整…...
io流 知识点+代码实例
需求 : 如何实现读写文件内部的内容?流 : 数据以先入先出的方式进行流动相当于管道,作用用来传输数据数据源-->流-->目的地流的分类 :流向分 : 以程序为中心输入流输出流操作单元 :字节流 : 万能流字符流 : 只能操作纯文本文件功能分 :节点流 : 真实实现读写的功能流(包…...

【MySQL】P8 多表查询(2) - 连接查询 联合查询
连接查询以及联合查询多表查询概述连接查询内连接隐式内连接显式内连接外连接左外连接右外连接自连接联合查询多表查询概述 建表语句见上一篇博文:https://blog.csdn.net/weixin_43098506/article/details/129402302 e.g.e.g.e.g. select * from emp, dept where e…...

QML动画(Animator)
在Qt5.2之后,引入Animator动画元素。这种方式可以直接所用于Qt Quick的场景图形系统,这使得基于Animator元素的动画及时在ui界面线程阻塞的情况下仍然能通过图形系统的渲染线程来工作,比传统的基于对象和属性的Animation元素能带来更好的用户…...

Git 分支操作【解决分支冲突问题】
1. 什么是分支 在版本控制过程中,同时推进多个任务,为每个任务,我们就可以创建每个任务的单独分支。使用分支意味着程序员可以把自己的工作从开发主线上分离开来,开发自己分支的时候,不会影响主线分支的运行。对于初学…...

大型活动交通拥堵治理的视觉算法应用
大型活动下智慧交通的视觉分析应用 一、背景与挑战 大型活动(如演唱会、马拉松赛事、高考中考等)期间,城市交通面临瞬时人流车流激增、传统摄像头模糊、交通拥堵识别滞后等问题。以演唱会为例,暖城商圈曾因观众集中离场导致周边…...
AtCoder 第409场初级竞赛 A~E题解
A Conflict 【题目链接】 原题链接:A - Conflict 【考点】 枚举 【题目大意】 找到是否有两人都想要的物品。 【解析】 遍历两端字符串,只有在同时为 o 时输出 Yes 并结束程序,否则输出 No。 【难度】 GESP三级 【代码参考】 #i…...

MMaDA: Multimodal Large Diffusion Language Models
CODE : https://github.com/Gen-Verse/MMaDA Abstract 我们介绍了一种新型的多模态扩散基础模型MMaDA,它被设计用于在文本推理、多模态理解和文本到图像生成等不同领域实现卓越的性能。该方法的特点是三个关键创新:(i) MMaDA采用统一的扩散架构…...

DIY|Mac 搭建 ESP-IDF 开发环境及编译小智 AI
前一阵子在百度 AI 开发者大会上,看到基于小智 AI DIY 玩具的演示,感觉有点意思,想着自己也来试试。 如果只是想烧录现成的固件,乐鑫官方除了提供了 Windows 版本的 Flash 下载工具 之外,还提供了基于网页版的 ESP LA…...
css的定位(position)详解:相对定位 绝对定位 固定定位
在 CSS 中,元素的定位通过 position 属性控制,共有 5 种定位模式:static(静态定位)、relative(相对定位)、absolute(绝对定位)、fixed(固定定位)和…...
数据库分批入库
今天在工作中,遇到一个问题,就是分批查询的时候,由于批次过大导致出现了一些问题,一下是问题描述和解决方案: 示例: // 假设已有数据列表 dataList 和 PreparedStatement pstmt int batchSize 1000; // …...

Java面试专项一-准备篇
一、企业简历筛选规则 一般企业的简历筛选流程:首先由HR先筛选一部分简历后,在将简历给到对应的项目负责人后再进行下一步的操作。 HR如何筛选简历 例如:Boss直聘(招聘方平台) 直接按照条件进行筛选 例如:…...
C++课设:简易日历程序(支持传统节假日 + 二十四节气 + 个人纪念日管理)
名人说:路漫漫其修远兮,吾将上下而求索。—— 屈原《离骚》 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 专栏介绍:《编程项目实战》 目录 一、为什么要开发一个日历程序?1. 深入理解时间算法2. 练习面向对象设计3. 学习数据结构应用二、核心算法深度解析…...
根目录0xa0属性对应的Ntfs!_SCB中的FileObject是什么时候被建立的----NTFS源代码分析--重要
根目录0xa0属性对应的Ntfs!_SCB中的FileObject是什么时候被建立的 第一部分: 0: kd> g Breakpoint 9 hit Ntfs!ReadIndexBuffer: f7173886 55 push ebp 0: kd> kc # 00 Ntfs!ReadIndexBuffer 01 Ntfs!FindFirstIndexEntry 02 Ntfs!NtfsUpda…...
提升移动端网页调试效率:WebDebugX 与常见工具组合实践
在日常移动端开发中,网页调试始终是一个高频但又极具挑战的环节。尤其在面对 iOS 与 Android 的混合技术栈、各种设备差异化行为时,开发者迫切需要一套高效、可靠且跨平台的调试方案。过去,我们或多或少使用过 Chrome DevTools、Remote Debug…...