Zookeeper之-初入江湖
Posted 毫末之木
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Zookeeper之-初入江湖相关的知识,希望对你有一定的参考价值。
ZooKeeper是一个分布式协调服务来管理大量的主机。协调和管理在分布式环境的一个服务是一个复杂的过程。ZooKeeper 简单解决了其结构和API这个问题。ZooKeeper允许开发人员能够专注于核心应用程序逻辑,而无需担心应用程序的分布式特性。
ZooKeeper框架始建于“雅虎”,一个简单而强大的方法用于访问应用程序。后来 Apache ZooKeeper 成为用 Hadoop,HBase 的组织服务以及其他分布式架构的标准。例如,Apache HBase 使用 ZooKeeper 跟踪分布式数据的状态。
在进一步向前,我们知道有关分布式应用程序的一两件事情。所以,我们不如用分布式应用程序来快速概览开始讨论。
分布式应用程序
分布式应用程序可以通过在它们之间协调以完成特定的任务,快速且有效的方式在多个系统中的网络在给定时间(同时)运行。通常,复杂的和耗时的任务,这将需要几个小时由非分布式应用程序(在一个系统上运行)来完成,可以在几分钟内由分布式应用程序通过使用所有所涉及的系统的计算能力来完成。
完成任务的时间可以通过配置分布式应用到更多的系统上运行来进一步降低。一组在分布式应用程序正在运行的系统被称为集群,在群集中运行的每台机器被称为节点。
分布式应用程序有两部分,分别是:服务器和客户端应用程序。服务器应用程序实际上是分布式的,有一个共同的接口,这样客户端可以连接到集群中的任何服务器,并得到同样的结果。客户端应用程序用一个分布式应用程序交互工具。
分布式应用程序的好处
可靠性 − 单个或几个系统的故障不会使整个系统失效。
可扩展性 − 性能可以在无需停机的应用程序的微小配置变化来在需要时增加更多的机器。
透明性 − 隐藏了系统的复杂性并表现为一个单一的实体/应用程序。
分布式应用程序的挑战
竞争条件 − 两个或更多的机器试图执行特定任务,这实际上需要将仅由一台机器在任何给定的时间内完成。例如,共享资源只能由一台机器在任何特定时间进行修改。
死锁 − 两个或更多的操作等待对方无限期完成。
不一致性 - 数据部分失败。
Apache ZooKeeper 意味着什么?
Apache ZooKeeper是由群集(组节点)之间进行相互协调,并保持强大的同步技术共享数据的服务。ZooKeeper本身是一个分布式应用写入分布式应用提供服务。
ZooKeeper 提供的通用服务如下-
命名服务 − 确定在一个集群中的节点的名字。它类似于DNS,只不是过节点。
配置管理 − 系统最近加入节点和向上最新配置信息。
集群管理 − 加入/节点的群集和节点状态实时离开。
节点领导者选举 − 选举一个节点作为领导者协调的目的。
锁定和同步服务 − 锁定数据,同时修改它。这种机制可以帮助自动故障恢复,同时连接其它的分布式应用程序。如Apache HBase。
高可靠的数据注册表 − 一个或几个节点的可用性的数据向下。
分布式应用程序提供了很多好处,但他们也带来了一些复杂的,难以破解的挑战。ZooKeeper框架提供了完整的机制来克服所有挑战。竞争条件和死锁使用故障安全同步的方式进行处理。另一个主要缺点是不一致的数据,ZooKeeper 使用原子性解决。
ZooKeeper的优点
下面是使用 ZooKeeper 的好处 -
简单的分布式协调过程
同步 − 互斥和服务器进程之间的合作。这个过程有助于Apache HBase 的配置管理。
有序消息
序列化− 根据特定的规则进行编码数据。确保应用程序不断地运行。这种方法可以用来在MapReduce的协调队列以执行正在运行的线程。
可靠性
原子性 − 数据传输成功或完全失败,但没有事务处理部分。
在深入学习ZooKeeper工作之前,让我们一起来看看ZooKeeper 的一些基本概念。我们将在本章讨论下列主题 -
体系结构
分层命名空间
会话
监控
ZooKeeper的体系结构
看看下面的图。它描绘ZooKeeper 的“客户端 - 服务器架构”。
ZooKeeper 架构的一部分组件如下表中所解释。
部分 | 描述 |
---|---|
Client | 客户端,在我们的分布式应用集群的一个节点,从服务器获取信息。对于一个特定的时间间隔,每个客户端将消息发送到服务器,以让服务器都知道客户机是活的。 同样,服务器会发送一个确认当客户端连接。如果没有从所连接的服务器的响应,客户端自动重定向消息到另一个服务器 |
Server | 服务器,ZooKeeper集成的一个节点,提供所有的服务提供给客户。给出应答客户,告知该服务器还活着 |
合组 | ZooKeeper 服务器组。节点所需要形成的合奏的最小数目为3 |
Leader | 它执行自动恢复,如果任何连接的节点的故障的服务器节点。领导者服务启动 |
Follower | 遵循领导指示服务器节点 |
分层命名空间
下图显示了用于内存中表示 ZooKeeper 文件系统的树形结构。 ZooKeeper节点被称为znode。每个znode由一个名称识别,并通过路径(/)序列隔开。
在图中,首先有一个根znode,它由“/”分隔。在根下,有两个逻辑命名空间 config 和 workers。
在config命名空间用于集中配置管理以及 workers 命名空间用于命名。
在 config 命名空间下,每个znode可以存储高达 1MB 的数据。这类似于UNIX文件系统,不同的是父 znode 也可以存储数据。这种结构的主要目的是存储同步数据以及描述znode的元数据。这种结构被称为 ZooKeeper数据模型。
在 ZooKeeper 数据模型中每个 znode 维护一个 stat 结构。 一个统计(stat )只是提供了一个 znode 元数据。 它由版本号,动作控制列表(ACL),时间戳和数据长度组成。
版本号 − 每个znode都有一个版本号,这意味着每个相关的时间使用节点改变数据,其相应的版本号也将增加。使用版本号是重要的,在多个 zookeeper 的客户端正在努力通过相同znode执行操作。
动作控制列表(ACL) −ACL是基本的身份验证机制,用于访问znode。它管理所有的znode读写操作。
时间戳 − 时间戳表示过去时间,从znode创建和修改起算。它通常以毫秒表示。ZooKeeper 确定每次从“事务ID”(zxid)更改znodes。Zxid是独特的,为每个事务处理维持时间,使您可以轻松地识别从一个请求到另一个请求经过的时间。
数据长度 − 存储在 znode 数据的合计量是数据长度。可以存储的最大数据容量为1MB。
Znodes 类型
Znodes 被归类为持久性,顺序和短暂。
持久性znode − 持久性 znode 处于活动状态,即使客户端,它创造了特定的 znode。默认情况下,所有的 znodes 是持久的,除非另有说明。
短暂znode − 短暂znodes活跃,直到客户端还活着。当客户端被从 ZooKeeper 集合断开连接,然后znodes自动删除。由于这个原因,只有短暂znodes不允许再有一个子。如果短周期znode被删除,那么下一个合适的节点,将填补其位置。短暂znodes 发挥在领导选举中起重要作用。
连续znode − 连续znodes可以是持久或短暂的。当一个新的znode作为连续znode创建的,则 ZooKeeper 通过将10位的序列号为原始名称设置znode的路径。例如,如果使用路径 /myapp 来创建一个znode作为连续znode,ZooKeeper将改变路径 /myapp0000000001并设置一个序列号为0000000002。如果两个连续znodes同时被创建,ZooKeeper从来不使用相同数量在每个znode上。连续znodes在锁定和同步中起到重要作用。
会话
会话对于 ZooKeeper 操作是非常重要的。请求在会话 FIFO 顺序执行。当一个客户端连接到服务器,会话将建立一个会话ID并分配给客户端。
客户端在特定的时间间隔发送心跳来保持会话有效。如果 ZooKeeper 从客户端接收检测信号超过在服务的开始指定的期间(会话超时),它认为该客户死亡。
会话超时通常以毫秒表示。当一个会话因任何原因而结束,该会话期间短暂创造了的 znodes 会被删除。
监视
监视是一个简单的机制,在ZooKeeper集合通知下以获取客户有关的变化。 客户端可以设置监视,同时读取特定znode。监视发送通知给注册的客户机对任何znode(在其上的客户端寄存器)的变化。
节点改变时znode或子znode变化相关联的数据也会被修改。监视只被触发一次。如果客户想要再次通知,则必须通过另一次读操作来完成。当一个连接会话已过期,客户端会从服务器断开,并在相关的监视也将被删除。
Zookeeper的一些应用案例
Zookeeper 为分布式环境灵活协调提供基础架构。ZooKeeper框架支持许多当今许多工业应用。我们将在本章中讨论一些 ZooKeeper 显着的应用。
Yahoo!
ZooKeeper框架始建于“雅虎”。一个设计良好的分布式应用需求,满足需求,如数据的透明度,更好的性能,稳定性,集中配置和协调性。所以,他们设计了ZooKeeper框架来满足这些要求。
Apache Hadoop
Apache Hadoop是大数据行业的增长背后的驱动力。Hadoop依赖ZooKeeper的配置管理和协调。让我们举一个场景来了解 ZooKeeper 在 Hadoop 中的作用。
假设一个Hadoop集群桥接100以上的商用服务器。因此,有必要协调和命名这些服务器。由于大量节点的计算都参与其中,每个节点都需要互相同步,知道在哪里获得服务,并知道应该如何配置。在这个时间点上,Hadoop集群需要跨节点服务。ZooKeeper提供了跨节点同步的设备,确保整个的Hadoop项目的任务是序列化和同步的。
多重ZooKeeper服务器支持大型 Hadoop 集群。每个客户机与 ZooKeeper 的其中一个服务器通信,以检索和更新其同步信息。一些实时实例如下 -
人类基因组计划 − 人类基因组计划中包含TB级别的数据。Hadoop的MapReduce框架可以用来分析数据集,并找到对人类发展有趣的事情。
卫生保健 − 医院可以存储,检索和分析大量套门诊病历,通常都在TB级。
Apache HBase
Apache HBase是一个开源的,分布式的, 用于实时NoSQL数据库读取的大型数据集/写访问,并运行在HDFS之上。 HBase如下主从架构,HBase主管理所有的从服务。从服务被称为区域服务器。
HBase 分布式应用程序的安装取决于ZooKeeper运行的集群。Apache HBase 使用ZooKeeper 与集中配置管理,分布式互斥机制的帮助下跟踪分布式数据的整个主区域服务器的状态。下面是一些HBase的用例 -
电信业 − 电信业存储数十亿的手机通话记录(大约30TB/月),访问这些通话记录实时成为一项艰巨的任务。HBase可用于所有记录的实时处理,容易且有效。
社交网络 − 类似电信业,网站如Twitter,LinkedIn和Facebook通过用户创建的帖子内容接收大量数据。HBase 可以用来找出最近的趋势和其他有趣的事实。
Apache Solr
Apache Solr是用Java编写实现快速,开源的搜索平台。这是一个速度极快,容错分布式搜索引擎。建立在Lucene之上,它是一个高性能,全功能的文本搜索引擎。
Solr被广泛使用在ZooKeeper的每一个功能,如配置管理,领导人选举,节点管理,锁定和数据的同步。
Solr有两个不同的部分,索引和搜索。索引是将数据存储在一个适当的格式,以便它可以在以后检索处理。Solr使用ZooKeeper为索引数据在多个节点,并从多个节点中搜索。ZooKeeper 分布有以下特点-
在需要的时候添加/删除节点
最小化数据丢失并随后复制节点数据
共享多个节点之间的数据,并从多个节点更快的搜索结果
一些Apache Solr实现用例包括电子商务,求职等。
以上是关于Zookeeper之-初入江湖的主要内容,如果未能解决你的问题,请参考以下文章