zookeeper的应用
- 分布式锁
- 负载均衡(采用轮训机制。底层是取模算法)
- 命名服务 dubbo(zookeeper作为注册中心,所有微服务都要先进行注册命名。然后听候注册中心的调度。)
- 分布式通知/协调watcher事件通知
- 发布订阅 watcher事件通知
- 集群环境 选举master,redis,哨兵机制ping 6.集群环境 选举master,redis,哨兵机制ping 心跳检测机制(redis宕机之后,哨兵机制使用投票选举策略获得新的master)
zookeeper的四种节点类型
- 持久节点 持久化在硬盘
- 持久顺序节点
- 临时节点 连接断开,节点删除。
- 临时顺序节点
节点watcher–节点事件通知,使用监听机制监听节的变化。
zookeeper的数据结构
类似于二叉树,节点可以无限递增。
节点名称不可以重复。
zookeeper事件通知
使用监听机制。
节点发生改变,都会有事件通知。
分布式通知watcher
Dubbo用zookeeper作为注册中心,监听各个临时节点的变化,通过watcher事件通知实现分布式通知。
zookeeper 实现选举策略
redis多台服务器创建临时节点,谁先创建,谁为master。
master宕机后,其他重新创建,重复上一机制。
分布式锁
什么是分布式锁
在分布式的多个JVM中保证数据的唯一性。
分布式锁实现的三个思路
- 数据实现分布式锁。释放锁要先把数据删掉,会有死锁的情况。
- redis中实现分布式锁。
- zookeeper中实现分布式锁。(推荐)
zookeeper加锁:临时节点一创建就加锁
释放锁:连接关闭,锁释放。
分布式锁实现订单号唯一
原理–临时性节点+事件通知
zookeeper创建临时节点,谁创建成功,谁获取锁,其他请求等待。使用监听机制对节点监听,一旦节点删除,其他线程被唤醒,立即进行抢锁。
- 使用zookeeper创建临时性节点
- 谁创建成功,谁就拿到锁,谁拿到锁,谁就生成订单号成功
- 连接断开,释放锁