Zookeeper分布式系统协同器概念快速学习
原文格式可以访问:https://www.rockysky.tech
分布式系统的基本操作
- 主节点选举:在绝大多数分布式系统中,都需要进行主节点选举。主节点负责管理协调其它节点或者同步集群中其它节点的数据。为了确保集群中一直存在一个主节点,需要有主节点的选举机制。但现有主节点无法访问的时候,自动产生新的主节点接管集群管理和协调的任务
- 宕机检测:当集群中有某个节点或者某部分节点脱离集群或者不可访问的时候,分布式系统的其他节点可以识别出来,并执行相应的步骤,去替换或者接管宕机节点的工作,使得整个集群的功能不会受到影响。
- 集群组管理:对于比较大规模的分布式系统,我们需要管理其不同的分组。比如说Kubernetes集群就需要管理基本的服务单位POD。如何去管理和协调每个组的资源和任务分配也是分布式系统必须要处理的任务。
- 元数据管理(Metadata):在一个分布式系统中需要保存一些元数据。比如每个节点正在执行的任务,任务的进度,各个节点的状态。节点间需要共享的一些同步数据等等。
Zookeeper是什么
Zookeeper是一个分布式系统协调器,其本身并不直接实现上述的任何一个分布式系统的基本操作。Zookeeper本身其实就是一个通过Raft共识机制协同的分布式键值对文件存储系统。Zookeeper的文件以树状形式存储,每个节点都可以存储数据,每个节点叫做一个znode,如下图所示:

和普通的文件结构不同,Zookeeper没有目录的概念,每个节点都可以存储数据。
持久性节点(Persistent)和易失性(Ephemeral)节点
Zookeeper的节点分为两种主要的类型,即持久性节点和易失性节点,
- 持久性节点(Persistent),这种节点的数据必须能够一直保存,即使写入这些数据的客户端连接丢失,或者客户端宕机。这些节点和数据任然必须保留。举个例子,比如说一个并行运算的集群,给每个slave节点分配的运算任务必须要能够记录下来,即使集群的master节点或者slave节点宕机,为了保证最后的运算能够完整,也不能够把这些任务删除。
- 易失性节点(Ephemeral)一旦客户端本身连接中断或者宕机,这些数据节点会被释放。例如,一个集群的Master节点挂了,那这个Master节点的锁就必须要释放出来,这个锁的机制就可以用易失性节点来完成。
有条件的更新和Watch机制
Zookeeper支持一种watches机制。客户端可以给znode设定watch机制,一旦这个znode被更新,就会触发通知机制发送消息给客户端,同时删除这个watch。如果ZooKeeper服务器本身挂掉了,那客户端会直接收到本地通知。
ZooKeeper保证的是什么
ZooKeeper的设计原则
Zookeeper本身被设计为一个非常简单,高速和可靠的服务。从而为各类分布式系统提供高级别和负责的分布式系统基本操作。对于分布式系统的CAP分类中,ZooKeeper是一种CP系统,重点保证的是强一致性。包括以下的特点:
顺序一致性:客户端对节点的更新一定会保证其最终更新先后顺序的的一致性
原子性:对znode的更新只会有成功,失败两种状态,不会有中间结果
单点一致性:客户端对zookeeper集群中任何一节点看到的znode结构和数据完全相同
高可靠性:一旦对znode更新成功,其结果会一直保持,直到下一次变更
时效性:在一定时间段,确保系统数据最新(up-to-date)
不过需要注意的是Zookeeper不确保数据的可用性,必须要等到所有ZooKeeper集群节点都同步成功,数据更新才会确认操作成功。这是才能够读取这个数据。时效性是值得能够确保在一定的时间段内可以完成数据跟新和同步。
极为简单的API设计
Zookeeper通过API提供服务,提供以下几个API。
- create : 在树状结构上创建znode
- delete : 删除znode
- exists : 测试某个znode是否存在
- get data : 读取某个znode的数据
- set data : 向Znode写入数据
- get children : 获取子节点列表
- sync : 等待所有zookeeper节点广播和同步完成。
性能:
在大量读和少量写入的情况先,Zookeeper性能是比较高的。

可靠性:
官方数据显示,Zookeeper选举主节点的时间大概在200ms,当节点从新恢复后,整个系统性能可以迅速恢复。

Zookeeper分布式系统协同器概念快速学习的更多相关文章
- ZooKeeper快速学习
"一入Java深似海",过去自身对于分布式的接触,始终处于使用别人构建的框架的水平,最多就是在nginx配置一下第4层的负载均衡(最后有介绍).随着java使用深入,本文将重点理解 ...
- ASP.NET Core on K8S学习初探(2)K8S基本概念快速一览
在上一篇<单节点环境搭建>中,通过Docker for Windows在Windows开发机中搭建了一个单节点的K8S环境,接下来就是动人心弦的部署ASP.NET Core API到K8S ...
- [转帖]从0开始的高并发(一)--- Zookeeper的基础概念
从0开始的高并发(一)--- Zookeeper的基础概念 https://juejin.im/post/5d0bd358e51d45105e0212db 前言 前面几篇以spring作为主题也是有些 ...
- 大白话带你认识 ZooKeeper !重要概念一网打尽!
大家好,我是 「后端技术进阶」 作者,一个热爱技术的少年. 1. 前言 相信大家对 ZooKeeper 应该不算陌生.但是你真的了解 ZooKeeper 到底有啥用不?如果别人/面试官让你给他讲讲对于 ...
- 快速学习C语言一: Hello World
估计不会写C语言的同学也都听过C语言,从头开始快速学一下吧,以后肯定能用的上. 如果使用过其它类C的语言,如JAVA,C#等,学C的语法应该挺快的. 先快速学习并练习一些基本的语言要素,基本类型,表达 ...
- 60分钟Python快速学习(转)
60分钟Python快速学习(给发哥一个交代) 阅读目录 第一步:开发环境搭建: 第一个Python功能:初识Python 02.Python中定义变量不需要数据类型 03.在Pythod中定义方法 ...
- 阿里巴巴Java开发手册快速学习
Java作为一门名副其实的工业级语言,语法友好,学习简单,大规模的应用给代码质量的管控带来了困难,特别是团队开发中,开发过程中的规范会直接影响最终项目的稳定性. 善医者“未有形而除之”,提高工程健壮性 ...
- Javaweb快速学习
孙卫琴老师的javaweb一书已经买了很多年,由于很厚一直也没有去好好阅读下, 项目发布后有闲暇时间,决定快速学习了,毕竟很多概念和知识主要还是复习. 对于互联网,我们可以简单认为浏览器就是会人类语言 ...
- HBase应用快速学习
HBase是一个高性能.面向列.可伸缩的开源分布式NoSQL数据库,是Google Bigtable的开源实现. HBase的思想和应用和传统的RDBMS,NoSQL等有比较大的区别,这篇文章从HBa ...
随机推荐
- crawler碎碎念5 豆瓣爬取操作之登录练习
import requests import html5lib import re from bs4 import BeautifulSoup s = requests.Session() #这里要提 ...
- 16. 产生Javadoc
过程与export >> javadoc一致,需要注意的是字符集的设置. -encoding UTF-8 -charset UTF-8 export >> javadoc : ...
- 一行代码去掉Devexpress弹窗
使用的是.net hook方法: 使用代码: using System; using System.Windows.Forms; namespace AlexDevexpressToolTest { ...
- Quantitative Trading with R(一):两个简单的策略
下面是两个使用R中的Quantstrat包进行策略构建的例子,都是对600550.ss.600192.ss.600152.ss.600644.ss.600885.ss.600151.ss六只股票进行投 ...
- COCOAPI for windows error!
refer this https://github.com/philferriere/cocoapi However, you may encounter a bug where you cannot ...
- win10系统下自由切换桌面
说明: win10系统下自由切换桌面,确认在win10系统下操作进行. 方法: 1.快捷键:ctrl+win键(开始键)+方向键(左/右) 2.桌面最下面的状态栏,点击红框
- 降级gcc版本
前言 ubuntu16.04版本中默认的gcc版本是5.4,因为有些第三方应用依赖的问题,我不得不降级到5.3,下面是关于gcc的降级操作 部署操作 下载GCC源码(https://ftp.gnu.o ...
- Linux守护进程之systemd
介绍 历史上,Linux 的启动一直采用init进程:下面的命令用来启动服务. $ sudo /etc/init.d/apache2 start # 或者 $ service apache2 star ...
- 从O365中获取users到D365中 使用flow
在我上篇blog中讲解到了怎么用代码把O365 users 获取到D365中. 从O365中获取users到D365中 这几天一直在研究flow, 发现flow可以更简单的完成这个功能. 一开始没有考 ...
- 快速理解 VUEX 原理
1. vuex 的作用: vuex其实是集中的数据管理仓库,相当于数据库mongoDB,MySQL等,任何组件都可以存取仓库中的数据. 2. vuex 流程和 vue 类比: 我们看一下一个简单的vu ...