ZooKeeper 常用应用场景原理详解
来源:互联网 发布:数据库数据太多 编辑:程序博客网 时间:2024/06/06 06:48
ZooKeeper 常用应用场景原理详解
zookepper存放数据的目录结构类似于标准的文件系统格式,如果使用过window或linux就能体会到其内部的数据结构,简化结果如下:
主要基本概念
7. Watcher接口,Client向Zookepper注册某个znode节点的监控,并传入Watcher的实现类(如class WatcherImpl implments Watcher),当该znode节点发生变更时,Zookepper就会通过回调执行WatcherImpl.process()方法,以进行下一步的操作。
1. 数据订阅/发布
使用Zookepper的订阅/场景可以实现配置中心,即数据发布/订阅系统
例如,项目的配置数据放在了/com/lance/zk目录下,n台机器实现对/com/lance/zk目录的监控,即注册一个Watcher监控(implments Watcher),当/com/lance/zk节点发生数据变更时,n台机器将获得变更通知,从而n台机器重新获取/com/lance/zk目录下的数据。
2. 心跳检测
在分布式系统中,各机器之间需要知道其他机器是否运行正常,最原始的方法是通过固定时间间隔的PING或建立长连接的方式检测心跳。如果基于Zookepper的话,在Zookeeper指定目录下每台机器都创建EPHEMERAL临时子节点,这样不同的机器就根据这些临时子节点判断其他机器是否正常,这样各机器之间不再直接耦合关联。
3. 负载均衡
假如我们在/com/lance/zk为域名节点,3个provider将自己的机器IP和端口号192.168.0.1:8001、192.168.0.2:8001、192.168.0.3:8001都注册到/com/lance/zk节点,当有一个consumer向zookepper获取/com/lance/zk目录下的IP列表,通过hash,轮询或随机方式获取其中一个IP,然后调用。
心跳检测:client使用固定时间间隔,如3秒,向zookepper发送服务其状态是否正常信息,一旦超过3秒没有没有收到状态信息,那么就认为该IP不可用,于是该IP就会被清理。
典型的实现例子:alibaba的dubbo服务
4.全局唯一ID生成服务
5. 任务进度汇总
各服务机器将自己的任务进行进度写入到Zookepper的指定临时节点中,这样系统中心和各台机器都能够获取其他任务的进度。
6. 集群管理
集群管理中心在Zookepper的/com/lance/clusters节点上添加一个Watcher监听,所有被管理的机器都在/com/lance/clusters创建临时子节点,如/com/lance/clusters/hostName,被管理的机器需要在指定时间间隔,如3秒,内向/com/lance/clusters/hostName发起会话,如果超时这个时间间隔没有发起会话,者Zookepper认为该机器已经宕机,就会删除/com/lance/clusters/hostName这个临时子节点,这样管理中心就能够检测到每台机器的运行情况了。
参考资料:1.《从PAXOS到ZOOKEEPER分布式一致性原理与实践》.作者:倪超
2. 分布式服务框架 Zookeeper -- 管理分布式环境中的数据
- ZooKeeper 常用应用场景原理详解
- zookeeper原理及应用场景
- Zookeeper原理及应用场景
- 【ZooKeeper 2】ZooKeeper原理及应用场景
- ZooKeeper应用场景和原理简介
- ZooKeeper的基础原理及应用场景
- zookeeper介绍、数据模型、原理、应用场景
- zookeeper原理 使用场景
- ZooKeeper原理及使用(锁,屏障,应用场景)
- threadlocal原理及常用应用场景
- threadlocal原理及常用应用场景1
- threadlocal原理及常用应用场景2
- threadlocal原理及常用应用场景
- ZooKeeper典型应用场景
- ZooKeeper典型应用场景
- ZooKeeper典型应用场景
- zookeeper应用场景
- ZooKeeper典型应用场景
- Leetcode 215 - Kth Largest Element in an Array(二分)
- BZOJ 2527: [Poi2011]Meteors
- mysql ERROR 1040: Too many connections
- Git(2)/Git安装
- Linux下MySQL数据库常用基本操作
- ZooKeeper 常用应用场景原理详解
- [XJB研究] [分块] 关于分块时间复杂度的证明
- react
- AndroidStudio中的appcompat在哪? AndroidStudio中的appcompat-v7的文件位置
- 深入理解Mock工作原理
- java学习心得:关于对象与引用变量的关系的理解
- 经济
- pat乙个人向攻略
- Linux-Day2