zookeeper原理

一、简介

ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。

ZooKeeper代码版本中,提供了分布式独享锁、选举、队列的接口,代码在zookeeper-3.4.3\src\recipes。其中分布锁和队列有Java和C两个版本,选举只有Java版本

二、为什么要使用zk

1.应用或多或少都有一些配置信息,如果应用部署在多台机器上,一旦涉及修改配置参数,我们需要到各个机器上一个一个修改,重复工作且容易出错,可以将配置信息放在zookeeper上,应用监听对应节点数据,一旦配置信息发生变化,zookeeper会通知应用进行变更

2.涉及多个系统调用,如果一个系统地址变更,需要同时通知所有调用方,可以将服务注册在zookepper上,调用该系统服务的系统只需要监听对应节点数据,即可获取最新地址进行调用,dubbo使用zookeeper来注册服务

三、数据模型和分层命名空间

ZooKeeper提供的名称空间非常类似于标准文件系统。名称是由斜杠(/)分隔的路径元素序列。ZooKeeper名称空间中的每个节点都由路径标识。与标准文件系统不同的是,ZooKeeper命名空间中的每个节点都可以包含与之关联的数据以及子项。节点既可以是一个文件也可以是一个目录的文件系统。(ZooKeeper旨在存储协调数据:状态信息,配置,位置信息等,因此存储在每个节点的数据通常很小,在字节到千字节范围内。)我们使用术语 znode来表明我们正在谈论ZooKeeper数据节点。

我们能够自由的增加、删除znode,在一个znode下增加、删除子znode,唯一的不同在于znode是可以存储数据的。 

三、四种类型的znode 

1、PERSISTENT-持久化目录节点 
客户端与zookeeper断开连接后,该节点依旧存在 

2、PERSISTENT_SEQUENTIAL-持久化顺序编号目录节点 
客户端与zookeeper断开连接后,该节点依旧存在,只是Zookeeper给该节点名称进行顺序编号 

3、EPHEMERAL-临时目录节点 
客户端与zookeeper断开连接后,该节点被删除 

4、EPHEMERAL_SEQUENTIAL-临时顺序编号目录节点 
客户端与zookeeper断开连接后,该节点被删除,只是Zookeeper给该节点名称进行顺序编号

可以根据不同的业务场景进行选择使用不同的znode

四、通知机制

这个是zk的一个重要机制,客户端注册监听它关心的目录节点,当目录节点发生变化(数据改变、被删除、子目录节点增加删除)时,zookeeper会通知客户端。

五、zk保证

ZooKeeper非常快速且非常简单。但是,由于其目标是构建更复杂的服务(如同步)的基础,因此它提供了一系列保证。这些是:

1.顺序一致性 - 客户端的更新将按发送顺序应用。

2.原子性 - 更新成功或失败。没有部分结果。

3.单系统映像 - 无论服务器连接到哪个服务器,客户端都将看到相同的服务视图。

4.可靠性 - 一旦应用了更新,它将从那时起持续到客户端覆盖更新。

5.及时性 - 系统的客户视图保证在特定时间范围内是最新的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值