Tcpdump抓包验证zookeeper的心跳机制

news/2024/4/18 17:50:32/文章来源:https://blog.csdn.net/mrqiuwen/article/details/129238952

一、背景

在分布式系统中,zookeeper可以作为服务注册中心,所有提供服务的节点都可以在zookeeper上面注册,并作为一个node被组织起来,如下图:
在这里插入图片描述
在RPC框架中,这些服务提供者就是RPC服务的提供者。zookeeper注册中心为每个服务都维持了会话session。为了监测这些服务是否在线,还使用了心跳机制。
对于zookeeper来说,这些RPC服务的提供者就是zookeeper客户端。
网上很多人说zookeeper的配置文件里的第一个参数ticktime就是指的心跳间隔,如下图,ticktime = 2000,即2000毫秒。但实际上,通过tcpdump抓包分析和源码阅读,可以看到其实并不是这样的。
在这里插入图片描述

二、抓包

zk的服务端和客户端之间是用ping消息来作为心跳消息的。ping是应用层协议,下层直接就是网络层协议ICMP,(ICMP利用的是IP协议传输消息,很有趣,网络层依赖网络层),没有使用TCP或UDP,也就是说,ZK客户端和服务器即使在TCP三次握手或挥手过程出现了问题,也不影响心跳消息的收发

在RPC项目中,RPC服务提供者就是zk的客户端,所以我们首先运行RPC服务提供者程序。
然后ifconfig查看网络配置,因为都在本地运行,所以ip地址为回环地址127.0.0.1,网卡名为lo。
然后使用linux提供的抓包工具tcpdump,运行sudo tcpdump -i lo port 2181
(-i后接参数,lo是本地网卡名;port后的2181是zk服务器的端口号)

抓包结果如下:

在这里插入图片描述
可以看到,ping消息的时间是14:31:19、14:31:29、14:31:39、14:31:49、14:31:59、
也就是间隔10秒发送一次ping消息。
而我们在zookeeper客户端程序初始化zookeeper句柄时,调用函数zookeeper_init()传入的会话超时时间参数是30000,即30秒(这个也是zk默认的会话超时时间),也就是说,zk发送心跳消息的默认时间间隔是默认会话超时时间的1/3,即10000ms
其实查看zk的客户端发送ping请求的源码class SendThread也能找到发送ping的时间间隔,部分代码如下:

class SendThread extends ZooKeeperThread{
......
public void run(){......final int MAX_SEND_PING_INTERVAL = 10000;......}
}

对于前面说的配置文件里的ticktime,是这样解释的:
Client端的ping心跳检测间隔时间是轮询隔一段时间后向Server端发送ping请求,而Server端的tickTime间隔时间作用是每隔一段时间就判断在Server端的Client连接对象是否已经死亡,如果已经过期死亡则将连接对象进行清除关闭。所以ping心跳检测的意义是Client端告诉服务器我还活着,tickTime意义是定期清除没有告诉Server端还存活的连接。

本文参考以下博客:

zookeeper心跳机制源码分析

zookeeper简介

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

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

185、【栈与队列】leetcode ——496. 下一个更大元素 I:单调栈-哈希表(C++版本)

题目描述 原题链接:496. 下一个更大元素 I 解题思路 本题与 739. 每日温度 的区别在于,需要先通过让nums1与nums2判定出为想等元素后,再去找nums2中更大的数。 因此,第一步需要找到想等数,第二步需要找到大于的数。…

c++之引用

目录 引用的概念 引用做函数参数 引用的本质 常引用 引用的概念 在c中新增加了引用的概念,引用可以看作一个已定义变量的别名。 引用的语法:Type &name var; int main() {int a 10;int &b a;printf("b%d\n", b);printf(&quo…

第四阶段02-酷鲨商城项目Mybatis相关的配置

14. 添加与Mybatis相关的配置 在每个项目中,当需要使用Mybatis实现数据库编程时,都需要添加2项一次性配置:配置Mapper接口所在的包(package)、配置XML文件在哪里。 关于配置Mapper接口所在的包,可以&…

【一】kubernetes集群部署

一、docker环境搭建 1、移除以前docker相关包 sudo yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine2、配置yam源 sudo yum install -y yum-utilssudo yum-config-manager --ad…

C++进阶--二叉树编程题

文章目录力扣606. 根据二叉树创建字符串力扣102. 二叉树的层序遍历力扣236. 二叉树的最近公共祖先JZ36 二叉搜索树与双向链表力扣105--通过前序和中序遍历构造二叉树力扣144--二叉树的前序遍历(非递归)力扣94--二叉树的中序遍历(非递归&#…

虹科新闻|虹科与iX systems正式建立合作伙伴关系

近日,虹科与美国iXsystems公司达成战略合作,虹科正式成为iXsystems公司在中国区域的认证授权代理商。未来,虹科将携手iXsystems,共同致力于提供企业级存储解决方案。虹科及iXsystems双方的高层领导人员都对彼此的合作有很大的信心…

操作系统基础教程

目录 第二章:处理器管理 概览 进程调度的层次 进程的调度方式: 调度的评价标准: 典型的调度算法: 第三章:同步、通信和死锁 什么是进程同步? 什么是进程互斥? 进程同步的实现方式 进程…

JVM总结

1. 内存结构 线程私有区 程序计算器 作用:是一块较小的内存空间,存储的是当前线程所执行的字节码文件的序号特点:线程私有,不会出现内存空间溢出 虚拟机栈 虚拟机栈是管理JAVA方法执行的内存模型,每个方法执行时都…

贴吧顶贴软件《今日/更新》

贴吧顶贴软件《今日/更新》百收贴吧工具箱,贴吧顶帖软件,贴吧推广引流神器#贴吧顶帖#贴吧推广 hello,大家好,我是软件的作者百收编辑狂潮老师。本次的视频讲解是作为一个百度顶贴的自动化脚本的视频安装教程和使用教程。你作为新…

SpringCloud(五)MQ消息队列

MQ概念常见消息模型helloworld案例实现实现spring AMQP发送消息实现spring AMQP接收消息工作消息队列实现发布订阅模型Fanout Exchange实现DirectExchange实现TopicExchange实现DirectExchange 和FanoutExchange的差异DirectExchange 和TopicExchange的差异基于RabbitListener注…

钉钉产品体验报告

一、调研的目的了解企业社交软件,借写竞品分析来帮助自己整理思路,看清市场的发展趋势;体验这类企业设计软件,掌握产品核心业务流程和产品结构,把握需求对应的功能点和界面结构,并侧面了解用户习惯&#xf…

用Python做数据分析有哪些优势?

众所周知,可以用作数据分析的语言有很多,包含Python、R语言等,而且Python被誉为数据分析的一大利器,更是该领域的首选语言,那么用Python做数据分析有哪些优势呢?跟着蛋糕往下看。 第一、Python语言自身的优势 Pytho…

ShardingSphere水平、垂直分库、分表和公共表

目录一、ShardingSphere简介二、ShardingSphere-分库分表1、垂直拆分(1)垂直分库(2)垂直分表2、水平拆分(1)水平分库(2)水平分表三、水平分库操作1、创建数据库和表2、配置分片的规则…

BigGAN

1、BIGGAN 解读1.1、作者 Andrew Brock、Jeff Donahue、Karen Simonyan 1.2、摘要 尽管最近在生成图像建模方面取得了进展,但从 ImageNet 等复杂数据集中 成功生成高分辨率、多样化的样本仍然是一个难以实现的目标。为此,我们以迄 今为止最大的规模训练生…

fastadmin:在新增页面,打开弹窗单选,参数回传

样式:核心代码:一、弹窗的控制器中:// 定义一个公共函数select(),如果这个请求是Ajax,则返回index()函数,否则返回view对象的fetch()函数。 public function select() {if ($this->request->isAjax(…

【软件测试】测试老鸟的迷途,进军高级自动化测试测试......

目录:导读前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜)前言 很多从业几年的选手…

【阿旭机器学习实战】【37】电影推荐系统---基于矩阵分解

【阿旭机器学习实战】系列文章主要介绍机器学习的各种算法模型及其实战案例,欢迎点赞,关注共同学习交流。 电影推荐系统 目录电影推荐系统1. 问题介绍1.1推荐系统矩阵分解方法介绍1.2 数据集:ml-100k2. 推荐系统实现2.1 定义矩阵分解函数2.2 …

消息中间件的概念

中间件(middleware)是基础软件的一大类,属于可复用的软件范畴。中间件在操作系统软件,网络和数据库之上,应用软件之下,总的作用是为处于自己上层的应用软件提供运行于开发的环境,帮助用户灵活、高效的开发和集成复杂的…

ICA简介:独立成分分析

1. 简介 您是否曾经遇到过这样一种情况:您试图分析一个复杂且高度相关的数据集,却对信息量感到不知所措?这就是独立成分分析 (ICA) 的用武之地。ICA 是数据分析领域的一项强大技术,可让您分离和识别多元数据集中的底层独立来源。 …

PPP简介,PPP分层体系架构,PPP链路建立过程及PPP的帧格式

PPP(Point-to-Point Protocol)是一种用于在两个网络节点之间传输数据的通信协议。它最初是为在拨号网络上进行拨号连接而开发的,现在已经被广泛应用于各种网络环境中,例如在宽带接入、虚拟专用网(VPN)等场景…