分布式应用

分布式应用 distributed application可以在给定时间(同时)在网络中的多个系统上运行,通过协调它们以快速有效的方式完成特定任务。

(a), (b): a distributed system.  (c): a parallel system.

通过将分布式应用配置为在更多系统上运行,可以进一步减少完成任务的时间。分布式应用正在运行的一组系统称为集群,而在集群中运行的每台机器被称为节点

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

分布式应用的优点

  • 可靠性 - 单个或几个系统的故障不会使整个系统出现故障。

  • 可扩展性 - 可以在需要时增加性能,通过添加更多机器,在应用程序配置中进行微小的更改,而不会有停机时间。

  • 透明性 - 隐藏系统的复杂性,并将其显示为单个实体/应用程序。

分布式应用的缺点

  • 竞争条件 - 两个或多个机器尝试执行特定任务,实际上只需在任意给定时间由单个机器完成。例如,共享资源只能在任意给定时间由单个机器修改。

  • 死锁 - 两个或多个操作等待彼此无限期完成。

  • 不一致 - 数据的部分失败。

Apache ZooKeeper定义

官网定义:Apache ZooKeeper is an effort to develop and maintain an open-source server which enables highly reliable distributed coordination.

Apache ZooKeeper 是一个分布式的,开放源码的分布式应用程序协调服务。允许开发人员专注于核心应用程序逻辑,而不必担心应用程序的分布式特性。它是Google的Chubby一个开源的实现,是Hadoop,HBase和其他分布式框架使用的有组织服务的标准。HBase使用ZooKeeper跟踪分布式数据的状态。

Apache ZooKeeper 是由集群(节点组)使用的一种服务,用于在自身之间协调,并通过稳健的同步技术维护共享数据。ZooKeeper本身是一个分布式应用程序,为写入分布式应用程序提供服务。

ZooKeeper 提供的常见服务如下 :

  • 命名服务 - 按名称标识集群中的节点。它类似于DNS,但仅对于节点。

  • 配置管理 - 加入节点的最近的和最新的系统配置信息。

  • 集群管理 - 实时地在集群和节点状态中加入/离开节点。

  • 选举算法 - 选举一个节点作为协调目的的leader。

  • 锁定和同步服务 - 在修改数据的同时锁定数据。此机制可帮助你在连接其他分布式应用程序(如Apache HBase)时进行自动故障恢复。

  • 高度可靠的数据注册表 - 即使在一个或几个节点关闭时也可以获得数据。

ZooKeeper 解决分布式应用缺点的方式
  • 竞争条件和死锁 - 使用故障安全同步方法处理 。
  • 不一致 - 使用原子性解析

官网Overview 的翻译

官网地址

Design Goals(设计目标

  • simple 简单

ZooKeeper 允许分布式进程通过共享的层级命名空间相互协调(这和标准文件系统类似)。名称空间由数据寄存器 znode 组成(这和文件和目录类似)。但是与用于存储的典型文件系统不同,ZooKeeper数据保存在内存中,这意味着ZooKeeper可以实现高吞吐量和低延迟数量

ZooKeeper 的实现非常重视高性能、高可用、严格有序访问。ZooKeeper的性能方面意味着它可以在大型分布式系统中使用。 可靠性方面使确保ZooKeeper不会成为单点故障a single point of failure。严格有序意味着可以在客户端实现复杂的同步原语(synchronization primitives)。

  • replicated 复制

(1)与它协调的分布式进程一样,ZooKeeper本身也可以在一组主机上进行复制,这组主机称为集合(ensemble)。

(2)组成 ZooKeeper服务的服务器必须彼此了解。 它们在内存中维护状态的图像(in-memory image of state),在持久性存储中维护事务日志和快照。只要大多数服务器可用,ZooKeeper服务就可用。
(3)客户端连接到单个ZooKeeper服务器。客户端维护TCP连接,通过该连接发送请求、获取响应、获取监视事件、发送心跳包。 当与服务器的TCP连接中断时,客户端将连接到其他服务器。

ZooKeeper Service
  • ordered 有序

为了反映所有事务的顺序,ZooKeeper用数字标记每个更新。后续操作可以使用该顺序来实现更高级别的抽象,例如同步原语。

  • fast 快速

ZooKeeper 在 读主宰“read-dominate” 工作负载中尤其快速。ZooKeeper应用程序在数千台计算机上运行,并且在读取比写入更常见的情况下表现最佳,比率大约为10:1。

Data model and the hierarchical namespace(数据模型和分层命名空间)

ZooKeeper提供的名称空间非常类似于标准文件系统。 名称是由斜杠(/)分隔的路径元素序列。 ZooKeeper名称空间中每个节点都由路径标识。

ZooKeeper's Hierarchical Namespace

Nodes and ephemeral nodes(节点和临时节点)

(1)与标准文件系统不同,ZooKeeper命名空间中 每个节点都可以包含与之关联的数据以及子项,就像一个允许文件作为目录的特殊文件系统。

(2)ZooKeeper旨在存储协调数据:状态信息,配置,位置信息等,因此存储在每个节点的数据通常很小,在字节到千字节之间。这种数据节点称为 znode。
znode 维护一个状态结构(stat structure),包括数据更新的版本号version number、ACL change、时间戳,以允许缓存验证和协调更新。每次znode的数据更改时,版本号都会增加。当客户端检索数据时,也会接收到数据对应的版本。

存储在命名空间每个znode内的数据读取和写入具有原子性。读取获取与znode关联的所有数据字节,写入会替换所有数据。每个节点都有一个访问控制列表(ACL),限制谁可以做什么。

ZooKeeper也有短暂节点(ephemeral nodes)的概念。仅当创建某个znode的会话处于活动状态时,这个znode才存在。会话结束,znode将被删除。

Conditional updates and watches(有条件的更新和监控 )

ZooKeeper支持监控(watch)的概念。客户端可以在znodes上设置一个监控。当znode更改时,监控会被触发trigger并移除remove。一旦监控被触发,客户端会收到一个数据包告知znode已更改。如果客户端与其中一个ZooKeeper服务器之间的连接中断,客户端将收到本地通知。

Guarantees(保证 )

  • 顺序一致性 Sequential Consistency - 提交到客户端的更新将按顺序执行。
  • 原子性 Atomicity - 更新只有成功或失败两种结果。 没有中间结果。
  • 单一系统映像 Single System Image - 无论服务器连接到哪个服务器,客户端都将看到相同的服务视图。
  • 可靠性 Reliability - 一旦更新被应用,它会从那个时间一直保持到知道被下次更新覆盖。
  • 及时性 Timeliness - 系统的客户视图保证在一定时间内是最新的

Reliability(可靠性)

在7台机器组成的Zookeeper服务上测试,得到结论:

(1)如果 followers 失败并迅速恢复,那么即使失败,ZooKeeper也能够维持高吞吐量。

(2)更重要的是,leader选举算法允许系统足够快地恢复,以防止吞吐量大幅下降。 在我们的观察中,ZooKeeper选择新leader的时间不到200毫秒。

(3)随着 follower 的恢复,ZooKeeper能够在开始处理请求后再次提高吞吐量。

参考:https://www.w3cschool.cn/zookeeper/zookeeper_overview.html

【原】Zookeeper 概述 + 官网 Overview 翻译的更多相关文章

  1. python官网导航翻译

  2. (转)android之Fragment(官网资料翻译)

    Fragment要点 Fragment作为Activity界面的一部分组成出现 可以在一个Activity中同时出现多个Fragment,并且,一个Fragment亦可在多个Activity中使用. ...

  3. android 之Fragment(官网资料翻译)

    原文地址: http://blog.csdn.net/lilu_leo/article/details/7671533 ***************************  正文分割线 ***** ...

  4. android之Fragment(官网资料翻译)

    Fragment要点 Fragment作为Activity界面的一部分组成出现 能够在一个Activity中同一时候出现多个Fragment,而且,一个Fragment亦可在多个Activity中使用 ...

  5. whonix官网部分翻译

    Whonix:一个高安全的方式来Surfing the Internet Whonix是一个桌面操作系统,被设计用于高级安全和隐私.It realistically addresses attacks ...

  6. Spring Security(一):官网向导翻译

    原文出自  https://spring.io/guides/topicals/spring-security-architecture Spring Security Architecture   ...

  7. [Android]官网《UI/Application Exerciser Monkey》中文翻译

    以下内容为原创,欢迎转载,转载请注明 来自天天博客:http://www.cnblogs.com/tiantianbyconan/p/5049041.html 翻译自 Android Develope ...

  8. 卸载 Cloudera Manager 5.1.x.和 相关软件【官网翻译】

    问题导读: 1.不同的安装方式,卸载方法存在什么区别?2.不同的操作系统,卸载 Cloudera Manager Server and 数据库有什么区别? 重新安装不完整如果你来到这里,因为你的安装没 ...

  9. [Android]官网《monkeyrunner》中文翻译

    以下内容为原创,欢迎转载,转载请注明 来自天天博客:http://www.cnblogs.com/tiantianbyconan/p/5050768.html 翻译自 Android Develope ...

随机推荐

  1. 浅析C#中抽象类和接口的区别

    声明方法的存在而不去实现它的类被叫做抽象类(abstract class),它用于要创建一个体现某些基本行为的类,并为该类声明方法,但不能在该类中实现该类的情况.不能创建abstract 类的实例.然 ...

  2. 20165210 Java第五次实验报告

    20165210 实验五 网络编程与安全 网络编程与安全一: 实验要求: 两人一组结对编程: 参考http://www.cnblogs.com/rocedu/p/6766748.html#SECDSA ...

  3. svn的使用流程

    一.安装: 1. 服务器端:VisualSVN_Server 2. 客户端:TortoiseSVN 二.使用VisualSVN Server建立版本库 1. 首先打开VisualSVN Server ...

  4. php str_pad() 用法

    $temp = str_pad("    ", 10000); for($i=0;$i<20;$i++){    echo $temp;    echo $i;    sle ...

  5. C++中cin的使用总结

    在学习C++时大家肯定迷惑过关于输入输出各种输出函数的功能,现在来总结一下各种函数的简单用法. cin建有一个缓冲区,即输入缓冲区.一次输入过程是这样的,当一次键盘输入结束时会将输入的数据存入输入缓冲 ...

  6. C#操作带名称空间的xml

    以前操作xml一般用下面这种方式: 好处是XDocument 能使用linq xmlPath = “path”; XDocument myXDoc = XDocument.Load(xmlPath); ...

  7. 重装Oracle时出现SID已存在问题的解决办法

    重装Oracle时出现SID已存在问题的解决办法    手机打开 注意安装oracle服务器的环境,不稳定导致数据库出现问题,后果很严重! 方法如下: 1.开始->设置->控制面板-&g ...

  8. SqlServer 临时表

    SqlServer中临时表分为两种:一种是局部(本地)临时表,用#TableName表示.一种是全局(服务器)临时表,用##TableName表示. 创建临时表: 1. create table #T ...

  9. UI多线程调用:线程间操作无效: 从不是创建控件"Form1"的线程访问它.

    有两种方式解决 1.在窗体构造函数中写Control.CheckForIllegalCrossThreadCalls =false;2.使用Invoke等委托函数. 问题原因是.net2.0以后拒绝多 ...

  10. 【转】Python自动化测试 (一) Eclipse+Pydev 搭建开发环境

    原文网址:http://www.cnblogs.com/TankXiao/archive/2013/05/29/3033640.html C#之所以容易让人感兴趣,是因为安装完Visual Studi ...