概念
一个分布式协调框架,主要用于分布式场景下的数据管理问题,如:统一命名服务,状态同步服务,集群管理,分布式应用配置项等。
核心概念
1、文件系统的数据结构
数据结构模型:
zookeeper的数据结构是树形结构,每个节点都是像文件目录一样,以“/”开头,如下图所示:

节点类型
zk主要分为六种节点类型,具体如下图所示:

注意:临时节点不能创建子节点。
2、事件监听机制
客户端可以对节点或者目录进行监听,当其他客户端对节点进行修改,会由服务端向客户端发送消息。
客户端监听节点收到数据后,会暂停此次的监听,即监听是一次性的。
应用场景
1、配置中心

2、注册中心

3、分布式锁

使用上面的方式,会产生“羊群效应”,即:当一个节点node被修改,即锁被释放,会通知所有的watch节点,一是这样是非公平锁,另外会对服务器产生较大的压力。可以通过下面的结构创建分布式锁:

按照上面的结构:
1、首先创建一个/lock持久化节点
2、四个请求获取锁时,分布按照顺序创建四个顺序临时节点,并且,后面的节点watch前一个节点。
3、当新的获取锁的请求来时,判断当前节点是否是/lock下的第一个节点。
1)是,则直接获取到锁。
2)否,创建一个顺序节点,监听前一个节点。
4、假设当第一个节点释放锁后,其后的第一个节点通过watch会收到通知,成功获取锁,不会有其他节点进行竞争。
网友评论