Zookeeper(一)用途及原理

当我们在学习一项新技术的时候,首先应了解的就是它是用来干什么的。下面一段话是来自Zookeeper官网的一段解释:

ZooKeeper用于为分布式应用程序提供分布式并且开源的协调服务。它公开了一组简单的原语,分布式应用程序可以基于这些原语来实现用于同步,配置维护以及组和命名的更高级别的服务。

对于不了解Zookeeper的初学者来说,看完是不是很懵逼?所以本文将从程序员的角色出发,引导大家快速的去了解Zookeeper能够用来干什么。以此作为学习Zookeeper的入门,希望能够帮助到大家。

程序该如何设计?

让我们用面向对象的思维去理解

  • 首先让我们抽象一个实体类,将其命名为Node。基于Node创建出的对象我们称之为node。
  • node是实现程序功能最基本的实体对象,它能够存储数据。可以通过创建监听器,监听node的变化,待满足条件后通知客户端,触发相应事件。
  • 多个node可以连接成树形结构。如下图:

]

操作基于node组成的树形模型的方法很简单,无非就是创建node,删除node,监听node等简单的操作

主要用途及实现

在介绍Zookeeper的主要用途前,我们先按不同维度将node对象划分为几种类型。

生命周期维度

  • 临时的(ephemeral):当Zookeeper服务端与创建node客户端的会话结束之后,这个node就会删除。只能够做叶子节点
  • 持久的(persistent):node被创建后,即使断开会话,也依旧存在,直到有删除操作去主动删除node。

节点名称是否具有顺序性

  • 有顺序的(sequential):子节点的名称具有顺序性。例: /app1/p01,/app1/p02 。
  • 普通的,即无序的。

综上,node可分为四大类。持久无序、持久有序、临时无序、临时有序。

到此,我们不妨思考一下,基于node的树形结构以及四种不同的分类,可以实现什么用途呢?

思考倒计时 10…
思考倒计时 9…
思考倒计时 8…
思考倒计时 0…


有没有跟笔者一样,一个都没想出来的同学?没关系,接下来就简明说说Zookeeper到底可以用来干什么?

用于实现分布式锁

获得锁时,无非就是多个客户端,争着抢着去创建同一个node节点,谁第一个创建成功,谁就获得锁。

释放时,抢到锁的客户端就去删除node,然后通知其他需要创建锁的客户端,去再次争抢创建node节点。

正如我们之前介绍的一共有四种类型的node,那么创建时我们该选择哪种类型呢?

如果选择持久node,那当持有该node锁的客户端出现网络故障后,会产生什么问题呢?客户端是不是就无法主动删除node,导致锁无法正常释放了!所以我们应选用临时node,这样即时故障后,node锁也会随着会话结束而删除。

至于有序还是无序的node,则需要根据不同类型的锁来选择。例如:实现非公平独占锁,我们就选择无序;实现公平锁或共享锁,我们就选择有序。实现原理很简单,小伙伴们可以自己稍作思考,本文不再细说。

集群Master选举

Master的选举过程其实类似node锁的创建,删除与监听。

客户端A创建
临时node
客户端B监听
客户端C监听

临时node由客户端A创建,所以客户端A所在服务器当选为master。

提供命名

前面介绍过,node组成了树形结构。类似操作系统中的文件路径,树形分支上的node名称拼接成的全路径,它必定是唯一的。因此我们可以使用node的全路径作为命名方式。

总结

本文作为Zookeeper的入门篇,主要从Node对象的角度讲解了Zookeeper可以用来干么。当然Node的设计还有更多可具体深入的地方。Zookeeper也不仅只有Node,还有更多值得我们学习的知识,例如:Watcher机制,如何保障事务的顺序一致性、集群间数据的一致性,以及必须要知道的ZAB协议等等。

最后祝大家看完此文后能够有所收获!

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值