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