当前位置: 首页 > 网络应用技术

动物园管理教程:入门文章

时间:2023-03-07 23:19:59 网络应用技术

  作者的其他平台:

  |CSDN:https://blog.csdn.net/QQ_41153943

  |掘金:https://juejin.cn/user/651387938290686

  |Zhihu:https://www.zhihu.com/people/1024-paper-96

  |github:https://github.com/jiangxia-1024?tab =存储库

  |公共编号:1024笔记

  本文总共有5232个单词,预计将阅读13分钟

  在分布式系统中,注册中心起着重要作用,这是服务发现和客户负载平衡的必不可少的成员。除了实现基本功能的能力外,其注册中心对平稳操作有重大影响整个分布式系统。Dubbo是中国主流分布式系统。支持的注册中心是第三方中间件,例如Zookeeper,NACOS和REDIS。

  高分布式分布式开发技术系统已经非常巨大。不久前,我一直在准备找到工作并参加面试。面试后,可以发现RPC,Dubbo,Zookeeeper,NACOS,Distributed,Microservices等已成为找到工作的工作。最基本的技能要求。

  较早的文章介绍了如何将NACO用作注册中心:SpringCloud:构建NACOS服务和服务发现。不仅被用作注册中心。

  对于Zookeeper而言,其官方文档说明是:它是一个分布式服务框架,是Apache Hadoop的子项目。它主要用于解决分布式应用程序中经常遇到的一些数据管理问题,例如:统一的Namesservice,状态同步服务,群集管理,分布式应用程序配置项目等。它可以理解,Zookeeper是文件系统+监视通知机制。

  今天,我将一起了解Zookeeper。我也是一个学习过程,因此,如果有不正确的地方,欢迎讨论更正!

  随着系统应用程序的扩展和数据的保证,我们的系统经常遇到这些情况:

  如何确保服务器群集中的所有服务器保持共享配置信息的一致性?

  如果机器挂在服务器群集中,其他机器如何感觉到这种变化并接管任务?

  对于分布式系统,如何有效地与多个服务合作以编写相同的网络文件并保持一致性?

  如何在不重新启动集群的情况下完成机器?

  .........

  为了解决上述问题,需要一种类似于线程协作机制的工具来允许每个服务一起工作。Zookeeper就是这样一种工具。

  如上所述,它的官方文档为Zookeeper解释:它是一个分布式服务框架,Apache Hadoop的子项目。:统一的命名服务,状态同步服务,群集管理,分布式应用程序配置项目等。

  因此,可以理解,Zookeeper是一种高性能协调服务,可用于分布式应用程序。它的数据存储在内存中,在日志中耐用。ITS内存结构类似于树状的结构,具有高吞吐量和低延迟的特征。Zookeeper不仅可以帮助我们实现分布式统一配置中心,服务注册,分布式锁等,它们在存储器中维护状态图像,以及持久存储中的事务日志和快照。只要大多数服务器可用,可以使用Zookeeper服务。客户端维护TCP连接,通过此连接发送请求,获得响应,获得监视事件并发送tick。如果您与服务器中断TCP连接,则客户端将连接到其他服务器。因此,您可以简单地认为这是Zookeeper =文件系统+监视通知机制。

  我们还可以理解这一点:Zookeeper的中文表示Zoom+Keeper。动物园管理员的作用是管理动物园中的动物并使它们有序。Zookeeper是Apache下的开源项目。Apache下的许多开源项目实际上使用动物作为图标,例如Hadoop,Hive(Bee),Pig(Pig),Tomcat(Cat)。

  因此,Apache下的项目是动物园,Zookeeper是负责管理这些动物的动物管理员(开源项目)。

  Zookeeper将维护分层的数据结构。它与标准文件系统非常相似:

  上图中的树结构中的每个节点(目录项),例如名称为znode(目录节点)。zonde必须通过路径参考绝对是绝对的,因此它们必须从倾斜字符开始。在添加中,它们必须是唯一的一个,这意味着每条路径仅表示,因此无法更改这些路径。在Zookeeper中,该路径由Unicode字符串组成,并且存在一些限制。String“/zookeeper”用于保存管理信息,例如关键配额信息。

  Znode还具有两个特征:文件和目录。数据结构,例如数据,元信息,访问控制列表)和时间戳像文件一样维护。它也可以用作路径识别的一部分,例如目录,可以自由增加并删除znode。

  每个Znode由三个部分组成:

  Stat:这是状态信息,描述了ZNODE,权威和其他信息的版本

  数据:与Znode关联的数据

  儿童:Znode下的子节点

  应当注意,同一节点下的子节点的名称不能相同,并且名称已标准化。它的路径是相对路径的概念,这是绝对路径。它存储的数据的大小受到限制。

  Zookeeper中有两种类型的节点,即临时节点和持续节点。在创建并且无法更改时,确定节点的类型。

  两个节点之间的区别是要生存是否取决于会话。客户端和Zookeeper服务器之间的连接称为会话。客户端与服务器建立长时间的连接以维护会话。客户端启动时,客户端将首先与服务器建立TCP连接。通过此连接,它可以通过心跳检测来维护与服务器的有效会话,并且也可以将其定向到服务器。Zookeeper Server发送请求并响应。

  (1)临时节点:节点的生命周期取决于其会话的创建。会话结束后,临时节点将自动删除,当然您也可以手动删除。一个客户端,所有客户端仍然可见。此外,Zookeeper的临时节点不允许sub -node.Temporary节点可将其细分为:临时目录节点和临时顺序数字。

  临时目录节点(ephemeral):与Zookeeper断开客户端后,删除了该节点;

  临时订单编号目录节点(ephemeral_sequential):将客户端与Zookeeper断开后,删除了节点,但是Zookeeper给出了节点名称订单号;

  (2)永久节点:该节点的生命周期不取决于会话,并且只有在客户端显示删除操作时才可以删除它们。临时节点可以细分为:持久的目录节点和较长的last -lastrasting订单编号目录nodes节点。

  持续:在客户端与Zookeeper断开连接后,节点仍然存在

  在客户端与Zookeeper断开连接后,该节点仍然存在,但是客户端与Zookeeper断开连接后仍然存在,但是Zookeeper将节点名称命名。

  上面的分类具有一个称为顺序节点的概念:创建节点时,用户可以要求在Zookeeper路径末端添加越来越多的计数。该计数是该节点的父节点唯一的计数。当客户端请求创建此节点时,Zookeeper将根据父节点的ZXID状态为该节点编写一个完整的目录号,并且该编号只会逐渐升高。Essencesuch节点称为顺序节点。

  这也提到了一个称为ZXID的概念:更改Zookeeper节点状态的每个操作都将在此节点中接收ZXID格式的时间戳,并且可以理解,全局订单。节点将生成一个称为ZXID的唯一事务ID。如果ZXID1的值小于ZXID2的值,则可以在与ZXID2的事件发生之前发生的与ZXID1相对应的事件实际上,Zookeeper的每个节点都维持两个ZXID值,而ZXID值,,,,则可以保持两个ZXID值即:czxid,mzxid。

  意识到ZXID是一个64位数。高度为32位。时代用于确定领导关系是否改变。选择了每个领导者,它将有一个新的时代。低32位是一个增量计数。

  Zookeeper提供了多种跟踪时间的方法。Zookeeper向每个更新发布了一个数字(前面提到的ZXID)。该数字反映了所有动物园管理事务的顺序。严格的订单意味着它可以在客户端上实现复杂的同步。在上面提到的ZXID附加中,版本和Zoo.cfg中有TICKS配置。

  版本编号:版本号用于记录节点数据或节点的子节点列表或权限信息的修改数量。如果节点的版本为1,则意味着自建立以来节点已修改一次。

  每个节点都维护三个版本,它们是:

  节点的请求将导致节点的三个版本增加,并且原理类似于乐观。

  tick:zoo.cfg files中的配置。当使用Multi -Server Zookeeper时,服务器使用“ tick”来定义事件的时间,例如上传状态,会话超时等。(默认为滴度x2)。然后客户将不再连接到服务器端

  实时:Zookeeper不使用实时

  因此,可以理解的是,Zookeeper是一个协调员,因此以有序的方式进行一些互动连接!

  高速

  如前所述,Zookeeper的数据已加载在内存中,因此它具有高吞吐量和低潜伏期的效果,并且将其读取为非常快的交易速度,并且操作的大小限制为1M。这些特征是否允许动物园管理器应用于大型分布式系统

  Zookeeper的数据被复制并备份。Zookeeper可以快速构建群集。内部有一些工具和机制。我们只需要设置一些配置即可确保服务可靠,因此它不会成为单个点故障。如下:

  Zookeeper允许用户在指定的节点上注册一些观察器。当数据节点更改时,Zookeeper服务器将将此更改通知发送给感兴趣的客户端。这是Zookeeper的核心功能,并且基于此功能实现了Zookeeper的许多功能。

  如果两个客户端在Zookeeper群集中注册观察器(事件监视器),那么当Zookeeper中的节点数据更改时,Zookeeper将向客户端发送通知。此更改通知将触发预先定义的某些操作从总体上讲,Zookeeper将发送给客户并仅发送一条通知。如果一个手表注册多个接口(存在,getData)同时删除了节点,尽管此时该节点已删除,尽管事件对存在和getData有效,但只能将其调用一次,并且这些请求可能会延迟,因此无法可靠地获取每个节点中发生的每一个更改。触发后将立即删除观看。如果您继续监视更改,则需要继续提供设置。并且可以通过观看之前的观察通知客户端,然后再查看更改结果。

  有4个条件可触发手表事件,创建,删除,更改,儿童(子节点事件)

  因此,您可以按照以下方式总结Zookeeper的特征:

  1.原子能,成功或失败。结果的一部分;

  2.可靠性:除非客户修改数据,否则不会丢失数据的更改;

  3.真实时间:当时系统读取的数据是最新的;

  4.订单:客户的运营有效;

  5.一致性:也称为单个系统图像,无论连接哪个服务器,客户端的内容均相同。

  以上是关于Zookeeper的简要介绍。我也是一个学习过程。对Zookeeper的一些概念和相关的知识点进行了介绍。如果有不正确的地方,欢迎指出,交换讨论!

  关注 - UP将介绍Zookeeper的更多相关内容!

  原始:https://juejin.cn/post/7102650672390078471