前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >ZooKeeper 常用应用场景原理详解

ZooKeeper 常用应用场景原理详解

作者头像
全栈程序员站长
发布2022-07-05 13:48:26
2830
发布2022-07-05 13:48:26
举报
文章被收录于专栏:全栈程序员必看

大家好,又见面了,我是你们的朋友全栈君。

ZooKeeper 常用应用场景原理详解

zookepper存放数据的目录结构类似于标准的文件系统格式,如果使用过window或linux就能体会到其内部的数据结构,简化结果如下:

主要基本概念

1.每个目录都被称为znode,如唯一标识分别为为“/org”,”/com/lance” 和 “/com/lance/zk”。

2.每个znode可以存储数据,

3.znode的类型

a. PERSISTENT

// 该znode不会在client断开时被zookepper自动删除,除非client端主动删除

b. PERSISTENT_SEQUENTIAL

// 该znode不会在client断开时被zookepper自动删除,除非client端主动删除,

// 且znode的名字后缀会添加上单调递增的数字,实现自动编号

c. EPHEMERAL

// 该znode会在client断开时被zookepper自动删除

d. EPHEMERAL_SEQUENTIAL

// 该znode会在client断开时被zookepper自动删除,

// 且znode的名字后缀会添加上单调递增的数字,实现自动编号

4.EPHEMERAL节点不能有子节点目录

5.znode有版本概念

6.znode可以被client监控,当该节点发生变化时,zookepper将向client发送通知(但不会把修改后的数据发给client,client要想获取修改后的数据,必须重新读取该目录下的数据)

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生成服务

每一个client根据自己的属性,如机器IP:172.17.110.2,通过create()接口创建EPHEMERAL_SEQUENTIAL 类型的znode,zookepper返回“172.17.110.2-00000000011”,client拿到返回值后,再添加具体的服务类型,如:createData,则就获取了全局唯一ID:createData-172.17.110.2-00000000011。

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 — 管理分布式环境中的数据

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/149568.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 主要基本概念
  • 1. 数据订阅/发布
  • 2. 心跳检测
  • 3. 负载均衡
  • 4.全局唯一ID生成服务
  • 5. 任务进度汇总
  • 6. 集群管理
相关产品与服务
负载均衡
负载均衡(Cloud Load Balancer,CLB)提供安全快捷的四七层流量分发服务,访问流量经由 CLB 可以自动分配到多台后端服务器上,扩展系统的服务能力并消除单点故障。轻松应对大流量访问场景。 网关负载均衡(Gateway Load Balancer,GWLB)是运行在网络层的负载均衡。通过 GWLB 可以帮助客户部署、扩展和管理第三方虚拟设备,操作简单,安全性强。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档