zoukankan      html  css  js  c++  java
  • Zookeeper核心概念及读写流程

    简介

    ZooKeeper是一个分布式应用程序协调服务,主要用于解决分布式集群中应用系统的一致性问题。它能提供类似文件系统的目录节点树方式的数据存储,主要用途是维护和监控所存数据的状态变化,以实现对集群的管理。
    ZooKeeper应用场景:

    • 统一命名
    • 配置管理
    • 集群管理
    • 共享锁
    • 队列管理

    基本架构

    Zookeeper集群中角色介绍:

    • Leader:Leader不直接接受client的请求,但接受由其他Follower和Observer转发过来的Client请求,此外,Leader还负责投票的发起和决议,即时更新状态和数据。
    • Follower:Follower角色接受客户端请求并返回结果,参与Leader发起的投票和选举,但不具有写操作的权限。
    • Observer:Observer角色接受客户端连接,将写操作转给Leader,但Observer不参与投票(即不参加一致性协议的达成),只同步Leader节点的状态,Observer角色是为集群系统扩展而生的。

    数据模型(树形结构)

    Zookeeper的数据节点称为ZNode,ZNode是Zookeeper中数据的最小单元,每个ZNode都可以保存数据,同时还可以挂载子节点,因此构成了一个层次化的命名空间,称为树。

    Znode的主要特点如下:
    (1) Znode中仅存储与同步相关的数据,因此数据量很小,大概B到KB量级,例如状态信息、配置内容、位置信息等。
    (2) 一个Znode维护一个状态结构,包括:版本号、ACL(访问控制列表)变更、时间戳。Znode存储的数据每次发生变化,版本号都会递增,这样客户端就可以基于版本号检索相关数据。
    (3) 每个Znode都有一个ACL,用来限定该Znode可以被何种请求访问。 客户端可以在Znode上设置一个观察者(Watcher),如果该Znode上的数据发生变更,ZooKeeper就会通知客户端,从而触发观察者中实现的逻辑的执行。

    节点类型

    ZooKeeper中节点主要有四种类型:

    • 持久节点(PERSISTENT)
    • 持久顺序节点( PERSISTENT _SEQUENTIAL)
    • 临时节点(EPHEMERAL)
    • 临时顺序节点( EPHEMERAL _SEQUENTIAL )

    读写流程

    写流程

    1. 客户端连接到集群中某一个节点,发送一个写请求;
    2. 服务端与客户端所连接的节点,把该写请求转发给leader;
    3. leader处理写请求,等待follower节点返回;
    4. 当leader接收到一半以上的节点(包括自己)返回写成功的信息之后,返回给客户端成功写入。

    读流程

    1. 客户端连接到集群中某一节点;
    2. 读请求,直接返回。

    作者:buildings
    声明 :对于转载分享我是没有意见的,出于对博客园社区和作者的尊重请保留原文地址哈。
    致读者 :坚持写博客不容易,写高质量博客更难,我也在不断的学习和进步,希望和所有同路人一道用技术来改变生活。觉得有点用就点个赞哈。

  • 相关阅读:
    mplayer命令行模式下的使用方法
    CentOS安装wireshark
    CentOS查看系统信息
    测试理论1
    单例模式
    接口测试
    rabbitmq
    redis数据库
    时间模块
    charles抓取数据
  • 原文地址:https://www.cnblogs.com/luengmingbiao/p/13591071.html
Copyright © 2011-2022 走看看