后端总结(Zookeeper)
Zookeeper
- Zookeeper
- Zookeeper简介
- Zookeeper应⽤场景
Zookeeper
Zookeeper简介
ZooKeeper最为主要的使⽤场景,是作为分布式系统的分布式协同服务。
ZooKeeper对分布式系统的协调,使⽤的是第⼆种⽅式,共享存储。其实共享存储,分布式应⽤也需要和存储进⾏⽹络通信。
zookeeper的基本概念
Zookeeper是⼀个开源的分布式协调服务,其设计⽬标是将那些复杂的且容易出错的分布式⼀致性服务封装起来,构成⼀个⾼效可靠的原语集,并以⼀些简单的接⼝提供给⽤户使⽤。zookeeper是⼀个典型的分布式数据⼀致性的解决⽅案,分布式应⽤程序可以基于它实现诸如数据订阅/发布、负载均衡、命名服务、集群管理、分布式锁和分布式队列等功能。
基本概念
① 集群⻆⾊
它没有沿⽤传递的Master/Slave概念,⽽是引⼊了Leader、Follower、Observer三种⻆⾊。Zookeeper集群中的所有机器通过Leader选举来选定⼀台被称为Leader的机器,Leader服务器为客户端提供读和写服务,除Leader外,其他机器包括Follower和Observer,Follower和Observer都能提供读服务,唯⼀的区别在于Observer不参与Leader选举过程,不参与写操作的过半写成功策略,因此Observer可以在不影响写性能的情况下提升集群的性能。
Leader服务器是Zookeeper集群⼯作的核⼼,其主要⼯作有以下两个:
(1) 事务请求的唯⼀调度和处理者,保证集群事务处理的顺序性。
(2) 集群内部各服务器的调度者。
Follower服务器是Zookeeper集群状态中的跟随者,其主要⼯作有以下三个:
(1) 处理客户端⾮事务性请求(读取数据),转发事务请求给Leader服务器。
(2) 参与事务请求Proposal的投票。
(3) 参与Leader选举投票。
Observer
简单地讲,Observer服务器只提供⾮事务服务,通常⽤于在不影响集群事务处理能⼒的前提下提升集群的⾮事务处理能⼒。
② 会话(session)
Session指客户端会话,⼀个客户端连接是指客户端和服务端之间的⼀个TCP⻓连接
③ 数据节点(Znode)
在ZooKeeper中,“节点”分为两类,第⼀类同样是指构成集群的机器,我们称之为机器节点;第⼆类则是指数据模型中的数据
单元,我们称之为数据节点——ZNode。ZooKeeper将所有数据存储在内存中,数据模型是⼀棵树(ZNode Tree),由斜杠(/)进⾏分割的路径,就是⼀个Znode,例如/app/path1。每个ZNode上都会保存⾃⼰的数据内容,同时还会保存⼀系列属性信息。
④ 版本
刚刚我们提到,Zookeeper的每个Znode上都会存储数据,对于每个ZNode,Zookeeper都会为其维护⼀个叫作Stat的数据结构,Stat记录了这个ZNode的三个数据版本,分别是version(当前ZNode的版本)、cversion(当前ZNode⼦节点的版本)、aversion(当前ZNode的ACL版本)。
⑤ Watcher(事件监听器)
Wathcer(事件监听器),是Zookeeper中⼀个很重要的特性,Zookeeper允许⽤户在指定节点上注册⼀些Watcher,并且在⼀些特定事件触发的时候,Zookeeper服务端会将事件通知到感兴趣的客户端,该机制是Zookeeper实现分布式协调服务的重要特性
⑥ ACL
Zookeeper采⽤ACL(Access Control Lists)策略来进⾏权限控制,其定义了如下五种权限:
· CREATE:创建⼦节点的权限。
· READ:获取节点数据和⼦节点列表的权限。
· WRITE:更新节点数据的权限。
· DELETE:删除⼦节点的权限。
· ADMIN:设置节点ACL的权限。
其中需要注意的是,CREATE和DELETE这两种权限都是针对⼦节点的权限控制
ZNode 的类型
刚刚已经了解到,Zookeeper的znode tree是由⼀系列数据节点组成的,那接下来,我们就对数据节点
做详细讲解
Zookeeper 节点类型可以分为三⼤类:
持久性节点(Persistent)
临时性节点(Ephemeral)
顺序性节点(Sequential)
在开发中在创建节点的时候通过组合可以⽣成以下四种节点类型:持久节点、持久顺序节点、临时节点、临时顺序节点。不同类型的节点则会有不同的⽣命周期
持久节点:是Zookeeper中最常⻅的⼀种节点类型,所谓持久节点,就是指节点被创建后会⼀直存在服务器,直到删除操作主动清除
持久顺序节点:就是有顺序的持久节点,节点特性和持久节点是⼀样的,只是额外特性表现在顺序上。顺序特性实质是在创建节点的时候,会在节点名后⾯加上⼀个数字后缀,来表示其顺序。
临时节点:就是会被⾃动清理掉的节点,它的⽣命周期和客户端会话绑在⼀起,客户端会话结束,节点会被删除掉。与持久性节点不同的是,临时节点不能创建⼦节点。
临时顺序节点:就是有顺序的临时节点,和持久顺序节点相同,在其创建的时候会在名字后⾯加上数字后缀。
事务ID
对于每⼀个事务请求,ZooKeeper都会
为其分配⼀个全局唯⼀的事务ID,⽤ ZXID 来表示,通常是⼀个 64 位的数字。每⼀个 ZXID 对应⼀次更
新操作,从这些ZXID中可以间接地识别出ZooKeeper处理这些更新操作请求的全局顺序
Watcher–数据变更通知
Zookeeper使⽤Watcher机制实现分布式数据的发布/订阅功能
Zookeeper的Watcher机制主要包括客户端线程、客户端WatcherManager、Zookeeper服务器三部分。
具体⼯作流程为:客户端在向Zookeeper服务器注册的同时,会将Watcher对象存储在客户端的WatcherManager当中。当Zookeeper服务器触发Watcher事件后,会向客户端发送通知,客户端线程从WatcherManager中取出对应的Watcher对象来执⾏回调逻辑。
ACL–保障数据的安全
我们可以从三个⽅⾯来理解ACL机制:权限模式(Scheme)、授权对象(ID)、权限(Permission),通常使⽤"scheme: id : permission"来标识⼀个有效的ACL信息。
Zookeeper应⽤场景
数据发布/订阅、命名服务、集群管理、Master选举、分布式锁和分布式队列等。
集群管理,包括集群监控与集群控制两⼤块,前者侧重对集群运⾏时状态的收集,后者则是对集群进⾏操作与控制。
后端总结(Zookeeper)相关推荐
- 【烈日炎炎战后端】Zookeeper(0.5万字)
Zookeeper 1.谈下你对 Zookeeper 的认识? 2.Zookeeper 都有哪些功能? 3.谈下你对 ZAB 协议的了解? 4.Zookeeper 怎么保证主从节点的状态同步? 5.Z ...
- Zookeeper后端开发工具Curator的使用 | Curator对节点的增删改查 | ACL权限控制 | 分布式锁 | 分布式计数器 | 附带最新版本下载
前言 Curator是Apache开源的一个Java工具类,通过它操作Zookeeper会变得极度舒适! 前置条件:已掌握的基本操作,比如在后台可以增减节点.ACL权限设置等. 1.Zookeeper ...
- Zookeeper 图形化的客户端工具(ZooInspector)| 图形化的监控工具(taoKeeper)的下载和使用 | 后端开发工具Curator的高级应用
前言 Zookeeper周边知识点较多,单篇文章难以表述,分成多篇,可据需点击进入. 本篇重点介绍,ZooInspector和taoKeeper. 1.Zookeeper的下载和安装 | 集群快速搭建 ...
- zookeeper学习记录
2019独角兽企业重金招聘Python工程师标准>>> 背景 前段时间看了S4流计算引擎,里面使用到了zookeeper进行集群管理,所以也就花了点时间研究了下zookeeper,不 ...
- Kafka 2.8独立运行,不再需要ZooKeeper
点击关注公众号,Java干货及时送达 分布式发布与订阅系统Apache Kafka在即将发布的2.8版本,使用Kafka内部的Quorum控制器来取代ZooKeeper,因此用户第一次可在完全不需要Z ...
- 一文彻底搞懂 zookeeper 核心知识点(修订版)
点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 初识 zookeeper Zookeeper 它作为Had ...
- 分布式锁用 Redis 还是 Zookeeper?
点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 作者:jianfeng 来源:石杉的架构笔记 为什么用分布式锁? ...
- 一位群友作为后端开发在滴滴和头条分别干了 2 年的经验总结
点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 先简单交代一下背景吧,某不知名985的本硕,17年毕业加入滴滴,今 ...
- Spring Boot + Vue.js 实现前后端分离(附源码)
点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 作者: 梁小生0101 链接:juejin.im/post/5c6 ...
最新文章
- 「人工智能视觉」一直被消费者忽视的工业领域应用
- python学习笔记 --- print (输出到文件 file)
- 那些为“自主”的研发“
- python 学习笔记 5 -- 文件输入输出
- 【跃迁之路】【488天】程序员高效学习方法论探索系列(实验阶段245-2018.06.08)...
- Linux文件系统属性权限chattr与lsattr命令
- 文档和帮助创作工具提供商Innovasys实用教程(一)
- jsp基础语法【05】_跳转指令
- BZOJ 3479: [Usaco2014 Mar]Watering the Fields( MST )
- python之if经典语句_Python之if语句、字典
- 你离黑客的距离,就差这 20 个神器了 | 原力计划
- [翻译]Java 核心技术(第7版)(3)
- MATLAB 常用语法、函数
- 常用的字符编码:ASCII、Unicode、UTF-8
- 仿购物网站-HTML手写代码(仅提供参考)
- 【独行秀才】macOS Big Sur 11.5 Beta3版(20G5042c)原版镜像
- Ajax系列之三——服务器客户端交互
- 成为一个有目标的学习者
- netstat 的各个 state 什么意思
- DIT和DIF的基2FFT算法
热门文章
- 什么是 XHTML?
- MyBatis(12) 源码解析之SQL执行流程
- windows、Linux两用Snowflake雪花算法生成ID,java工具类实现直接调用即可
- android glide设置缓存大小,Glide4-入门教程-5-缓存机制(内存缓存和磁盘缓存)
- Unity WebView 插件⭐️(九)核心模块 键盘模块—Keyboard
- C++实现路由追踪(Tracert)程序
- 中华民族传统文化精髓___二十四孝
- Java实现常见的八大排序
- 查看 oracle 数据库服务端数据集
- 用C++实现仿QQ屏幕截图功能,以后不登QQ也能截图!