“Zookeeper:概述”的版本间差异
(→分布式) |
(→架构图) |
||
(未显示同一用户的1个中间版本) | |||
第67行: | 第67行: | ||
=== 架构图 === | === 架构图 === | ||
: [[File: | ZooKeeper的“客户端-服务器架构”: | ||
: [[File:Zookeeper:架构.png|600px]] | |||
其中: | |||
* '''Client'''(客户端):分布式应用集群中的一个节点,从服务器访问信息。 | |||
** 对于特定的时间间隔,每个客户端向服务器发送消息以使服务器知道客户端是活跃的。 | |||
** 类似地,当客户端连接时,服务器发送确认码。如果连接的服务器没有响应,客户端会自动将消息重定向到另一个服务器。 | |||
* '''Server'''(服务器):ZooKeeper总体中的一个节点,为客户端提供所有的服务。 | |||
** 向客户端发送确认码以告知服务器是活跃的。 | |||
* '''Ensemble'''(服务器组):ZooKeeper服务器组。形成ensemble所需的最小节点数为3。 | |||
* '''Leader''':服务器节点,如果任何连接的节点失败,则执行自动恢复。 | |||
** Leader在服务启动时被选举。 | |||
* '''Follower''':跟随leader指令的服务器节点。 | |||
=== Zookeeper的主从与主备 === | === Zookeeper的主从与主备 === | ||
第107行: | 第108行: | ||
: 竞争条件和死锁使用故障安全同步方法进行处理。 | : 竞争条件和死锁使用故障安全同步方法进行处理。 | ||
: 数据的不一致性,ZooKeeper使用原子性解析。 | : 数据的不一致性,ZooKeeper使用原子性解析。 | ||
=== 应用程序 === | |||
Zookeeper 为分布式环境提供灵活的协调基础架构。ZooKeeper 框架支持许多当今最好的工业应用程序。 | |||
==== 雅虎 ==== | |||
ZooKeeper框架最初是在“Yahoo!”中构建的。设计良好的分布式应用程序需要满足诸如数据透明度,更好的性能,稳健性,集中配置和协调等要求。所以,他们设计了ZooKeeper框架来满足这些要求。 | |||
==== Apache Hadoop ==== | |||
Apache Hadoop是大数据行业发展的推动力。Hadoop依靠ZooKeeper进行配置管理和协调: | |||
: 假设 Hadoop集群 桥接100个或更多的商品服务器。那么,就需要协调和命名服务。因此涉及大量节点的计算,每个节点需要彼此同步,知道在哪里访问服务器,以及知道如何配置它们。在这个时间点,Hadoop集群需要跨节点服务器。ZooKeeper提供跨节点同步的功能,并确保跨越Hadoop项目的任务被序列化和同步化。 | |||
多个ZooKeeper服务器支持大型Hadoop集群。每个客户端机器与ZooKeeper服务器之一通信以检索和更新其同步信息。一些实时示例如下: | |||
* 人类基因组计划:人类基因组计划包含兆兆字节数据。Hadoop MapReduce框架可用于分析数据集并为人类发展找到有趣的事实。 | |||
* 医疗保健:医院可以存储,检索和分析大量患者医疗记录,通常为兆兆字节。 | |||
==== 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的每个功能,如配置管理,leader选举,节点管理,数据锁定和同步化。 | |||
Solr有两个不同的部分,'''索引'''和'''搜索'''。索引是以适当格式存储数据以便后续可以搜索的过程。Solr使用ZooKeeper对多个节点中的数据进行索引和搜索。ZooKeeper提供以下功能: | |||
* 根据需要添加/删除节点 | |||
* 在节点之间复制数据,随后最小化数据丢失 | |||
* 在多个节点之间共享数据,随后从多个节点搜索以获得更快的搜索结果 | |||
Apache Solr的一些用例包括电子商务,求职搜索等。 |
2021年9月28日 (二) 17:29的最新版本
关于
ZooKeeper 是一种分布式协调服务,用于管理大型主机。
- 在分布式环境中协调和管理服务是一个复杂的过程。ZooKeeper 通过其简单的架构和 API 解决了这个问题。ZooKeeper 允许开发人员专注于核心应用程序逻辑,而不必担心应用程序的分布式特性。
分布式
分布式应用可以在给定时间(同时)在网络中的多个系统上运行,通过协调它们以快速有效的方式完成特定任务。通常来说,对于复杂而耗时的任务,非分布式应用(运行在单个系统中)需要几个小时才能完成,而分布式应用通过使用所有系统涉及的计算能力可以在几分钟内完成。 通过将分布式应用配置为在更多系统上运行,可以进一步减少完成任务的时间。分布式应用正在运行的一组系统称为“集群”,而在集群中运行的每台机器被称为“节点”。
分布式应用有两部分, Server(服务器) 和 Client(客户端) 应用程序。服务器应用程序实际上是分布式的,并具有通用接口,以便客户端可以连接到集群中的任何服务器并获得相同的结果。 客户端应用程序是与分布式应用进行交互的工具:
分布式应用的优点:
- 可靠性 - 单个或几个系统的故障不会使整个系统出现故障。
- 可扩展性 - 可以在需要时增加性能,通过添加更多机器,在应用程序配置中进行微小的更改,而不会有停机时间。
- 透明性 - 隐藏系统的复杂性,并将其显示为单个实体/应用程序。
分布式应用的挑战:
- 竞争条件 - 两个或多个机器尝试执行特定任务,实际上只需在任意给定时间由单个机器完成。例如,共享资源只能在任意给定时间由单个机器修改。
- 死锁 - 两个或多个操作等待彼此无限期完成。
- 不一致 - 数据的部分失败。
CAP 理论
CAP 理论指出对于一个分布式计算系统来说,不可能同时满足以下三点:
- 一致性(Consistency):在分布式环境中,一致性是指数据在多个副本之间是否能够保持一致的特性,等同于所有节点访问同一份最新的数据副本。在一致性的需求下,当一个系统在数据一致的状态下执行更新操作后,应该保证系统的数据仍然处于一致的状态。
- 可用性(Availability):每次请求都能获取到正确的响应,但是不保证获取的数据为最新数据。
- 分区容错性(Partition tolerance):分布式系统在遇到任何网络分区故障的时候,仍然需要能够保证对外提供满足一致性和可用性的服务,除非是整个网络环境都发生了故障。
一个分布式系统最多只能同时以上的两项:P 是必须的,因此只能在 CP 和 AP 中选择。
- zookeeper 保证的是 CP;
- 对比 spring cloud 系统中的注册中心 eruka 实现的是 AP。
BASE 理论
BASE 理论:
- 基本可用(Basically Available):在分布式系统出现故障,允许损失部分可用性(服务降级、页面降级)。
- 软状态(Soft-state):允许分布式系统出现中间状态。而且中间状态不影响系统的可用性。
- 这里的中间状态是指不同的 data replication(数据备份节点)之间的数据更新可以出现延时的最终一致性。
- 最终一致性(Eventually Consistent):data replications 经过一段时间达到一致性。
BASE 理论是对 CAP 中的一致性和可用性进行一个权衡的结果,理论的核心思想就是:我们无法做到强一致,但每个应用都可以根据自身的业务特点,采用适当的方式来使系统达到最终一致性。
Zookeeper
ZooKeeper 是 Apache 软件基金会的一个软件项目,它为大型分布式计算提供开源的'''分布式配置服务'''、'''同步服务'''和'''命名注册'''。 ZooKeeper 框架最初是在“Yahoo!"上构建的,用于以简单而稳健的方式访问他们的应用程序。 后来,Apache ZooKeeper 成为 Hadoop,HBase 和其他分布式框架使用的有组织服务的标准。 例如,Apache HBase 使用 ZooKeeper 跟踪分布式数据的状态。
ZooKeeper 是一个分布式协调服务的开源框架。主要用来解决分布式集群中应用系统的一致性的问题。(例如怎样避免同时操作同一数据造成脏读的问题)
Zookeeper 的设计目标是将那些复杂且容易出错的分布式一致性服务封装起来,构成一个高效可靠的原语集,并以一系列简单易用的接口提供给用户使用。
- ZooKeeper 本质上是一个分布式的小文件存储系统。提供基于类似于文件系统的目录树方式的数据存储,并且可以对树中的节点进行有效管理。从而来维护和监控你存储的数据的状态变化。将通过监控这些数据状态的变化,从而可以达到基于数据的集群管理。
- ZooKeeper 的架构通过冗余服务实现高可用性。
- 分布式应用程序可以基于它实现诸如:数据发布/订阅、负载均衡、命名服务、分布式协调/通知、集群管理、Master 选举、分布式锁和分布式队列等功能。
架构图
ZooKeeper的“客户端-服务器架构”:
其中:
- Client(客户端):分布式应用集群中的一个节点,从服务器访问信息。
- 对于特定的时间间隔,每个客户端向服务器发送消息以使服务器知道客户端是活跃的。
- 类似地,当客户端连接时,服务器发送确认码。如果连接的服务器没有响应,客户端会自动将消息重定向到另一个服务器。
- Server(服务器):ZooKeeper总体中的一个节点,为客户端提供所有的服务。
- 向客户端发送确认码以告知服务器是活跃的。
- Ensemble(服务器组):ZooKeeper服务器组。形成ensemble所需的最小节点数为3。
- Leader:服务器节点,如果任何连接的节点失败,则执行自动恢复。
- Leader在服务启动时被选举。
- Follower:跟随leader指令的服务器节点。
Zookeeper的主从与主备
- 主从:主节点少,从节点多,主节点分配任务,从节点具体执行任务。
- 主备:主节点与备份节点,主要用于解决我们主机节点挂掉以后,如何选出来一个新的主节点的问题,保证我们的主节点不会宕机。
很多时候,主从与主备没有太明显的分界线,很多时候都是一起出现。
Zookeeper 特性
- 全局数据的一致:每个 server 保存一份相同的数据副本,client 无论链接到哪个 server,展示的数据都是一致的。
- 可靠性:如果消息被其中一台服务器接受,那么将被所有的服务器接受。
- 顺序性:包括全局有序和偏序两种:
- 全局有序:是指如果在一台服务器上消息 a 在消息 b 前发布,则在所有 server 上消息 a 在消息 b 前被发布;
- 偏序:是指如果一个消息 b 在消息 a 后被同一个发送者发布,a 必须将排在 b 前面
- 数据更新原子性:一次数据更新要么成功,要么失败,不存在中间状态。
- 实时性:ZooKeeper 保证客户端将在一个时间间隔范围内获得服务器的更新信息,或者服务器失效的信息。
ZooKeeper 提供的服务
- 命名服务 - 按名称标识集群中的节点。它类似于DNS,但仅对于节点。
- 配置管理 - 加入节点的最近的和最新的系统配置信息。
- 集群管理 - 实时地在集群和节点状态中加入/离开节点。
- 选举算法 - 选举一个节点作为协调目的的leader。
- 锁定和同步服务 - 在修改数据的同时锁定数据。此机制可帮助你在连接其他分布式应用程序(如Apache HBase)时进行自动故障恢复。
- 高度可靠的数据注册表 - 即使在一个或几个节点关闭时也可以获得数据。
ZooKeeper框架提供了一个完整的机制来克服分布式应用程序所有的挑战。
- 竞争条件和死锁使用故障安全同步方法进行处理。
- 数据的不一致性,ZooKeeper使用原子性解析。
应用程序
Zookeeper 为分布式环境提供灵活的协调基础架构。ZooKeeper 框架支持许多当今最好的工业应用程序。
雅虎
ZooKeeper框架最初是在“Yahoo!”中构建的。设计良好的分布式应用程序需要满足诸如数据透明度,更好的性能,稳健性,集中配置和协调等要求。所以,他们设计了ZooKeeper框架来满足这些要求。
Apache Hadoop
Apache Hadoop是大数据行业发展的推动力。Hadoop依靠ZooKeeper进行配置管理和协调:
- 假设 Hadoop集群 桥接100个或更多的商品服务器。那么,就需要协调和命名服务。因此涉及大量节点的计算,每个节点需要彼此同步,知道在哪里访问服务器,以及知道如何配置它们。在这个时间点,Hadoop集群需要跨节点服务器。ZooKeeper提供跨节点同步的功能,并确保跨越Hadoop项目的任务被序列化和同步化。
多个ZooKeeper服务器支持大型Hadoop集群。每个客户端机器与ZooKeeper服务器之一通信以检索和更新其同步信息。一些实时示例如下:
- 人类基因组计划:人类基因组计划包含兆兆字节数据。Hadoop MapReduce框架可用于分析数据集并为人类发展找到有趣的事实。
- 医疗保健:医院可以存储,检索和分析大量患者医疗记录,通常为兆兆字节。
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的每个功能,如配置管理,leader选举,节点管理,数据锁定和同步化。
Solr有两个不同的部分,索引和搜索。索引是以适当格式存储数据以便后续可以搜索的过程。Solr使用ZooKeeper对多个节点中的数据进行索引和搜索。ZooKeeper提供以下功能:
- 根据需要添加/删除节点
- 在节点之间复制数据,随后最小化数据丢失
- 在多个节点之间共享数据,随后从多个节点搜索以获得更快的搜索结果
Apache Solr的一些用例包括电子商务,求职搜索等。