zoukankan      html  css  js  c++  java
  • ZooKeeper-概览

    什么是ZooKeeper?

      ZooKeeper是一个集中的服务,用于维护配置信息(其他如Apollo)、命名、提供分布式同步(分布式锁其他如Redis)和提供组服务。

    Zoo Keeper 动物园管理员

      因为协调分布式系统是一个动物园,ZooKeeper是分布式应用的高性能协调服务,它提供服务例如命名、配置管理、同步和组服务。可以使用现成的去实现一致性,组管理,领导人选举,监测集群内各实例的生存状态

    分布式应用程序的分布式协调服务

      ZooKeeper is a distributed, open-source coordination service for distributed applications. ZooKeeper的目的是为了减轻分布式应用程序从头实现协调服务的工作。

      1 设计目标

        Simple

        Zookeeper允许分布式进程共享层次命名空间。The name space called znodes,类似于文件系统的,但是znodes是存储于内存中,这也是Zookeeper为什么能实现高吞吐、低延迟的原因

        Zookeeper注重高性能、高可靠性、严格的访问顺序。

        高性能意味着Zookeeper可以应用在大型分布式系统中;

        高可靠性意味着Zookeeper不会成为不会成为单点故障;

        严格的访问顺序意味着复杂的同步原语可以在客户端实现;

        Replicated ( 重复的 )

        这些Server在内存中维护状态映像,以及持久存储中的事务日志和快照。他们中的大多数工作则Zookeeper工作

        客户端连接到单个ZooKeeper服务器。客户端维护一个TCP连接,通过它发送请求、获取响应、获取监视事件和发送心跳。如果到服务器的TCP连接中断,客户机将连接到另一个服务器

        Ordered

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

        Fast

        在“以读取为主”的工作负载中,它的速度特别快。

      2 数据模型和层次命名空间

        命名空间类似于文件系统,名称是由一条斜线分隔的路径元素序列,ZooKeeper名称空间中的每个节点都由一个路径标识。

        

       3 节点和临时节点

        与标准的文件系统不同,ZooKeeper名称空间中的每个节点都可以拥有与其关联的数据和子节点。这就像一个文件系统允许一个文件同时也是一个目录。

        Znodes维护一个stat结构,其中包含数据更改、ACL更改和时间戳的版本号,以允许缓存验证和协调更新。每当znode的数据发生变化,版本号就会增加。每当客户机检索数据时,它也接收数据的版本。

        在名称空间中的每个znode中存储的数据的读写操作都是原子的。Reads get all the data bytes associated with ( 与…有关系 ) a znode and a write replaces all the data. Each node has an Access Control List (ACL) that restricts ( 约束 ) who can do what.

        ZooKeeper也有临时节点的概念。只要创建znode的会话处于活动状态,这些临时znode就一直存在。当会话结束时,将删除这些临时znode。

      4 条件更新和监控

        Zookeeper支持监控,客户端可以设置一个监控在znode上,当节点发生变化时监控会触发并被移除,此时客户端会收到一个数据包。客户端和Zookeeper的server断开连接时会收到一个本地通知

      5 保证

        顺序一致性:来自客户端的更新操作会严格按照顺序执行

        原子性:更新操作要么全部成功,要么全部失败

        单一系统镜像:无论服务连接到哪个服务器,客户机都将看到相同的服务视图

        可靠性:执行更新操作后将一直生效直到另一个客户端覆盖了本次更新操作

        及时性:保证系统的客户端视图在一定的时间范围内是最新的

      6 简单的API

        create : creates a node at a location in the tree

        delete : deletes a node

        exists : tests if a node exists at a location

        get data : reads the data from a node

        set data : writes data to a node

        get children : retrieves (检索) a list of children of a node

        sync : waits for data to be propagated (传播)

      7 实现

        

         The replicated database ( 复制数据库 ) is an in-memory database containing the entire data tree ( 整个数据树 ) . 更新操作会记录日志到磁盘以防恢复数据,写入操作之前会序列化到磁盘

        Every ZooKeeper server services clients. 客户端仅连接到一个Zookeeper server提交请求。读请求从每个服务器数据库的本地副本获得服务。写请求遵循一致性协议

        作为一致性协议的一部分,所有来自客户端的写请求都被转发到一个名为leader的服务器上。其余的follower服务器接收来自leader服务器的消息就消息传递达成一致性。消息层负责在出现故障时替换领导者,并将追随者与领导者同步。

        ZooKeeper使用自定义原子消息传递协议。因为消息层是原子的,所以ZooKeeper可以保证本地副本不会有不一致问题。当leader收到一个写请求时,它会计算将要应用的写时系统的状态,并将其转换为捕获这个新状态的事务。

     

  • 相关阅读:
    Python之matplotlib库学习
    Linux相关指令和操作
    ubuntu安装vim
    classfication中使用图像金字塔和sliding windows提高准确率
    ubuntu16.04+caffe+python接口配置
    caffe中 softmax 函数的前向传播和反向传播
    cplusplus解析
    ZStack之ZDApp_Init解析
    Z-Stack ZMain学习
    ZigBee协议学习之网络层
  • 原文地址:https://www.cnblogs.com/BINGJJFLY/p/12048704.html
Copyright © 2011-2022 走看看