Zookeeper服务注册及心跳机制详解

ZooKeeper提供了一种类似于文件目录的结构来保存key值,其提供了四种key类型,分别是持久节点,临时节点,持久有序节点,临时有序节点。其中临时节点的特性是当创建此节点的会话断开时,节点也会被删除。这一特性非常适合服务注册,可以通过维护一个长期的会话保证临时节点存活,当服务下线时,会话也会关闭,此时节点也会被删除。

了解更多Zookeeper的相关知识可以看下面这篇文章,可以让你快速掌握Zookeeper常用知识。

Zookeeper使用快速入门:基础命令,wacth监控,权限控制https://blog.csdn.net/dxh9231028/article/details/141105185?spm=1001.2014.3001.5501

服务注册

不同于Nacos,Zookeeper没有提供完全封装好的服务注册方法,而是提供了一种方便于服务注册的数据存储方式,相比Nacos,其自由度更高,更自由,但是用起来也更加繁琐。在使用时我们可以选择第三方驱动,不选择Zookeeper官方驱动,或对官方驱动进行封装都可以。

Zookeeper实现服务注册可以通过在Java代码中创建一个目录/path,然后再其目录下创建当前服务的所有ip和端口(如果是集群的话)对应的节点,/path/obj1,/path/obj2,/path/obj3,然后给这些节点赋值服务的ip和端口。当其他服务想要调用这个服务时,则可以通过轮询或随机算法在Zookeeper中获取/path下的子节点,获取服务的ip和端口。

当服务以外下线时,由于其创建的是临时节点,其对应的节点也会被删除,这样其他服务在访问此服务时便不会访问到已经下线的服务,这样可以保证不会因为服务意外下线而导致其他服务访问此服务时,偶尔会找不到ip端口的问题。

假设一个系统值有一个用户服务集群和一个订单服务集群,他们使用zookeeper注册服务并相互调用,那么他们的结构如下图

心跳机制

临时节点的存活需要会话一直存在,那么如何让会话一直存活呢?

在了解这个问题之前,我们需要了解什么是会话。会话是ZooKeeper在应用程序内部维护的逻辑关系,用来管理与客户端的交互。会话并不是网络层面的东西,虽然它依赖于TCP连接进行通信,但即使TCP连接暂时断开,只要会话未到期或未被删除,它仍然可以在重新连接后继续存在。

那么Zookeeper是如何处理会话的删除操作的呢?

当客户端连接ZooKeeper时,需要指定一个会话超时时间。如果未指定,则会使用ZooKeeper的默认超时时间。客户端需要在此超时时间内与ZooKeeper进行交互,否则ZooKeeper将认为客户端已经失效,并关闭会话,同时主动关闭TCP连接。因此,为了让会话持续存在,客户端必须定期向ZooKeeper发送信号。

这一需求的实现就是心跳机制。通过心跳机制,客户端可以在大部分时间处于休眠状态,仅在需要发送信号,维持会话存活时被唤醒以发送心跳信号,从而有效地节省系统资源。这种周期性的心跳机制确保了会话在长时间内保持活跃状态,使临时节点得以继续存在。

相关推荐
张忠琳2 小时前
【NPU】Ascend Docker Runtime v26.0.1 之二 runtime/process/process.go — 超深度逐行分析
云原生·容器·架构·kubernetes·npu·docker-runtime
独行侠影a3 小时前
APScheduler+Redis 分布式定时任务:解决多实例任务重复执行
数据库·redis·分布式
香菜TTT6 小时前
Kafka_深度解析_从架构原理到生产实践
分布式·架构·kafka·linq
雨辰AI9 小时前
K8s人大金仓主从高可用搭建|容器化集群自动同步+故障切换(生产完整版)
云原生·容器·kubernetes
潘正翔10 小时前
k8s基础_kubeadm搭建k8s集群
linux·运维·docker·云原生·容器·kubernetes
潘正翔11 小时前
k8s进阶_Harbor镜像仓库
git·云原生·容器·kubernetes·gitee·github
zcmodeltech11 小时前
智能矿井沙盘模型多系统协同控制系统设计:基于STM32与Modbus RTU的感知-传输-控制一体化方案
服务器·数据库·分布式·stm32·单片机·嵌入式硬件
AI人工智能+电脑小能手11 小时前
【大白话说Java面试题 第207题】【09_Zookeeper篇】第8题:谈谈 ZooKeeper 的可靠性保障机制
java·zookeeper·高可用·可靠性·分布式系统
乐启国际旅行社有限公司11 小时前
微服务高可用实战:Resilience4j熔断降级解决文旅节假日流量雪崩问题
微服务·云原生·架构
wWYy.12 小时前
基于Raft分布式Kv存储:RPC调用
分布式·rpc