Zookeeper概述

一:什么是Zookeeper?

  ZK是一个开源的分布式协调服务。他提供了一组简单的原生接口,分布式应用可以基于它实现,高水准的同步,集群,配置管理和命名服务。它基于开发,

  使用简单的原则而设计。使用类似于文件系统目录树结构的数据模型。它基于java实现,可以为c和java应用服务。

 

二:他能干什么?

  1、维护配置信息

    在Hadoop中会有数量庞大的节点,它们共用一些配置文件。假如要修改配置文件的话,所有的节点配置文件都要修改。如果

    一个个去修改的话很耗费时间和精力,也不利于管理。Zookeeper提供的这个配置管理,就是把这些公用的配置文件提取出来放到一个地方,

    对这个地方(目录节点)进行监听,一旦配置文件发生变动,每个应用程序都会收到Zookeeper的通知,然后从Zookeeper中获取新的配置文件

    应用到自己的系统中。

  2、命名

    在分布式环境下,经常需要对应用、服务进行统一命名,便于识别。

  3、分布式同步

    在分布式上,如果A要调用B的方法C,C方法也要加锁,但这个锁不能想单服务器那样加,因为这个是分布式调用的方法,不一样。

    就像事务一样,单服务器上的事务和分布式事务不一样。zookeeper提供了一个分布式同步(锁)的方法,使用其提供的,客户可以省了很多事。   

     zookeeper分布式锁的思路:

      进程需要访问共享数据时, 就在”/locks”节点下创建一个sequence类型的子节点, 称为thisPath. 当thisPath在所有子节点中最小时, 说明该进程获得了锁.     
      进程获得锁之后, 就可以访问共享资源了. 访问完成后, 需要将thisPath删除. 锁由新的最小的子节点获得.有了清晰的思路之后, 还需要补充一些细节.
     进程如何知道thisPath是所有子节点中最小的呢? 可以在创建的时候, 通过getChildren方法获取子节点列表, 然后在列表中找到排名比thisPath前1位的节点,
    称为waitPath, 然后在waitPath上注册监听, 当waitPath被删除后, 进程获得通知, 此时说明该  进程获得了锁.

  4、提供组服务

    组服务其实就是集群管理。服务器上的服务注册或者获取服务都是在ZK上操作的,所以所谓的提供组服务也就包括创建组、加入组成员、列出组成员和删除组成员。

    对于这些服务,主要通过zookeeper心跳机制,它会去检测与其连接的一些服务器的数量,以及信息。什么时候连上zookeeper,或什么时候断开都有其心跳机制完成。

  5、软负载均衡

    在ZK中记录每台服务器的访问数,让访问数最少的的服务器去处理最新的客户端请求

 

三:特点

  1、ZK由一个Leader和多个Follower组成

  2、集群中要保证有半数以上节点存活,ZK才能正常服务。

  3、全局数据一致:每个Server保存一份相同的数据副本,Client无论连接到哪个Server上,数据都是一致性的。

  4、数据更新原子性,一次数据更新要么成功要么失败。

  5、更新请求顺序进行,来自同一个Client的更新请求按其发送顺序依次执行。

  6、实时性,在一定时间范围内,Client能读到最新数据。

 

四:数据结构

  ZK数据模型的结构和Unix文件系统类似,整体看作一棵树,每个节点称作一个ZNode.每个ZNode默认能够存储1MB的数据,每个ZNode都可以

  通过其路径唯一标识。

 

posted @ 2020-03-26 19:57  拔丝小红薯  阅读(139)  评论(0编辑  收藏  举报