📅  最后修改于: 2020-11-28 14:24:00             🧑  作者: Mango
ZooKeeper是一种分布式协调服务,用于管理大量主机。在分布式环境中协调和管理服务是一个复杂的过程。 ZooKeeper通过其简单的体系结构和API解决了这个问题。 ZooKeeper允许开发人员专注于核心应用程序逻辑,而不必担心应用程序的分布式性质。
ZooKeeper框架最初是在“ Yahoo!”上构建的。以轻松,强大的方式访问其应用程序。后来,Apache ZooKeeper成为Hadoop,HBase和其他分布式框架使用的组织服务的标准。例如,Apache HBase使用ZooKeeper来跟踪分布式数据的状态。
在进一步发展之前,重要的是我们了解分布式应用程序的一两件事。因此,让我们从分布式应用程序的快速概述开始讨论。
分布式应用程序可以在给定时间(同时)在网络中的多个系统上运行,方法是相互协调以快速有效地完成特定任务。通常,由分布式应用程序使用所有相关系统的计算功能,可以在几分钟之内完成复杂且耗时的任务,这些任务将由非分布式应用程序运行(在单个系统中运行)完成数小时。
通过将分布式应用程序配置为在更多系统上运行,可以进一步减少完成任务的时间。在其中运行分布式应用程序的一组系统称为“群集” ,在群集中运行的每台计算机称为“节点” 。
分布式应用程序包含两部分,服务器和客户端应用程序。服务器应用程序实际上是分布式的,并且具有公共接口,以便客户端可以连接到群集中的任何服务器并获得相同的结果。客户端应用程序是与分布式应用程序进行交互的工具。
可靠性-单个或几个系统发生故障不会使整个系统发生故障。
可扩展性-可以在需要时通过添加更多机器而对应用程序的配置进行微小更改,而不会造成停机,从而提高性能。
透明度-隐藏系统的复杂性,并显示为单个实体/应用程序。
竞争条件-两台或更多台试图执行特定任务的机器,实际上在任何给定时间只需要一台机器即可完成。例如,共享资源只能在任何给定时间由一台计算机修改。
死锁-两个或多个操作彼此无限期地等待完成。
不一致-数据部分失败。
Apache ZooKeeper是群集(一组节点)用来在它们之间进行协调并使用可靠的同步技术维护共享数据的服务。 ZooKeeper本身就是一个分布式应用程序,提供用于编写分布式应用程序的服务。
ZooKeeper提供的常见服务如下-
命名服务-通过名称识别集群中的节点。它类似于DNS,但用于节点。
配置管理-加入节点的系统的最新配置信息。
集群管理-实时加入/离开集群中的节点以及节点状态。
领导者选举-为协调目的选举一个节点作为领导者。
锁定和同步服务-修改数据时锁定数据。此机制可帮助您在连接其他分布式应用程序(如Apache HBase)时进行自动故障恢复。
高度可靠的数据注册表-即使一个或几个节点出现故障,数据的可用性。
分布式应用程序提供了很多好处,但是它们也带来了一些复杂且难以破解的挑战。 ZooKeeper框架提供了克服所有挑战的完整机制。竞态条件和死锁使用故障安全同步方法处理。另一个主要缺点是数据不一致,ZooKeeper用原子性解决了这一点。
这是使用ZooKeeper的好处-
简单的分布式协调流程
同步-服务器进程之间的互斥和合作。此过程有助于Apache HBase进行配置管理。
有序消息
序列化-根据特定规则对数据进行编码。确保您的应用程序始终运行。可以在MapReduce中使用此方法来协调队列以执行正在运行的线程。
可靠性
原子性-数据传输完全成功或失败,但没有部分事务。