zookeeper现在已经是一个非常成熟的分布式协调框架,作为一个保证CP的框架来讲,zk满足很多业务场景,也有相当不错的可靠性,那么zk是怎么完成这些任务的?
首先zk的诞生是为了协调分布式服务,用官方的定义来讲
A Distributed Coordination Service for Distributed Applications
一个为分布式应用准备的分布式协调框架。
其实简单来说,zk的功能上十分的简单,zk本身维护了一个类似目录结构的节点系统,提供对这些节点的监听能力。
好了,就这一句话,是不是看起来很简单!
单独说到节点,zk提供了四种不同类型的节点来为调用方使用。
- 持久化节点
- 临时节点
- 持久化顺序节点
- 持久化临时节点
监听能力,也分为监听某个节点的变化,监听某个节点的子节点变化等。
通过这两种基础能力的组合,我们就能玩出来很多花样,比如最简单的,我们如果需要一个分布式ID,那么简单的办法就是让不同的服务器去zk上注册临时节点,注册到的节点顺序拿回来就可以当做一个分布式唯一id来使用了。
再比如,我们要实现一个分布式锁,也可以通过让资源竞争方去zk上注册临时节点,注册成功的调用方,就拿到了锁,其他的调用方监听这个临时节点的变化,如果临时节点消失,那么重新抢占注册临时节点,就完成了分布式锁的实现。
其他诸如master选举,服务注册,共享锁,等等分布式的场景,都可以通过节点加监听的形式来得到很好的解决,所以从今天开始,开一个新坑,来进行zk的相关知识整理及归纳。