首页 > 其他分享 >秒懂Zookeeper原理与工作机制

秒懂Zookeeper原理与工作机制

时间:2023-09-28 13:32:38浏览次数:36  
标签:zk ip 可以 Zookeeper 集群 原理 机制 数据 节点


什么是Zookeeper

Zookeeper简称zk,先从字面意思上去理解,那就是动物园管理员。其实zk是大数据领域中的一员,为整个分布式环境提供了协调服务,主要可以用于存储一些配置信息,同时也可以基于zk实现集群。它是一个apache的开源分布式中间件。

zk和大数据领域结合比较密切,可以管理很多框架,比如:

  • hadoop
  • hive
  • kafka
  • hbase
  • hdfs
  • pig
  • ……
    zk把上述框架都可以管理起来,那么就相当于作为一个动物园管理员管着各个动物了,比如大象啊,蜜蜂啊,猪啊等等。很形象。

举一些zk简单的场景:

  • 比如当你使用dubbo的时候,你需要使用zk作为注册中心,当然SpringCloud也可以使用zk来替代eureka作为注册中心。
  • 另外kafka和solr都是基于zk的结合实现了集群,当然netty也可以。如果你对上述的一些技术名字没有听过没有接触过,那么没有关系,我们将来都会涉及到,都会带着大家去学习。
  • 集群或者分布式系统以及大数据中的一些统一的配置管理信息可以都写入zk便于所有服务器节点监听读写,其实也就是协调作用嘛
  • MQ消费者处理完毕也可以通过zk回写通知生产者处理完成,并且告知结果。

工作机制

zk可以说是一种监工模式。zk中把数据保存到节点(节点后面会说),然后可以监听这个节点,如果节点的数据发生变化,则可以发起通知。我们可以通过下面一张图来描述这个过程。

秒懂Zookeeper原理与工作机制_配置信息


上面就是zk的工作原理,本质上其实也是生产者与消费者的关系,学生就是生产者,而班主任就是消费者,通过这种关系实现了zk的通知机制。

这里应该按照单机和集群了

Zookeeper的特点(可以在集群的时候说)

  1. zk集群由一个leader和多个follower组成。和公司一样,老板只有一个,其他都是打工的小弟。
  2. zk集群中,只要有半数以上的zk节点存活,那么整个集群可以正常对外提供服务。这是选举规则,和redis一样。
  3. 每个节点的数据全部都是一致的,不论客户端(脚本或java端)连接到任意的zk节点,那么所获得的数据,全部一致。
  4. 同一个客户端发起的写操作是顺序执行的。其实也就是自身事务的顺序一致性,zk会使用递增的事务id号(zxid)来标识事务。
  5. 数据原子性,数据写操作,要么成功,要么失败。
  6. 近实时性,成功写入一个数据后,可以立马在别的节点读取相应的数据。节点之间对数据的同步复制速度很快,而且本身zk的数据保存也不会很大的,同步会很快。

Zookeeper的数据结构(这个可以在安装好zk后来讲)

zk的数据结构是线性的树形结构的,类似linux系统目录结构那种。

通过例子先来聊一聊redis的数据结构。redis的数据都是放在内存的。通过set设置,get获取。那么其实就类似一个桶状型容器,里面放了很多key,通过get就能获得。

就拿洗澡盆来讲,洗澡盆里可以放小黄鸭,奥特曼,怪兽等。我们要拿的话就直接get("小黄鸭")就能获得数据。类似这样的:

秒懂Zookeeper原理与工作机制_分布式系统_02

那么zk是怎样的呢,看如下图:

秒懂Zookeeper原理与工作机制_分布式系统_03

也就是说,zk的数据模型和linux的文件系统目录结构类似,可以作为树形结构一层一层展开,每一层作为一个node节点(znode)都可以存储数据,而这个node可以比作是一片树叶,树叶很小能够承载的东西也不多,所以znode节点能够存储的数据大小在1m左右,不能设置很大,存储一些配置信息啊或者一些json信息就行。每一个节点都会有其指定的唯一标识路径,比如/admin/info就是唯一路径。

Zookeeper 应用场景

  1. 统一命名策略:一般来说,在分布式系统里,有很多的服务器节点,他们都是各有ip组成的,那么我们并不会记住那么多的ip,往往都可以为它取一个别名,比如ip为192.168.1.201的ip我们几乎不会去记住它,而且用一个别名比如 service-mq 和ip做好映射,那么客户端去调用这个ip的时候,直接根据服务别名去获得就能拿到ip,然后根据ip发起通信即可。微服务也是如此,可以参考如下图,我们可以直接通过获得节点/admin/service-admin的值就能拿到对应的ip了。
  2. 发布/订阅模式:这个也是常见的生产者与消费者模式,或者说是监听机制,类似消息队列。可以向一个节点去做一些数据的操作变更,一旦消费者监听到,那么可以去做相关的业务处理。
  3. 分布式配置管理:在分布式系统中,配置文件的同步很常见的。这其实就是统一分布式环境中,集群的所有配置信息全部一致,而且就是基于上面的第2点来实现的,如下图所示:当我往某个节点去写入一段配置信息,那么可以让所有其他的节点监听到,随后同步配置信息到本地。假设有1万台服务器集群,你要运维改会很麻烦,而且容易出问题,现在通过zk就能很好的进行配置信息的同步管理,只需要写入一次,就能让1万台集群自动同步配置,这岂不是美哉!
  4. 服务器节点状态管理:当集群或者分布式环境下,某个服务节点出现问题,可以通知其他节点,以便做一些业务处理。
    并在如果是集群环境,当一个节点宕机下线后,那么服务可以快速做出调成,切换成新的服务ip,以保障集群可用。
  5. (软)负载均衡:既然可以通过zk去管理集群或分布式系统的状态,那么我们完全也可以通过zk去实现负载均衡呀,微服务不就如此吗?

前期接触zk会很陌生,很抽象,但是一旦你自己去实操演练,安装啊,写代码啊,那么就会对zk有一定的理解了。

标签:zk,ip,可以,Zookeeper,集群,原理,机制,数据,节点
From: https://blog.51cto.com/u_10746098/7638556

相关文章

  • 秒懂Zookeeper原理与工作机制
    什么是ZookeeperZookeeper简称zk,先从字面意思上去理解,那就是动物园管理员。其实zk是大数据领域中的一员,为整个分布式环境提供了协调服务,主要可以用于存储一些配置信息,同时也可以基于zk实现集群。它是一个apache的开源分布式中间件。zk和大数据领域结合比较密切,可以管理很多框......
  • 金字塔原理 芭芭拉·明托著 PDF 网盘免费
    金字塔原理芭芭拉·明托著PDF网盘免费下载 链接:https://pan.baidu.com/s/1_JNvPnKvRxxJM9xiaZNA_Q?pwd=7vfa提取码:7vfa 如遇链接失效,请寻访原发布地址:https://www.cnblogs.com/lingyejun/p/17731634.html 本篇文章如有帮助到您,请给「翎野君」点个赞,感谢您的支持......
  • 单片机原理及应用(第四章)小结
    1.C语言中while和dowhile的不同点是什么?while满足条件才会循环dowhile先运行一次再判断条件2.若在C语言中的switch操作漏掉break,会发生什么?会接着执行下一个case无论下一个case满足不满足条件,直至switch结束或遇到break3.编写程序用for循环实现1-20连加......
  • MVCC原理解读
    1.前导知识1.1什么是MVCCMVCC全称Multi-VersionConcurrencyControl,即多版本并发控制,MVCC是一种并发控制的方法,一般在数据库管理系统中,实现对数据库的并发访问,在编程语言中实现事务内存。多版本控制:指的是一种提高并发的技术,最早的数据库系统,只有读读之间可以并发,读写、写......
  • Python中super()的运作机制
    Python中super()的运作机制:super()的定义:defsuper(cls,instance):mro=inst.__class__.mro()returnmro[mro.index(cls)+1]mro(Methodresolutionorder)是python在多继承类中查找目标函数的策略,其采用的是广度优先算法,可通过类的mro方法查看。如下方代码:cla......
  • 堆的原理以及实现O(lgn)
    大家好,我是蓝胖子,我一直相信编程是一门实践性的技术,其中算法也不例外,初学者可能往往对它可望而不可及,觉得很难,学了又忘,忘其实是由于没有真正搞懂算法的应用场景,所以我准备出一个系列,囊括我们在日常开发中常用的算法,并结合实际的应用场景,真正的感受算法的魅力。今天我们就来看看......
  • unet原理学习与记录
    UNET:     左边编码下采样,右边编码上采样。   改进版本认为原始版本融合特征跨度太远,改为就近融合下面有4个损失函数,如果前面三个效果就很好,第四个可以丢掉(剪枝) 数据增强包:albumentations 链接:https://github.com/albumentations-team/albumentations#i-......
  • SSD与vgg目标检测网络原理
    目录:一、SSD二、基于SSD的极速人脸检测三、VGG 一、SSDSSD主干网络结构(SSD是一个多级分类网络)图1 ssd主干网络结构图ssd中的vgg-19网络:SSD采用的主干网络是VGG网络,关于VGG的介绍大家可以看我的另外一篇博客https://blog.csdn.net/weixin_44791964/article/detai......
  • Springboot自动装配原理
    BFPP:BeanFactoryPostProcessorBPP:BeanPostProcessorBDRPP:BeanDefinitionRegistryPostProcessor自动装配实现的原理:当启动springboot应用程序的时候,会先创建SpringApplication的对象,在对象的构造方法中会进行某些参数的初始化工作,最主要的是判断当前应用程序的类型以及......
  • 测试开发想通过python面试环节,必须懂得异常原理
    异常定义异常即是一个事件,该事件会在程序执行过程中发生,影响程序的正常执行。python处理异常的方法 我们先通过一个例子来了解代码中引入异常处理的原因。print('Start')a=10b=0print(a/b)print('End')执行结果Traceback(mostrecentcalllast): File"C:/Users/Kevin/Pycha......