Zookeeper 简明教程

Zookeeper - Overview

ZooKeeper 是一种分布式协调服务,用于管理大量主机。在分布式环境中协调和管理服务是一个复杂的过程。ZooKeeper 通过其简单的架构和 API 解决此问题。ZooKeeper 使开发人员能够专注于核心应用程序逻辑,而不必担心应用程序的分布式性质。

ZooKeeper 框架最初是在“Yahoo!”构建的,目的是以一种简单而稳健的方式访问其应用程序。后来,Apache ZooKeeper 成为 Hadoop、HBase 和其他分布式框架使用的有组织服务的标准。例如,Apache HBase 使用 ZooKeeper 来跟踪分布式数据的状态。

在我们继续之前,了解分布式应用程序的一些内容非常重要。那么,让我们以分布式应用程序的快速概述开始讨论。

Distributed Application

分布式应用程序可以通过在它们之间进行协调来同时在网络中的多个系统上以快速高效的方式运行,以完成一项特定任务。通常,分布式应用程序可以通过使用所有涉及的系统的计算能力,在数分钟内完成一项复杂且耗时的任务,而一个非分布式应用程序(在一个系统中运行)完成该任务需要数小时。

通过配置分布式应用程序在更多系统上运行可以进一步缩短完成任务的时间。一个分布式应用程序正在运行的系统组称为 Cluster ,在集群中运行的每台机器称为 Node

一个分布式应用程序有两部分, ServerClient 应用程序。服务器应用程序实际上是分布式的,并具有一个共同的接口,以便客户端可以连接到集群中的任何一台服务器并获取相同的结果。客户端应用程序是与分布式应用程序进行交互的工具。

distributed application

Benefits of Distributed Applications

  1. Reliability − 单个或少数系统故障不会导致整个系统故障。

  2. Scalability − 可以在需要时通过在应用程序配置中添加更多机器来提高性能,而无需停机。

  3. Transparency − 隐藏了系统的复杂性,并展示为一个实体/应用程序。

Challenges of Distributed Applications

  1. Race condition − 两台或更多机器试图执行一项特定任务,而实际上在任何给定时间仅需一台机器执行该任务。例如,在任何给定时间仅应由一台机器修改共享资源。

  2. Deadlock − 两个或更多操作无限期地等待对方完成。

  3. Inconsistency − 数据部分故障。

What is Apache ZooKeeper Meant For?

Apache ZooKeeper 是一项服务,由集群(节点组)使用,用于在它们之间进行协调,并以稳健的同步技术维护共享数据。ZooKeeper 本身是一个分布式应用程序,它提供编写分布式应用程序的服务。

ZooKeeper 提供的常见服务如下所示 -

  1. Naming service − 按名称标识集群中的节点。它类似于 DNS,但适用于节点。

  2. Configuration management − 最新且最新的系统配置信息,用于加入节点。

  3. Cluster management − 加入/离开集群中的节点以及实时节点状态。

  4. Leader election − 选举一个节点作为领导者,以进行协调。

  5. Locking and synchronization service − 修改数据时锁定数据。此机制可帮助你在连接其他分布式应用程序(如 Apache HBase)时自动进行故障恢复。

  6. Highly reliable data registry − 即使一到几个节点宕机,也可以获得数据。

分布式应用程序提供了很多好处,但也带来了一些复杂且难以破解的挑战。ZooKeeper 框架提供了一种完整的机制来克服所有挑战。竞态条件和死锁使用 fail-safe synchronization approach 处理。另一个主要缺点是数据不一致,ZooKeeper 使用 atomicity 解决此问题。

Benefits of ZooKeeper

以下是在使用 ZooKeeper 时的优点 -

  1. Simple distributed coordination process

  2. Synchronization − 服务器进程之间的互斥和协作。此过程有助于 Apache HBase 进行配置管理。

  3. Ordered Messages

  4. Serialization − 根据特定的规则对数据编码。确保您的应用程序一致运行。此方法可用于 MapReduce 中,以协调队列来执行正在运行的线程。

  5. Reliability

  6. Atomicity − 数据传输要么完全成功,要么完全失败,但任何事务都不是部分的。