ZooKeeper学习总结 剖析的比牙签还细 入门、复习ZooKeeper的同学看过来

本文深入探讨了ZooKeeper的概念,数据模型,命令操作,Java API在分布式锁中的应用,以及集群搭建与角色。重点讲解了分布式锁原理和集群的Leader选举过程。

目录

ZooKeeper概念

ZooKeeper数据模型

ZooKeeper命令操作

ZooKeeper客户端常用命令

ZooKeeper JavaAPI操作

分布式锁

ZooKeeper分布式锁原理

ZooKeeper集群搭建

ZooKeeper集群介绍

ZooKeeper集群角色

总结


ZooKeeper概念

  • ZooKeeper是Apache Hadoop 项目下的一个子项目,是一个树形目录服务

  • ZooKeeper翻译过来就是动物管理员,它是用来管Hadoop(大象)、Hive(蜜蜂)、Pig(小猪)的管理员。简称zK

  • ZooKeeper是一个分布式的、开源的分布式应用程序的协调服务。

  • ZooKeeper提供的主要功能包括:

    • 配置管理(配置管理作为配置中心使用)

    •  

    • 分布式锁

    •  

    • 集群管理(集群管理作为注册中心使用)

ZooKeeper数据模型

  • ZooKeeper是一个树形目录服务,其数据模型和Unix的文件系统目录树很类似,拥有一个

    层次化结构。

  •  

  • 这里面的每一个节点都被称为:ZNode,每个节点上都会保存自己的数据和节点信息。

  • 节点可以拥有子节点,同时也允许少量(1MB)数据存储在该节点之下。

  • 节点可以分为四大类

    • PERSISTENT 持久化节点

    • EPHEMERAL 临时节点:-e

    • PERSISTENT_SEQUENTIAL 持久化顺序节点:-s

    • EPHEMERAL_SEQUENTIAL 临时顺序节点:-es

ZooKeeper命令操作

ZooKeeper客户端常用命令

  • 创建临时节点

    create -e /节点path value
  • 创建顺序节点

    create -s /节点path value
  • 查询节点详细信息

    ls -s /节点path
  • 其他指令

 

ZooKeeper JavaAPI操作

分布式锁

  • 平时在进行单机应用开发,涉及并发同步的时候,往往采用synchronized或者Lock的方式来解决多线程间的代码同步问题,这时多线程的运行都是在同一个JVM之下,没有任何问题

  • 但当我们的应用是分布式集群工作的情况下,属于多JVM下的工作环境,跨JVM之间已经无法通过多线程的锁解决同步问题。

  • 那么就需要一种更加高级的锁机制,来处理跨机器的进程之间的数据同步问题——分布式锁

 

ZooKeeper分布式锁原理

  • 核心思想:当客户端要获取锁,则创建节点,使用完锁,则删除该节点。

  1. 客户端获取锁时,在lock节点下创建临时顺序节点。(为什么是创建临时的节点呢?答:因为持久化节点在宕机时不会自动删除,临时节点会在宕机时自动删除)

  2. 然后获取lock下面的所有子节点,客户端获取到所有的子节点之后,如果发现自己创建的子节点序号最小,那么就认为该客户端获取到了锁,使用完锁后,将该节点删除。

  3. 如果发现自己创建的节点并非lock所有子节点中最小的,说明自己还没有获取到锁,此时客户端需要找到比自己小的那个节点,同时对其注册事件监听器,监听删除事件。

  4. 如果发现比自己小的那个节点被删除,则客户端的Watcher会收到相应的通知,此时再次判断自己创建的节点是否是lock子节点中序号最小的,如果是则获取到了锁,如果不是则重复以上步骤继续获取到比自己小的一个节点并注册监听。

 

ZooKeeper集群搭建

ZooKeeper集群介绍

Leader选举:

  • Serverid:服务器ID

    比如有三台服务器,编号分别是1,2,3。

    编号越大在选择算法中的权重就越大。

  • Zxid:数据ID

    服务器中存放的最大数据ID,值越大说明数据越新,在选举算法中数据越新权重越大。

  • 在Leader选举的过程中,如果某台ZooKeeper获取了超过半数的选票,则此ZooKeeper就可以成为Leader了。

 

ZooKeeper集群角色

在ZooKeeper集群服务中有三个角色:

  • Leader领导者:

    1. 处理事务请求

    2. 集群内部各服务器的调度者

  • Follower跟随者:

    1. 处理客户端非事务请求,转发事务请求给Leader服务器

    2. 参与Leader选举投票

  • Observer观察者:

    1. 处理客户端非事务请求,转发事务请求给Leader服务器

总结

ZooKeeper本质上就是一个解决分布式系统一致性,为分布式应用程序提供高性能协调服务的工具。现在已经成为了越来越多分布式应用不可或缺的组件。

特点有:

  • 高性能

  • 高可用

  • 严格有序的访问

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

冰忆往昔

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值