- zookeeper是什么鬼?
- 相当于协调身体运作的大脑
- 负责协调,联络分布式环境中子系统(胳膊腿)的功能
- 在哪个鬼地方用?
- 维护配置信息
- 当在一个集群规模的环境中,多台同类型的应用使用同样的配置文件,为了避免麻烦的登陆每台机器修改配置,为了减少人为的修改导致配置失误,为了实现配置文件的统一管理、版本控制,那么就有必要实现一个配置管理中心的应用–> zookeeper提供的这个配置管理,就是把这公用的配置文件提取出来放到一个地方,对这个地方(目录节点)进行监听,一旦配置信息发生变化,每个应用程序就会收到 Zookeeper 的通知,然后从 Zookeeper 获取新的配置信息应用到系统中就好,项目不需要重启,这样上面一开始讲的问题就解决了.
- 命名
- 方便了分布式个个项目之间的联系
- 一般的框架通过URL来获取远方服务器上的对象来调用服务
- 但到集群,和分布式环境下,
- 分布式同步(分布式锁)
-
作用
- 分布式锁主要用于在分布式环境中保护跨进程、跨主机、跨网络的共享资源实现互斥访问,以达到保证数据的一致性。
-
实现
- 获取分布式锁
- 客户端在locker节点下创建自己的临时顺序节点
- 谁的临时顺序节点最小谁获得锁
- 锁用完之后, 删除自己的临时顺序节点
- 发现自己的临时顺序节点并非最小的
- 找到比自己次小的那个节点
- 监视它
- 他获得锁且释放后 立刻判断自己是不是最小的了
- 是 : 获得锁
- 不是 : 重复 4
-
抢占分布式锁核心算法流程图 :
-
注意哦
- 使用EPHEMERAL会引出一个风险:在非正常情况下,网络延迟比较大会出现session timeout,zookeeper就会认为该client已关闭,从而销毁其id标示,竞争资源的下一个id就可以获取锁。这时可能会有两个process同时拿到锁在跑任务,所以设置好session timeout很重要。
- 同样使用PERSISTENT同样会存在一个死锁的风险,进程异常退出后,对应的竞争资源id一直没有删除,下一个id一直无法获取到锁对象。
-
- 提供组服务
- 这个组服务即集群管理,如服务注册或者获取服务都是在zookeeper上操作的.
- 提供组服务也就包括
- 创建组、加入组成员、列出组成员和删除组成员
- zookeeper心跳机制
- 作用
- 检测与其连接的一些服务器的数量,以及信息
- 检测什么时候连上zookeeper
- 检测什么时候断开
- 注 : 心跳机制:没事就跳(经一定时间就会发送信息提醒程序正常)告诉你他还活着,不跳了说明出问题了(检测到断开之类)
- 作用
- 维护配置信息
参考 :https://blog.youkuaiyun.com/qq_18416057/article/details/54927189
参考 : https://www.cnblogs.com/linjiqin/p/6052031.html