认识Zookeeper

来源:互联网 发布:陈奕迅热门歌曲知乎 编辑:程序博客网 时间:2024/06/05 07:36

Zookeeper是什么?

Zookeeper是源代码开放的分布式协调服务,由雅虎创建,是google chubby 的开源实现。zookeeper是一个高性能的分布式数据一致性解决方案,它将那些复杂的,容易出错的分布式一致性服务封装起来,构成一个高效可靠的原语集,并提供一系列简单易用的接口给用户使用。

Zookeeper的经典应用场景

1.数据发布、订阅

数据发布/订阅 顾名思义就是一方把数据发布出来,另一方通过某种手段可以得到这些数据 通常数据订阅有两种方式:推模式和拉模式,推模式一般是服务器主动向客户端推送信息,拉模式是客户端主动去服务器获取数据(通常采用定时轮询的方式),ZK采用两种方式相互结合发布者将数据发布到ZK集群节点上,订阅者通过一定的方法告诉服务器,我对哪个节点感兴趣,服务器在这些节点的数据发生变化时,就通知客户端,客户端得到通知后可以去服务器获取数据信息

2.负载均衡

服务器启动的时候会把DB节点挂到ZK上面。ZK分为两种节点,一种是临时节点,一种是长久节点。如果长久节点挂掉了,会和临时节点建立连接。采用随机算法,访问节点。

1.临时节点出现问题的时候,节点会自动的从ZK上删除,那么ZK服务器列表就是最新的可用列表。
2.客户端随机与之建立连接。

3.当客户端发现不可用的时候可再次从ZK上获取可用的DB信息,当然也可以在刚获取的哪个列表里移除掉不可用的连接后再随机选择一个DB与之连接。


3.命名服务

顾名思义,就是提供名称的服务,例如数据库表格ID,一般用的多的用两种ID,一种是自动增长的ID,一直是UUID。两种ID各有缺陷,自动增持的ID局限在单库,单表中使用,不能再分布式环境下使用,UUID可以在分布式中使用,但是ID没有规则难以理解,而且字段较多。我们可以借用ZK来生成一个顺序增长的,可以在集群环境下使用的,命名易于理解的ID。

4.分布式协调/通知

心跳检测
在分布式系统中,我们常常需要知道某个机器是否可以用,传统的开发中,可以通过pin g某个主机来实现,ping得通说明对方是否可用的,相反是不可用的,ZK中我们让所有的机器都注册一个临时节点。然后看哪个机器的服务没有被挂上,就证明哪个机器有问题

Zookeeper 特点

  • 顺序一致性:按照客户端发送请求的顺序更新数据。
  • 原子性:更新要么成功,要么失败,不会出现部分更新。
  • 单一性 :无论客户端连接哪个server,都会看到同一个视图。
  • 可靠性:一旦数据更新成功,将一直保持,直到新的更新。
  • 及时性:客户端会在一个确定的时间内得到最新的数据。
Zookeeper的基本概念

1.集群角色

leader,follower,observer

leader服务器是整个ZOOKEEPER 集群工作机制中的核心

follower 服务器是Zookeeper集群状态的跟随者

observer 服务器充当一个观察者的角色

leader,follower 设计模式

observer观察者设计模式


2.会话

会话是指客户端和zookeeper副武器的链接,zookeeper中的会话叫session,客户端与服务器建立一个TCP的长链接来维持一个Session,客户端在启动的时候首先会与服务器建立一个TCP连接,通过这个连接,客户端能够通过心跳坚持与服务器的有效性,也能向ZK服务器发送并获得相应。

3.数据

zookeeper中的节点有两类
1.集群中的一台机器称为一个节点
2.数据模型中的数据单元Znode,分为持久节点和临时节点Zookeeper的数据模型是一棵树的节点是Znode,znode中可以保存信息。

4.版本

versio  当前数据节点内容的版本号

cversion 当前数据节点子节点的版本号

aversion 当前数据节点ACL变更版本号

5.watcher

事件监听器
Zookeeper允许用户在指定节点上注册一些watcher,当数据节点发生变化的时候,zookeeper服务器会把这个变化的通知发送给感兴趣的客户端。

6.ACL权限控制

ACL 是access Control lists的简写,zookeeper采用ACL策略来进行权限控制,有一下权限。
CREATE:创建子节点的权限
READ:获取节点数据和子节点列表的权限
WAITE:更新节点数据的权限
DELETE:删除子节点的权限
ADMIN:设置节点ACL的权限


0 0
原创粉丝点击