一、前言
首先标题也写了,Zookeeper是主要做分布式系统间协调的一款神器,那么在学习之前先了解下什么是分布式系统:
分布式系统:本质是分布在不同网络或计算机上的程序组件,彼此通过信息传递来协同工作的系统。
那么既然存在通信机制,就需要有一款中间接来协调分布式系统中的各个服务进行有条不紊地联系,Zookeeper就是帮我们实现这个事的。
二、Zookeeper的一些概念
什么是Zookeeper?
定义:一个分布式协调框架,主要是用来解决分布式应用中经常遇到的一些数据管理问题。
应用场景:统一命名服务、状态同步服务、集群管理、分布式应用配置项的管理等。
PS:关于Zookeeper还有一个有意思的说法,由于需要协调各种服务,这些服务就像动物园里的动物一样,所以当时项目就起名叫Zookeeper,意为动物园管理员~??
Zookeeper核心概念
文件系统数据结构
Zookeeper维护一个类似文件系统的数据结构:
由上面的图可以看出,每个子目录项都被称作为znode【目录节点】,和文件系统类似,我们能够*的增加、删除 znode。
znode的类型
- PERSISTENT-【持久化目录节点】 :客户端与zookeeper断开连接后,该节点依旧存在,只要不手动删除该节点,将永远存在。
- PERSISTENT_SEQUENTIAL【持久化顺序编号目录节点】 :客户端与zookeeper断开连接后,该节点依旧存在,只是Zookeeper给该节点名称进行顺序编号。
- EPHEMERAL-【临时目录节点】 :客户端与zookeeper断开连接后,该节点被删除。
- EPHEMERAL_SEQUENTIAL-【临时顺序编号目录节点】 :客户端与zookeeper断开连接后,该节点被删除,只是Zookeeper给该节点名称进行顺序编号。
- Container【容器节点】 :如果Container节点下面没有子节点,则Container节点在未来会被Zookeeper自动清除,定时任务默认60s检查一次【3.5.3+版本】
- TTL【过期时间节点】 :默认禁用,只能通过系统配置zookeeper.extendedTypesEnabled=true开启。【不稳定】
监听通知机制
Zookeeper内有一个监听机制,客户端可以对znode节点添加监听:
- 对某个节点的监听 :当这个节点被删除,或者被修改时,对应的客户端将被通知。
- 对某个目录的监听 :当这个目录有子节点被创建,或者有子节点被删除,客户端将被通知。
- 对某个目录的子节点进行监听 :当这个目录下面的任意子节点有目录结构的变化(有子节点被创建,或被删除)或者根节点有数据变化时,对应的客户端将被通知。
PS:所有的监听都是一次性的,无论是对节点还是对目录进行的监听,一旦触发,对应的监听即被移除。【所以监控中心的原理就是实现循环监听,后面的博客会手写一个出来~】
Zookeeper的一些应用场景
- 1. 分布式配置中心【配置一些系统常量】
- 2. 分布式注册中心【Dubbo】
- 3. 分布式锁【ZK实现分布式锁】
- 4. 分布式队列
- 5. 集群选举【ZAB协议】
- 6. 分布式屏障
- 7. 发布/订阅【kafka】