首页 > 技术文章 > zookeeper_1 zookeeper简单介绍

healthinfo 2019-01-29 19:13 原文

一、zk简介

zookeeper是一个高性能<并发数比较高>、分布式的<>,开源分布式应用协调服务<>。基于java语言开发,基于TCP协议暴露端口;

分布式:

  1>多台机器构成,2>它们之间网络通信,有交互关系,3>完成共同的目标对外来讲是一个整体;

  分布式环境下可能存在的问题:

    1>自动协调<多个节点一起完成一个动作>服务(举例:集群成员管理/锁/选主/同步/发布or订阅)

协调服务:

二、zk的数据模型

  分层结构

  树形结构中的每个节点叫做Znode

  每个Znode都有数据(byte[]类型),也可以有子节点

  节点路径<没有相对路径的概念都是绝对路径,以/分割>

   通过数据结构stat来存储数据的变化ACL的变化和时间戳

  数据发生变化时,版本号会递增

  可以对znode中的数据进行读写操作

三、zk典型的应用场景

  1.数据的发布和订阅<类似消息中间件,但是实现机制不同,发布者将数据发布到zk的节点,订阅者进行数据订阅>

  2.负载均衡<并非特别好,与nginx相比的话>  、

    服务提供者把自己的域名及IP端口的映射注册到zk中

    服务消费者通过域名从zk中获取到对应的ip及端口,这个ip及端口有多个但是只获取一个

    当提供者宕机的时候,对应的域名及ip的对应就会减少一个映射

    例如dubbo实现负载均衡

  3.命名服务:

    查找类似J2EE的JNDI的效果,其实是命名查找

  4.分布式协调和通知<类似发布/订阅但是通过watcher来实现的>

    watcher和通知机制

    分布式锁

    分布式事务

  5.集群管理:

   管理内容:

    集群中的机器数量

    集群中机器的运行状态

    集群中节点的上下线操作

    集群节点的统一配置

  6.master选举:

    临时节点

    顺序节点

同一时刻修改相同的数据,但是不同的机器上,这样没办法保证各个机器的一致,所以在主上做操作

  7.分布式锁:zk本身是没有锁的概念的,但是可以通过获得最小id来获得或者创建节点成功的来获得

    排他锁

    共享锁 

  8.分布式队列:一般用消息中间件

    FIFO

集群的管理,分布式锁等等应用的比较多

 四、zk的基本概念

  1.集群角色:

    leader:为客户端提供读和写服务

    follower:提供读服务,写都需要转交leader,参与选举

    observer:提供读服务,不参与选举过程,一般是为了增强zk集群的读请求并发能力

  2.会话(session)

    zk的客户端与zk服务端之间的连接(长连接)

    通过心跳检测保持客户端连接的存活

    接收来自服务端的watch事件通知

    可以设置超时时间

  3.数据节点(znode)

    数据节点用于存储数据

    持久节点:c连接s之后,一旦创建,只能主动调用删除,否则一直存储在zk上

    临时节点:与客户端的会话绑定,一旦客户端会话失效,这个客户端创建的所有临时节点都会被移除;

        客户端会话失效不是tcp断开例如拔掉网线,但是超时关闭会话那么就是一个失效的会话

    sequential znode  顺序的特性;设置属性SEQUENTIAL,则会自动在节点名后面加一个数字

  4.版本;

    version: 当前znode的版本

    cversion:当前节点子节点的版本

    aversion:当前节点acl(访问控制)版本

  5.watcher:(类似于观察者)

    作用于znode节点上

    多种事件通知: 数据更新,子节点状态等。

五.zk的运行情况:可单机可多机

  zk的单机模式:

  zk是基于java开发的,就是普通的java程序;

 

 

    

    

 

 

 

 

 

 

    

推荐阅读