您当前的位置:首页 > 电脑百科 > 程序开发 > 架构

zookeeper架构及工作原理

时间:2021-11-16 09:18:46  来源:  作者:浩仔浩仔

zookeeper动物管理员,是一个很形象的名字,是一个分布式协调服务。它可以用来做分布式配置管理,服务注册及发现,分布式锁。在CAP中,属于CP型。

下图是zookeeper的架构图:

zookeeper架构及工作原理

 

图中,绿色的是client,红色的是一个leader,蓝色的是其follower,红色和蓝色合称为Ensemble(合奏团)。

  • Ensemble:zookeeper集群所有server构成一个Ensemble,要求必须至少3台server。
  • Leader:负责改变zookeeper的状态ZooKeeper state: create, setData, and delete.
  • Follower:负责执行leader的命令。
  • Client:client和server之间有心跳保持连接,如果server挂了zookeeper会自动failover到别的server上去。Client连接后zookeeper都会有相应的session,session就是一次活动的时间段,session中可以有这次活动的变量,client的session从client建立连接开始一直到client断开连接为止。
  • Quorum:集群中过半数的server的数量。比如集群中共有5台机器,那么quorum是5/2+1==3台。

一个zookeeper集群有一个leader,负责读写并把数据复制给follower,follower只负责读。是主从结构。当leader挂掉后,zookeeper可以在200ms内重新选出新leader,可用性比较强。Read操作会从当前连接的server读(但是因为write只需要quorum数量满足即可生效,所以有可能client读的是一台没同步的机器,所以这台机器需要先从leader sync一下再返回),write写操作需要集群里面大多数server都确认后才算ok,大多数指的是过半数。所以写性能随集群数量的增大而下降,读性能随集群数量增大而增加。所以,zookeeper有了observer server,他们不参与选举,不算大多数的一部分,但是可以同步leader的数据扩展读能力且不降低写能力,这样集群增大时不至于降低太多写能力。可见,read和write都需要leader,所以leader挂了整个cluster不能对外提供任何服务。如果集群中不够quorum量,整个cluster也不能对外提供任何服务。

 

zookeeper由leader把数据复制到follower上,同传统数据库类似,zookeeper的每项操作也是有事务的,有事务id,叫做Zxid(zookeeper transaction id,是个递增的数值)。先来看看zookeeper的数据模型,是kv型,其中key是类似于linux的目录树:

zookeeper数据模型遵循分层命名空间,其中每个节点称为Znode,这是群集运行的系统的一部分。和目录不同的是即使中间的znode也能存数据,数据大小不超过1M,同redis一样,存放的数据也是二进制安全的。如下图:

zookeeper架构及工作原理

 

zookeeper的znode节点有3种类型:

zookeeper架构及工作原理

 

  • 持久性Znode:

集合中的所有节点都将自己视为持久性Znode。即使在客户端断开连接后,这些节点仍会保持活动状态。

  • 临时Znode:

这些类型的节点将保持活动状态,直到客户端连接到它们为止。当客户端断开连接时,他们会死亡。这些类型的节点不允许有子节点。

  • 顺序Znode:

它可以是持久性Znode或临时Znode。将节点创建为顺序Znode时,可以通过在原始名称上附加10位序列号来分配Znode的路径。

 

zookeeper如何选择leader呢?每个server启动后都是looking状态,它要么选举一个leader要么找到一个leader。有如下两种情况:

  • 如果leader已经存在了,其他server就会通知它哪台server是leader,然后这台机必须和leader进行沟通以使得自己的state和leader的state保持一致。
  • 如果leader不存在,也就是所有的server都是looking状态,那server必须相互沟通以选举出一个leader。一开始每台server都投票给自己,然后根据规则(voteZxid > myZxid) or (voteZxid = myZxid and voteSid > mySid)决定是否改变自己的投票(比如别人比自己更up to date那就投别人),当收到过半数投票后就会选一个胜出的,简单来说就是most up to date的那台server胜出。

 

zookeeper使用两步法来进行数据的写入。叫做zab协议,zookeeper atomic broadcast,即zookeeper原子广播协议。

具体步骤是这样:

  1. 客户端发起写请求给某台server,server如果不是leader再转给leader。
  2. Leader将客户端请求信息转化为事务Proposal,同时为每个Proposal分配一个事务ID(Zxid)。
  3. Leader为每个Follower单独分配一个FIFO的队列,将需要广播的Proposal依次放入到队列中。
  4. Follower接收到Proposal后,首先将其以事务日志log的方式写入到本地磁盘中,写入成功后给Leader反馈一个ACK响应。
  5. Leader接收到半数以上Follower的ACK响应后,即认为消息发送成功,可以发送Commit消息。
  6. Leader向所有Follower广播Commit消息,同时自身也会完成事务提交。Follower接收到Commit消息后也会完成事务的提交,写入内存,commit后follower自身才有这时的zxid可用于leader挂掉后的leader选举,zookeeper同redis也是内存型的。

 

zookeeper架构及工作原理

 

之所以分为两个阶段,是为了原子性。如果第一个步骤有过半的成功响应,则commit,否则不commit,不会存在中间状态。

另外,之所以要求过半的成功响应,是为了当集群挂掉后数据不会丢失。因为集群再次可用需要过半的server ok状态,因为之前有过半的成功响应,所以此时过半的server ok中必然存在log中保存有commit的数据,数据不会丢失。



Tags:zookeeper   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
一、准备三台机器这里我使用VirtualBox创建3个虚拟机来进行部署zk集群,VirtualBox不了解的可自行百度; 二、部署linux系统此处不讲解linux部署,很简单,百度一下很多教程的部署...【详细内容】
2021-12-08  Tags: zookeeper  点击:(16)  评论:(0)  加入收藏
zookeeper动物管理员,是一个很形象的名字,是一个分布式协调服务。它可以用来做分布式配置管理,服务注册及发现,分布式锁。在CAP中,属于CP型。下图是zookeeper的架构图: 图中,绿色的...【详细内容】
2021-11-16  Tags: zookeeper  点击:(38)  评论:(0)  加入收藏
环境:Spring Boot 2.3.9 + Spring Cloud Hoxton.SR8服务发现注册请参考《SpringCloud Zookeeper服务发现及负载均衡 》zookeeper安装配置请参考《Kafka(zookeeper)环境配置超级...【详细内容】
2021-04-06  Tags: zookeeper  点击:(276)  评论:(0)  加入收藏
ZK(zookeeper)是微服务解决方案中拥有服务注册发现最为核心的环境,是微服务的基石。作为服务注册发现模块,并不是只有ZK一种产品,目前得到行业认可的还有:Eureka、Consul。这里我...【详细内容】
2021-03-04  Tags: zookeeper  点击:(178)  评论:(0)  加入收藏
前三篇讲了Zookeeper的特性、客户端使用和集群原理、典型使用场景实践,本篇重点深入了解ZAB协议以及源码实现的解析。...【详细内容】
2020-10-08  Tags: zookeeper  点击:(85)  评论:(0)  加入收藏
某天程序员小白参加面试:几番苦战之后,面试进入白热化阶段。面试官大开大合,小白见招拆招。一时之间,难解难分,两人对拆数十回合不分胜负。说时迟,那时快,小白的左手像火焰一般炙热...【详细内容】
2020-08-18  Tags: zookeeper  点击:(112)  评论:(0)  加入收藏
一、zk是什么:1、个人理解zk=文件系统+通知机制。2、zk是一个分布式的应用程序协调服务,我理解的就是有两台集器A、B,A对一个数据进行了操作,B是如何知道的,这个就需要zk的支持。...【详细内容】
2020-08-11  Tags: zookeeper  点击:(58)  评论:(0)  加入收藏
典型应用场景Apache HBaseHBase是一个通常与Hadoop一起使用的数据存储仓库。在HBase中,ZooKeeper用于选举一个集群内的主节点,以便跟踪可用的服务器,并保存集群的元数据。Apach...【详细内容】
2020-07-29  Tags: zookeeper  点击:(45)  评论:(0)  加入收藏
如上图所示,kafaka集群的 broker,和 Consumer 都需要连接 Zookeeper。 Producer 直接连接 Broker。Producer 把数据上传到 Broker,Producer可以指定数据有几个分区、几个备份...【详细内容】
2020-06-15  Tags: zookeeper  点击:(124)  评论:(0)  加入收藏
本文主要分享一下zookeeper的一些基本概念,在正式进入正题前,和大家聊一聊刚入行时我的面试经验,可以说是耿直的有些可爱。面试官:用过zookeeper 吗?我:用过啊,给dubbo提供服务的...【详细内容】
2020-04-01  Tags: zookeeper  点击:(141)  评论:(0)  加入收藏
▌简易百科推荐
为了构建高并发、高可用的系统架构,压测、容量预估必不可少,在发现系统瓶颈后,需要有针对性地扩容、优化。结合楼主的经验和知识,本文做一个简单的总结,欢迎探讨。1、QPS保障目标...【详细内容】
2021-12-27  大数据架构师    Tags:架构   点击:(3)  评论:(0)  加入收藏
前言 单片机开发中,我们往往首先接触裸机系统,然后到RTOS,那么它们的软件架构是什么?这是我们开发人员必须认真考虑的问题。在实际项目中,首先选择软件架构是非常重要的,接下来我...【详细内容】
2021-12-23  正点原子原子哥    Tags:架构   点击:(7)  评论:(0)  加入收藏
现有数据架构难以支撑现代化应用的实现。 随着云计算产业的快速崛起,带动着各行各业开始自己的基于云的业务创新和信息架构现代化,云计算的可靠性、灵活性、按需计费的高性价...【详细内容】
2021-12-22    CSDN  Tags:数据架构   点击:(10)  评论:(0)  加入收藏
▶ 企业级项目结构封装释义 如果你刚毕业,作为Java新手程序员进入一家企业,拿到代码之后,你有什么感觉呢?如果你没有听过多模块、分布式这类的概念,那么多半会傻眼。为什么一个项...【详细内容】
2021-12-20  蜗牛学苑    Tags:微服务   点击:(8)  评论:(0)  加入收藏
我是一名程序员关注我们吧,我们会多多分享技术和资源。进来的朋友,可以多了解下青锋的产品,已开源多个产品的架构版本。Thymeleaf版(开源)1、采用技术: springboot、layui、Thymel...【详细内容】
2021-12-14  青锋爱编程    Tags:后台架构   点击:(20)  评论:(0)  加入收藏
在了解连接池之前,我们需要对长、短链接建立初步认识。我们都知道,网络通信大部分都是基于TCP/IP协议,数据传输之前,双方通过“三次握手”建立连接,当数据传输完成之后,又通过“四次挥手”释放连接,以下是“三次握手”与“四...【详细内容】
2021-12-14  架构即人生    Tags:连接池   点击:(16)  评论:(0)  加入收藏
随着移动互联网技术的快速发展,在新业务、新领域、新场景的驱动下,基于传统大型机的服务部署方式,不仅难以适应快速增长的业务需求,而且持续耗费高昂的成本,从而使得各大生产厂商...【详细内容】
2021-12-08  架构驿站    Tags:分布式系统   点击:(23)  评论:(0)  加入收藏
本系列为 Netty 学习笔记,本篇介绍总结Java NIO 网络编程。Netty 作为一个异步的、事件驱动的网络应用程序框架,也是基于NIO的客户、服务器端的编程框架。其对 Java NIO 底层...【详细内容】
2021-12-07  大数据架构师    Tags:Netty   点击:(16)  评论:(0)  加入收藏
前面谈过很多关于数字化转型,云原生,微服务方面的文章。虽然自己一直做大集团的SOA集成平台咨询规划和建设项目,但是当前传统企业数字化转型,国产化和自主可控,云原生,微服务是不...【详细内容】
2021-12-06  人月聊IT    Tags:架构   点击:(23)  评论:(0)  加入收藏
微服务看似是完美的解决方案。从理论上来说,微服务提高了开发速度,而且还可以单独扩展应用的某个部分。但实际上,微服务带有一定的隐形成本。我认为,没有亲自动手构建微服务的经历,就无法真正了解其复杂性。...【详细内容】
2021-11-26  GreekDataGuy  CSDN  Tags:单体应用   点击:(35)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条