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

news2024/12/24 20:05:13

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

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

Zookeeper使用快速入门:基础命令,wacth监控,权限控制icon-default.png?t=N7T8https://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发送信号。

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2049383.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

xss.function靶场(easy)

文章目录 第一关Ma Spaghet!第二关Jefff第三关Ugandan Knuckles第四关Ricardo Milos第五关Ah Thats Hawt第六关Ligma第七关Mafia第八关Ok, Boomer 网址&#xff1a;https://xss.pwnfunction.com/ 第一关Ma Spaghet! 源码 <!-- Challenge --> <h2 id"spaghet&qu…

一文掌握 Web 测试:功能、界面、兼容与安全的综合测试指南!

随着Web技术的不断演进&#xff0c;测试除了对应用的功能性、界面美观性、跨平台兼容性的基本要求外、安全性和性能的要求也逐步增高。因此&#xff0c;全面、系统的测试思维和策略成为了保证Web应用高质量的关键因素。本篇文章将从功能测试、界面测试、兼容性测试和安全测试四…

AI歌手-五月天(声音转换)

重磅推荐专栏: 《大模型AIGC》 《课程大纲》 《知识星球》 本专栏致力于探索和讨论当今最前沿的技术趋势和应用领域,包括但不限于ChatGPT和Stable Diffusion等。我们将深入研究大型模型的开发和应用,以及与之相关的人工智能生成内容(AIGC)技术。通过深入的技术解析和实践经…

JavaScript - 数组对象中实用好玩的reduce方法

JavaScript中reduce() 方法对数组中的每个元素执行一个由您提供的reducer函数(升序执行)&#xff0c;将其结果汇总为单个返回值。 语法&#xff1a; arr.reduce(callback(accumulator, currentValue[, index[, array]])[, initialValue]) 参数配置&#xff1a; 参数名描述cal…

系列:水果甜度个人手持设备检测-github等开源库和方案

系列:水果甜度个人手持设备检测 -- github等开源库和方案 概述 通常来说&#xff0c;年纪轻轻的我们一般都喜欢走捷径&#xff0c;对于智能设备和算法软件领域来说&#xff0c;GitHub应该算为数不多的的捷径之一。就算因为效果不好/知识产权/方向不同等原因不用&#xff0c;…

XML外部实体注入

1.DTD实体及引用 DTD(文档类型定义)是一种用于定义XML文档结构和元素约束的方法。它可以描述一个XML文档的元素、属性、实体、注释等&#xff0c;从而规定了文档的结构和语法规则。DTD 通常是一个单独的文件&#xff0c;可以被多个XML文档所共享。 而在DTD中&#xff0c;实体…

日志分析-Windows

目录 Windows事件日志场景 1&#xff08;问题 1&#xff09;&#xff1a;服务器管理员向管理层提出了大量关于 PowerShell 在环境中被阻止的投诉。管理层最终批准在环境中使用 PowerShell。查看哪些日志、监控哪些事件 ID 等。场景 2&#xff08;问题 2&#xff09;&#xff1a…

Ubuntu 24.04系统部署Zabbix7.0

1、Ubuntu 24.04系统 阿里云镜像下载地址&#xff1a; https://mirrors.aliyun.com/ubuntu-releases/noble/ubuntu-24.04-live-server-amd64.iso 如果不使用Ubuntu系统&#xff0c;自己可以在下图选择对应版本。安装操作差不多&#xff0c;就命令有差异。 2、Zabbix版本 &am…

AVL树的学习

1.1 AVL树的概念 二叉搜索树虽可以缩短查找的效率&#xff0c;但如果数据有序或接近有序二叉搜索树将退化为单支树&#xff0c;查 找元素相当于在顺序表中搜索元素&#xff0c;效率低下。因此&#xff0c;两位俄罗斯的数学家G.M.Adelson-Velskii 和E.M.Landis在1962年 发明了…

微前端架构:使用不同框架构建可扩展的大型应用

​ 大家好&#xff0c;我是程序员小羊&#xff01; 前言 在现代前端开发中&#xff0c;随着应用规模的扩大和团队分工的复杂化&#xff0c;传统的单体前端架构逐渐暴露出维护困难、部署周期长、技术栈更新不便等问题。为了应对这些挑战&#xff0c;微前端架构应运而生。这种架构…

每日OJ_牛客_树根(简单模拟)

目录 牛客_树根&#xff08;简单模拟&#xff09; 解析代码 牛客_树根&#xff08;简单模拟&#xff09; 数根__牛客网 解析代码 这个题目很容易理解&#xff0c;对于数字的每一位进行相加直到不大于9为止即可。 接收字符串得到各个数字&#xff0c;并且每位求和&#xff…

使用yolov5实现目标检测简单案例(测试图片)

一、前置 测试这个案例之前需要安装一些前置的东西&#xff0c;如果已经安装的可以忽略&#xff0c;下面我给出我跟着做的一些很好的博客提供大家参考&#xff0c;因为我们主要目的还是实现yolov5的目标检测。 1、安装nvidia显卡驱动 可以参考&#xff1a;【Windows】安装NV…

从ARM的最强超大核处理器来看:Arm Core里都有啥?

目录 L1 instruction memory systemInstruction decode -指令译码Register rename -寄存器重命名Instruction issue - 指令发射Integer execute - 整数执行Vector execute - 向量执行Advanced SIMD and floating-point support - 高级 SIMD 和浮点支持Cryptographic Extension …

在亚马逊云科技上部署开源大模型并利用RAG和LangChain开发生成式AI应用

项目简介&#xff1a; 小李哥将继续每天介绍一个基于亚马逊云科技AWS云计算平台的全球前沿AI技术解决方案&#xff0c;帮助大家快速了解国际上最热门的云计算平台亚马逊云科技AWS AI最佳实践&#xff0c;并应用到自己的日常工作里。 本次介绍的是如何在亚马逊云科技上利用Sag…

CMake 的快速应用

一&#xff0c;什么是CMake&#xff1f; 我们在学习了C 和 C后&#xff0c; 知道从c/c代码,变成可执行文件的过程如下&#xff1a; 如果使用的IDE开发&#xff0c;例如vs 2017&#xff0c;QT,等&#xff0c;那么一般IDE会帮你生成可执行文件&#xff0c;开发者一键点击&#…

Wandb使用指南

安装&#xff1a; pip install wandb 登录 wanbd login 在terminal中操作查看你的API key并粘贴回车进行授权&#xff08;https://wandb.ai/authorize&#xff09; 设置离线模式/在线模式 设置为offline会在无网络&#xff08;内网&#xff09;的时候使用&#xff0c;常用于de…

如何运用独特的产业运营体系打造一流的数字媒体产业园

如何运用独特的产业运营体系打造一流的数字媒体产业园 2024-08-15 17:37树莓集团 在数字经济蓬勃发展的今天&#xff0c;数字媒体产业作为其中的重要一环&#xff0c;正展现出巨大的潜力和活力。而如何运用独特的产业运营体系&#xff0c;打造一流的数字媒体产业园&#xff0…

SQLAlchemy 学习笔记

通信类型&#xff1a;AF_INET 协议家族一般是表示TCP通信的SOC_STREAM和UDP通信的SOCK_DGRAM。对于TCP通信&#xff0c;建立socket连接&#xff0c;&#xff1a; s socket.socket(socket.AF_INET, socket.SOCK_STREAM)连接socket&#xff0c; s.connect((host,port))socket通信…

PostWigger的xss漏洞

文章目录 Lab: Exploiting DOM clobbering to enable XSS Lab: Exploiting DOM clobbering to enable XSS 这是一道dom破坏题。 首先进入&#xff0c;发现都是一个个博客。 随便点击看看。 发现是一篇文章之后是一些评论以及咱们也可以发布评论。这里的Email使用了html的正…

Redis的缓存淘汰策略

1. 查看Redis 最大的占用内存 打开redis配置文件, 设置maxmemory参数&#xff0c;maxmemory 是bytes字节类型, 注意转换 2. Redis默认内存多少可以用 注意: 在64bit系统下&#xff0c; maxmemory 设置为 0 表示不限制Redis内存使用 3. 一般生产上如何配置 一般推荐Redis 设置内…