zoukankan      html  css  js  c++  java
  • 【原】Zookeeper 概述 + 官网 Overview 翻译

    分布式应用

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

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

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

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

    Zookeeper 概述

    分布式应用的优点

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

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

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

    分布式应用的缺点

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

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

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

    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

  • 相关阅读:
    BEM(Block–Element-Modifier)
    http://element.eleme.io/#/zh-CN/component/quickstart
    Commit message 的写法规范。本文介绍Angular 规范(
    好的commit应该长啥样 https://github.com/torvalds/linux/pull/17#issuecomment-5654674
    代码管理
    if you have content fetched asynchronously on pages where SEO is important, SSR might be necessary
    Martin Fowler’s Active Record design pattern.
    The Zen of Python
    Introspection in Python How to spy on your Python objects Guide to Python introspection
    Object-Oriented Metrics: LCOM 内聚性的度量
  • 原文地址:https://www.cnblogs.com/maxiaodoubao/p/9946252.html
Copyright © 2011-2022 走看看