zookeeper学习

20 篇文章 0 订阅
3 篇文章 0 订阅

什么是ZooKeeper

ZooKeeper是Java语言编写的开源框架,用以协调分布式的一个工具。

 

ZooKeeper存储结构与特性

类似于树形结构,同一层节点名称不能重复。节点类型分为临时节点与持久节点

Zookeeper以节点方式进行存储,类似于xml树状结构;

 a、节点又分为节点名称(全路径不能重复)和 节点值

b、 节点类型有持久节点(持久化在硬盘上)和临时节点(会话与临时节点同死同生)

 c、节点功能:每个节点都有通知功能,当这个节点增删改的时候都会有事件通知

Zookeeper主要有一下特性

a、一致性:数据按照顺序分批入库;

b、原子性:事务要么成功要么失败,不会局部化;

c、单一视图:客户端连接集群中任何一个zk节点,数据都是一致的;

d、可靠性:每次对zk的操作状态都会保存在服务端;

e、实时性:客户端可以读取到zk服务器的 新数据;

 

ZooKeeper中临时节点与持久节点区别

持久节点是持久化在硬盘上,会话断开后节点也能查到;

临时节点与会话保持连接,会话在节点在,会话断开,节点也会删除;

 

ZooKeeper应用场景

A、服务注册与发现的中心

B、利用临时节点特性解决分布式锁

C、分布式配置中心

D、基于哨兵机制实现选举策略

E、实现本地负载均衡

 F、基于节点事件通知特性可做消息中间件

 G、分布式事务

 

 

什么场景下会导致ZooKeeper发生延迟通知

watch事件延迟:节点被修改后,会有事件通知发往观察者,直到接收到watch事件,观察者才会知道节点被修改了;当管擦着接到watch事件的那一刻,该节点又被其他修改者修改了,而 近的watch事件还没有通知到观察者,就会造成延迟通知。

 

 

分布式锁有那些实现方案

 a、基于setNx实现分布式锁(麻烦,需要考虑死锁及释放问题)

b、redission实现分布式锁

c、zookeeper实现分布式锁(基于临时节点,实现简单,效率高,失效时间容易控制)

 

 

ZooKeeper实现分布式锁的原理

多个jvm在同一个zookeeper上创建同一个节点(临时节点),哪个jvm能创建成功,就表示它拿到了锁,剩下的jvm保持对这个节点的监听,一旦发现这个节点被删除了,那么剩下的jvm就重新再创建这个节点,谁能创建成功谁能拿到锁,依次循环下去。

 

 

ZooKeeper实现分布式锁与Redis实现分布式锁区别

Zookeeper通过创建临时节点和利用监听事件实现分布式锁,Redis使用setnx命令创建相同的key,因为Redis的key保证唯一,先创建的先获取锁。

    不断的去尝试,去获取锁,比较耗性能

 Zookeeper实现分布式锁,即使获取不到锁,创建对锁的监听即可,不需要不断去尝试获取 锁,性能开销小

Redis实现分布式锁,如果客户端获取到锁的时候遇到bug或挂了,还需要等到超时时间过了以后才能重新获取锁

Zookeeper实现分布式锁,创建的是临时节点,客户端挂了,节点自然删除,也就达到了自动释放锁的效果

 

 

使用Zookeeper实现服务Master选举原理

多个服务器在启动时候,会在Zookeeper上创建相同的临时节点,谁如果能够创建成功,谁就为主。如果主服务器宕机,其他备用节点获取监听信息,重新创建节点,选出主服务器。

 

ZooKeeper集群选举原理

每台Zookeeper服务器启动时会发起投票,每次投票后,服务器统计投票信息,如果有机器获取半数以上的投票数则leader产生。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值