zookeeper笔记

 zookeeper定义为分布式应用程序协调服务,它的存储结构很类似与文件系统的结构,以节点的形式存储数据。

 

zookeeper三种角色

leader/follower/observer  其中主从区分是看哪个节点最先启动注册,observer的职责跟slave很像,但它不参与投票机制,例如主从更新数据是需要投票成功才更新的,所以节点多了会性能下降,observer可以很好支持扩展并解决这个问题。

 

zookeeper特性

Zookeeper客户端api

原生jdk-api:

缺点:没有封装递归创建父节点、递归删除子节点的函数,删除节点顺序不会容易出异常;建立连接由于是异步,瞬时可能获取不到连接对象,使用性较差。

 

zkclient:

原生基础上封装,支持级联删除、添加,优化使用,但对异常捕获和处理比较简单粗暴。


curator:

1.比较流行的客户端,有zkclient优点以外,加了重连机制,并支持事务

2.缓存和监听三大对象:

NodeCache: 监听指定节点的新增、删除、更新

PathChildrenCache: 对指定的路径节点的一级子目录进行监听,不对该节点的操作进行监听,对其子目录的节点进行增、删、改的操作监听

TreeCache:  可以将指定的路径节点作为根节点(祖先节点),对其所有的子节点操作进行监听,呈现树形目录的监听,可以设置监听深度,最大监听深度为2147483647(int类型的最大值),

 

分布式锁实现方法:

这里利用zookeeper的EPHEMERAL_SEQUENTIAL(临时节点)类型节点及watcher机制,来简单实现分布式锁。

主要思想:

1、开启10个线程,在disLocks节点下各自创建名为sub的EPHEMERAL_SEQUENTIAL节点;

2、获取disLocks节点下所有子节点,排序,如果自己的节点编号最小,则获取锁,处理锁内资源业务,删除自身sub节点,释放连接;

3、否则watch排在自己前面的节点,监听到其删除后,进入第2步(重新检测排序是防止监听的节点发生连接失效,导致的节点删除情况);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值