zookeeper入门原理

来源:互联网 发布:'淘宝账户手机无法登陆 编辑:程序博客网 时间:2024/06/13 06:59

近年来,分布式应用越来越广泛,不可避免的要涉及节点之间的同步及协调方面的问题,因此需要一种可靠的、高效的协调机制来统一分布式系统的状态。zookeeper正式分布式系统上解决这类问题的利器。本文简单的说明了zookeeper的原理和应用场景

  • zookeeper的概述
  • 典型的应用场景
  • zookeeper的基本概念

zookeeper的概述

介绍zookeeper的时候避免不了的得说一下这句晦涩的语句:zookeeper是源代码开放的分布式协调服务,是google chubby的开源实现,是一个高性能的分布式数据的一致性解决方案,它可以将那些复杂的、容易出错的分布式一致性服务封装起来,构成一个高效可靠的原语集,并提供一系列简单易用的接口给用户使用。那么zookeeper究竟是做什么的呢?

  • zookeeper是源码开放的。可以免费获取和使用,并且深入的研究,甚至可以根据自己的业务进行修改 。

  • zookeeper是分布式协调服务,用于解决分布式数据的一致性问题。比如:

    顺序一致性:从一个客户端发起的事务请求,最终会严格按照发起的顺序在zookeeper服务器端执行;

    原子性:所有的事务请求的处理结果,在整个集群的所有节点上是一致的;

    单一视图:无论客户端连接到那个zookeeper服务器,看到的数据都是一致的;

    可靠性:一旦服务端成功的应用了一个事务并完成了对客户端的响应,那么这个事务所引起的服务端状态的变更会一直保留下来,知道另外的一个事务改变;

    实时性:zookeeper保证在一段时间内客户端一定能从服务端读取最新的数据状态;

  • zookeeper是高性能的。zookeepr拥有较高的吞吐量。

  • 可以调用zookeeper提供的接口解决一些分布式应用中的实际问题。

    • zookeeper的优势:源码开放;已经被证实是高性能,易用的稳定的工业级产品;广泛的应用:hadoop,hbase,storm,solr

zookeeper典型的应用场景

1. 数据的发布订阅

数据的发布与订阅顾名思义值得就是一方发布数据,另一方获取这些发布的数据即订阅订阅数据。

数据订阅的常用方法有两种:推模式和拉模式。推模式指的是服务器主动向客户端推送消息,拉模式指的是客户端主动去服务器获取数据,一般采用定时轮询的方式。

Zookeeper采用的是推拉结合的方法,发布者将数据发布到zk集群的节点上,订阅者通过一定的方法告诉服务器,其对哪些节点感兴趣,那服务器在这些节点的数据发生变化时,通知客户端,客户端得到通知后去服务器获取数据信息。

2. 命名服务

命名服务用于提供名称,比如数据库表的ID。数据库表一般使用两种ID,一种是自动增长的ID,一种是UUID,这两种ID都有各自的缺点。自动增长的ID,在单表中可以使用,但是不能在分布式环境中使用。UUID可以在分布式环境中使用,但是由于没有规律,难以理解。使用zk可以生成顺序增长的,可以在集群环境中使用的,易于理解的ID。

3. 分布式协调、通知

在众多的大数据项目中使用的比较多的就是心跳机制。在分布式系统中,常常需要知道某个机器是否可用,传统的开发中,可以通过ping某个主机来实现,在ZK中是让所有的主机在ZK上注册一个临时节点,通过查看节点是否在zk上存在,来判断主机是否可达,降低系统的复杂度。

4. 负载均衡

如图,是一个使用zookeeper实现的一个负载均衡的分布式文件系统的例子。

分布式负载均衡的文件系统

  • 首先文件系统在启动时会在zookeeper上注册一个临时节点,临时节点在该文件系统出现问题(如不能访问)的时候,zookeeper上对应的临时节点会自动被删除,因此,zookeeper上的节点列表就表示是最新的可用的文件系统。

  • 然后当客户端需要存储文件的时候,首先去zookeeper集群上得到所有可用的文件系统列表

  • 然后采用一些算法(比如计算各个文件系统的容量),从列表中选择一个文件系统,并与之连接,将数据存储进去,从而实现分布式文件系统的负载均衡

zookeeper的基本概念

1. 集群角色

Leader:整个集群的工作机制中的核心
Follower:集群状态的跟随着
Observer:观察者

2. session

session指的是客户端和zk的连接,通过TCP协议进行连接。通过这个TCP连接,客户端能够通过心跳检测与服务器保持有效的会话,也能向zk服务器发送请求并会的响应。

3. 数据模型

zookeeper的数据模型是一棵树,树的节点就是znode(包括持久节点和临时节点),znode可以保存信息。大多数的zookeeper开发就是和数据节点打交道,对数据节点的增删改查。

zookeeper的树状模型

4. 版本说明

所谓版本号就是对应的值的修改次数

版本类型 说明 version 当前数据节点的数据内容的版本号 cversion 当前数据节点的子节点的版本号 aversion 当前数据节点的ACL变更的版本号

5. Watcher事件监听器

zookeeper允许用户在指定的节点上注册一些watcher,当数据节点发生变化的时候,zookeeper服务器会将这个变化的通知发送给该用户。

6. ACL权限控制

ACL是Access Control Lists 的简写,zookeeper采用ACL进行权限控制,ACL有以下权限:

create:创建子节点的权限

read: 获取节点数据和子节点列表的权限

write:更新节点数据集的权限

delete:删除子节点的权限

admin:设置ACL的权限

1 0
原创粉丝点击