Zookeeper-01丨Zookeeper基础

Posted by jiefang on November 5, 2019

Zookeeper基础

Zookeeper是一个高性能,分布式的,开源分布式应用协调服务。它提供了简单原始的功能,分布式应用可以基于它实现更高级的服务,比如同步,配置管理,集群管理,命名空间。它被设计为易于编程,使用文件系统目录树作数据模型。

数据模型

  • 分层结构
  • 树形结构中的每个节点叫做Znode
  • 每个Znode都有数据(byte[]类型),也可以有子节点
  • 节点路径
    • 斜线分割:/Zoo/Duck
    • 没有相对路径
  • 通过数据结构stat来؂储数据的变化 ACL的变化和时间戳
  • 数据发生变化时,版本号会递增
  • 可以对Znode中的数据进行读写操作 image

    典型应用场景

    数据发布/订阅

    数据发布/订阅即所谓的配置中心:发布者将数据发布到zk的一个或者一系列节点,订阅者进行数据ઌ阅,当数据有变化时,可以及时得到数据的变化通知。 image

    负载均衡

    本质是利用zookeeper的配置管理功能,涉及的步骤为:

  • 1.服务提供者把自域名ٜ及IP 端口的映射注册到zk中
  • 2.服务消费者通过域名从zk中获取到对应的IP及端口,这个IP及端口有多个,只是获取其中一个
  • 3.当服务提供者宕机时,对应的域名与IP的对应就会减少一个映射
  • 4.阿里dubbo服务框架就是基于zk来实服务路由和负载

    命名服务

    在分布式系统中,命名服务(Name Service)也是很重要的服务场景,通过zk也可以实现类似于J2EE中的JNDI的效果ͺ分布式环境下,命名服务更多是资源定位,并不是真正的实体资源,其本质也是用到zk的集中配置管理和查找

    分布式协调/通知

  • 通过Watcher和通知机制实现
  • 分布式锁
  • 分布式事务

    集群管理

  • 当前集群中的机器数量
  • 集群中机器的运行时状态
  • 集群中节点的上下线操作
  • 集群节点的统一配置

Master选举

  • 临时节点
  • 顺序节点

    分布式锁

  • 排他锁
  • 共享锁

    分布式队列

  • FIFO

    基本概念

    集群角色

  • Leader:为客户端提供读和写服务
  • Follower:提供读服务,所有写服务都需要转交给Leader角色,参加选举
  • Observer:提供读服务,不参与选举过程,一般是为了增强zk集群的读请求并发能力

    会话(session)

  • Zk的客户端与zk的服务端之间的连接
  • 通过心跳检测保持客户端连接的存活 – 接收来自服务端的watch事件通知 – 可以设置超时时间

    数据节点(Znode)

  • 不是机器的意思
  • Zk树形结构中的数据节点,用于存储数据
  • 持久节点:一旦创建,除非主动调用删除操作,否则一直存储在zk上
  • 临时节点:与客户端的会话绑定,一旦客户端会话失效,这个客户端创建的所有临时节点都会被移除
  • SEQUENTIAL Znode:创建节点时,如果设置属性SEQUENTIAL,则会自动在节点名后面追加一个整型数字。

    版本

  • Version:当前Znode的版本
  • Cversion:当前Znode的子节点的版本
  • Aversion:当前Znode的ACL(访问控制版本)

    Watcher

  • 作用于Znode节点上
  • 多种事件通知:数据更新,子节点状态等

    ACL

  • Access Control Lists
  • 类似于linux/unix的权限控制
  • CREATE:创建子节点的权限
  • READ:获取节点数据和子节点列表的权限
  • WRITE:更新节点数据的权限
  • DELETE:删除子节点的权限
  • ADMIN:设置节点ACL的权限