JavaEE进阶——ZooKeeper和Curator

本文详细介绍了ZooKeeper的工作机制、特点、数据结构和应用场景,阐述了ZooKeeper的选举机制、节点类型、Stat结构体和监听器原理。此外,还探讨了ZooKeeper的下载安装及内部原理。最后,文章提到了ZooKeeper的实战应用,包括客户端命令行操作、原生客户端API和Curator API的使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

I. 简介

ZooKeeper是一个分布式的,提供分布式应用程序协调服务的一个项目。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。

工作机制

ZooKeeper从设计模式角度理解:是基于观察者模式的分布式服务管理框架,它负责存储和管理所有节点都关心的数据,然后接受观察者的注册,一旦这些数据发生变化,ZooKeeper就会通知已经注册了的观察者,观察者可以相应的做出反应。

ZooKeeper=文件系统+通知机制

所以大多数利用ZooKeeper实现的相关功能,都是基于其存储数据的机制加上数据监听的机制。比如利用ZooKeeper给集群中机器进行编号,服务器的动态上下线,分布式锁等等。

特点

ZooKeeper集群中包含四种角色:

  1. Leader:Leader负责进行投票的发起和决议,既能读也能写。
  2. Follower:Follower用于接收客户端请求并向客户端返回结果,只能提供读服务,写请求需转发给Leader节点;同时在选主过程中参与投票
  3. Observer:Observer不参与投票过程,也不参与写操作的“过半写成功”策略,只同步Leader的状态。Observer的目的是为了扩展系统,提高读取速度。
  4. Client:客户端,连接ZooKeeper服务器,请求发起方。

如下是一个ZooKeeper集群示意图,共有7个服务器,其中1个Leader,4个Follower,2个Observer。

ZooKeeper集群

集群有如下特点:

  1. ZooKeeper集群中只有一个Leader,其他的均为Learner,包括Follower和Observer;
  2. 集群中只要有半数以上的节点存活,ZooKeeper就可以正常服务。半数以上特性使得往往集群节点个数为奇数;
  3. 全局数据一致。每个Server保存一份相同的数据副本,Client无论连接到哪个Server,数据都是一致的;
  4. 更新请求顺序执行。来自同一个Client的更新请求按其发送次序顺序执行;
  5. 数据更新原子性。一次数据更新要么成功,要么失败,事务特点。
  6. 实时性。在一定时间范围内,客户端能够读到最新数据,因为数据量小,同步快。

数据结构

ZooKeeper的数据模型的结构与Unix文件系统很类似,整体上可以看做是一棵树,每个节点可以称作一个ZNode,每一个ZNode默认可以存储1MB的数据,每个ZNode都可以通过其路径唯一标识

ZooKeeper的数据结构

应用场景

统一命名服务

分布式应用中,通常需要有一套完整的命名规则,既能够产生唯一的名称又便于人识别和记住。例如:www.baidu.com域名对应的服务器ip地址有很多,域名很容易被识记,ip则很难。那么可以在ZooKeeper服务器上创建一个www.baidu,com的节点,该节点下可以创建所有ip地址名称的子节点,这样就可以统一命名,根据域名得到所有ip。

统一配置管理

分布式环境下,配置文件的同步往往非常常见。一般情况下,对配置文件的修改希望对集群中的每一个节点都生效。所以可以将配置文件上传到ZooKeeper的一个节点中,所有的节点去监听该节点内容变化,当节点内容变

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值