zookeeper

zookeeper

分布式协调框架,是一个用于存储少量数据,基于内存的数据库

用于:分布式锁,分布式注册中心,分布式配置中心等

主要概念:文件系统数据结构、监听机制

zookeeper_第1张图片

每个节点下可以存储数据,就是类似于文件目录

几点(目录)类型:

1.持久化节点:只要不删除,则永久存在

2.持久化顺序节点:创建的时候,会自动加上编号,例如从X-000000开始从小到达排序。

3.临时节点:客户端与服务端断开连接,自动删除,不能创建子节点。

4.临时顺序节点:断开连接,节点也会自动删除,同样不能创建子节点(可用于分布式锁)。

5.Container节点:子节点删除,container会自动删除。默认60s检测一次是否有子节点。

6.TTL节点:过了指定时间会自动清除,默认关闭。

监听机制:

1.设置对某个节点的监听,当节点被删除或者内容修改,对应的客户端会收到通知

命令:get -w /path

2.设置对某个目录监听,当目录下有子节点创建或删除,对应的客户端会收到通知

命令:ls -w /path

3.设置对某个目录的的递归子节点的监听,当目录下的人员子节点有目录结构的变化(子节点的创建或者删除),对应的客户端会收到通知

命令:ls -R -w /path

通知是一次性的,如果想继续监听,则需要重新设置监听

节点监听和目录监听的区别:

节点监听的是节点的删除和节点内容的修改

目录监听的是目录结构的改变,对目录下的节点中的内容的修改不监听

zookeeper集群

zookeeper_第2张图片

Leader:负责读写

Follower:负责读,并参数Leader选举

Observer:只负责读,不参与Leader选取

分布式锁

zookeeper_第3张图片

 当并发量比较大时,可能有大量连接都处在监听/lock节点的状态,当锁释放后,要通知所有的监听的连接,即产生羊群效应,性能下架,属于非公平竞争。

可以用公平锁解决羊群效应,即:每个连接都会在/lock节点下产生一个临时顺序节点,先判断是否是/lock下最小的节点,是的话获取锁,不是的话只能监听前一个节点,节点被删除,通知下一个节点,此节点判断是否为最小的节点,是的话获取锁,否则监听前一个节点。

zookeeper_第4张图片

前面两种都是用了互斥锁,同一时间只能有一个请求占用,并发上来性能也会下降 

可以采用共享锁

zookeeper_第5张图片

 特点:

  1. 当前读不会监听上一个读
  2. 当前读监听离自己最近的写
  3. 当前写监听上一个节点(不管是读还是写)

 解决了:读读不会加锁

Zookeeper选举流程

https://www.processon.com/view/link/626f3a171e08535fe5428996

你可能感兴趣的:(zookeeper,数据库,分布式)