心跳检测与服务剔除

news2024/9/21 16:40:47

社保中心的忧桑

在这里插入图片描述

今天社保中心来了一位钉子户,90多岁的王大爷又兴高采烈的来给自己快120岁的老父亲领社保了!

工作人员这一-想,好像哪里不对啊,这老父亲120岁的年纪都可以上吉尼斯世界纪录了,要不咱帮老爷子去申请一下?王大爷一听可慌了,连连表示使不得使不得,就来领个社保而已。但是本着负责的态度,社保中心还是决定实地走访一下 。

眼看要穿帮,王大爷只好老实交代,原来王大爷的老父亲早就没了十好几年,坟头草都快长成非洲大草原了,但是在社保中心没有销户,这才造成了这么一个BUG。

不光社保中心有这个情况,眼下Eureka的注册中心也有同样的问题 ,昨天就有几台服务器中暑了,没了响应,很多调用请求不停报404, 那Eureka有什么行之有效的手段来解决这个问题呢?

感受你的心跳

心跳不息,生命不止。大道至简的SpringCloud就借助这生命的本源,也就是“心跳”,来知晓服务的可用性。我们来看一下心跳检测有哪些特点:

  1. 客户端发起 我们前面说过Eureka的注册中心是一个运筹帷
    幄的角色,足不出户办天下事,所以心跳服务是由一个个服务节点根据配置的时间主动发起的。
  2. 同步状态我们说的“心跳”不光要告诉注册中心“我还活着”,
    还要告诉他我活的好不好,是现在快不行了(OUT_OF_SERVICE状态)还是生龙活虎(UP状态)
  3. 服务剔除现在轮到注册中心做点事情了,对一段时间无响
    应的服务,反映到心电图上就是一根直线跌停板,那便要主动从注册列表中剔除,以防服务调用方请求失败。
  4. 服务续约也许大家还不知道,服务续约底层也是靠着心跳来实现的,但包含了一套“脏数据”处理流程,续约章节会详细讲解,记得关注我额。

心电图里的信息

心跳检测之于服务注册来说,就像做心电图检查之于办入院手续,入院手续需要做全方位的检查,因此要同步数十个属性到注册中心,而做一个心电图,仅仅需要以下这些信息就够了

  • 访问地址也就是Eureka注册中心的地址,如http://localh ost:20000/eureka/
  • 访问路径为了防止注册中心把我的心电图当做了别人的,给人治错了病,我还要主动告诉注册中心我是谁。不同于服务注册流程中把个人信息放到POST请求的body,心跳包把这个信息放到了访问的URL中,例如 apps/${app_name}/${instance_id},这里的appname是服务注册时提供的服务名 ,而instance_id则是当前这个服务节点的唯一编号,比如9527。
  • 服务状态心跳能反映出一个人的身体状况,对服务节点也一样,一个节点的服务状态有以下几种UPDOWNSTARTING,OUT_OF_SERVICEUNKNOWN
  • 最后一次同步注册的时间 lastDirtyTimeStamp,这是心跳检测环节最复杂的一个知识点,它是当前服务节点最后一次与服务中心失去同步时的时间InstanceInfo封装了该属性以及另一个搭档isInstanceInfoDirty,当isInstanceInfoDirty=true的时候,表示当前节点自从lastDirtyTimeStamp以后的时间都处于未同步的状态。

两个核心指标

## 客户端指标
eureka.instance.lease-renewal-interval-in-seconds=10 
eureka.instance.lease-expiration-duration-in-seconds=20

这两个指标都配置在服务节点上,分别表示了以下的含义

  • 第一个指标决定了每隔多久向服务器发送一次心跳包
  • 第二个参数告诉服务器,如果我在x秒内都没有心跳,那就代表我挂掉了

通常第一个时间一定是小于第二个时间的,否则还没等到发送第二个心跳,就被注册中心推进太平间了。毕竟两次心跳之间的间隔时间,还得再多加几秒的网络延迟,才是判断服务是否挂掉的最小时间.

服务剔除

在这里插入图片描述

支付宝也敌不过挖掘机一铲子

大家通过一个案例,思考一下在极端情况下服务剔除的作用。2015年5月份,因市政施工导致杭州支付宝机房的光缆被挖断,随后全国部分用户陆续出现支付宝无法登陆的情况。支付宝随后紧急通过技术手段,将用户请求切换到其他机房,这才在近2个小时后使受影响用户逐渐恢复。

那么问题来了-挖掘机技术哪家强?

假设我们自己的应用也碰到了类似情况,当一部分服务因为网络问题导致不可用,那么如何在尽可能短的时间内,剔除不可用的节点?

这就要借助Eureka的服务剔除功能,服务剔除是心跳检测的后手,正是为了让无心跳响应的服务节点自动下线,让我们来看一下Eureka的服务剔除流程
在这里插入图片描述

  1. 启动定时任务 注册中心在启动的时候也会同步开启一个后
    台任务,默认每间隔60秒触发服务剔除任务,当然我们也可以通过在服务端eureka.server.eviction-interval-timer-in-ms-30000做如下参数配置修改触发间隔,这里将间隔设置成了30秒。此处建议不要设置的时间过短。
  2. 调用evict 不像服务注册的山路十八弯,服务剔除比较直接了当,通过AbstractInstanceRegistryeviction方法直接运行
    • 自保开启服务自保是注册中心的保命招,后面课程会详细介绍,这里大家只要知道一旦自保开启,则注册中心就会中断服务剔除操作。
  3. 遍历过期服务接下来注册中心会遍历所有服务节点,揪出所有过期服务。如何判断一个服务是过期服务呢,只要满足以下两点中任意一点就可以当做过期
    • 已被标记为过期(evictionTimestamp> 0)
    • 最后一次心跳时间+服务端配置的心跳间隔时间< 当前时间
  4. 计算可剔除的服务总个数所有服务是否能被全部剔除呢?
    当然不是,服务中心也要顾及自身的稳定性,因此他设置了一个系数(默认0.85),可剔除的服务数量,不能大于已注册服务的总数量乘以这个系数。比如当前有100个服务,其中99个已经断了气,那么注册中心实际上只能剔除100*0.85=85个服务节点,而不是99个。
  5. 乱序剔除服务哦呦,这一招老厉害了,乱序剔除,乱拳打
    死老师傅。回头源码环节带大伙瞧瞧这个作案现场怎么个乱法,这里你就当做是歌单随机播放,随到哪个过期服务就把它踢下线。

小结

本节带大家学习了关于心跳检测和服务剔除的知识

  1. 心跳检测的作用,心跳包含的内容以及控制参数
  2. 注册中心服务剔除操作的核心流程

后面将会更新另一个和心跳密切相关的流程-服务续约的文章,关注我,第一时间获取我的最新动态。

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

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

相关文章

Java 实际开发中,实现微信小程序/微信公众号的微信注册登录

1.功能   实际开发中&#xff0c;实现微信小程序/微信公众号的微信注册登录 2.前置条件   这里只关注注册登录逻辑&#xff0c;所以前提是先对接好微信授权的相关接口。比如&#xff1a;      1. 获取微信公众号/小程序token接口      2. 获取微信公众号/小程序授…

Springboot常见报错及解决方案

1、多模块项目无法启动&#xff0c;报错Failed to execute goal on project*: Could not resolve dependencies for project 2、报错找不到符号&#xff08;在多moudle调用的时候&#xff0c;公共模块新增了东西的时候发生&#xff09; Rebuild项目

【实战】SpringBoot自定义 starter及使用

文章目录 前言技术积累SpringBoot starter简介starter的开发步骤 实战演示自定义starter的使用写在最后 前言 各位大佬在使用springboot或者springcloud的时候都会根据需求引入各种starter&#xff0c;比如gateway、feign、web、test等等的插件。当然&#xff0c;在实际的业务…

C语言从入门到实战——文件操作

文件操作 前言一、 为什么使用文件二、 什么是文件2.1 程序文件2.2 数据文件2.3 文件名 三、 二进制文件和文本文件四、 文件的打开和关闭4.1 流和标准流4.1.1 流4.1.2 标准流 4.2 文件指针4.3 文件的打开和关闭4.4 文件的路径 五、 文件的顺序读写5.1 顺序读写函数介绍fgetcfp…

pearcmd文件包含漏洞

1.什么是pearcmd.php pecl是PHP中用于管理扩展而使用的命令行工具&#xff0c;而pear是pecl依赖的类库。在7.3及以前&#xff0c;pecl/pear是默认安装的&#xff1b;在7.4及以后&#xff0c;需要我们在编译PHP的时候指定--with-pear才会安装 不过&#xff0c;在Docker任意版本…

python 自动化模块 - pyautogui初探

python 自动化模块 - pyautogui 引言一、安装测试二、简单使用三、常用函数总结 引言 在画图软件中使用pyautogui拖动鼠标&#xff0c;画一个螺旋式的正方形 - (源码在下面) PyAutoGUI允许Python脚本控制鼠标和键盘&#xff0c;以自动化与其他应用程序的交互。API的设计非常简…

卡萨帝洗衣机:被模仿也是竞争力

如何用一句话形容某家企业的竞争力和领导地位&#xff1f;“某某一出手&#xff0c;就知有没有。”这句话相当匹配。如果再加一条&#xff0c;“被模仿”也恰到好处。 从顶流公司OpenAI&#xff0c;苹果Apple Vision Pro&#xff0c;再到卡萨帝洗衣机&#xff0c;被跟随、模仿…

thinkadmin表单上传单图,多图,单文件,多文件

{extend name="../../admin/view/main"}{block name=content} <form action="{:sysuri()}" class="layui-card layui-form" data-auto="tr

iPerf3 使用指南

文章目录 iPerf3 使用指南1 iPerf3 简介2 安装指令2.1 Windows2.2 Linux 3 入门用法4 进阶用法4.1 启动服务端4.2 TCP 带宽测试4.3 UDP 带宽测试 5 iPerf3 命令说明 iPerf3 使用指南 1 iPerf3 简介 iPerf3 是用于主动测试 IP 网络上最大可用带宽的工具。它支持时序、缓冲区、…

Linux编写简易shell

思路&#xff1a;​ ​ ​ 所以要写一个shell&#xff0c;需要循环以下过程:​ 获取命令行解析命令行建立一个子进程&#xff08;fork&#xff09;替换子进程&#xff08;execvp&#xff09;父进程等待子进程退出&#xff08;wait&#xff09; 实现代码&#xff1a;​ #inc…

AI量化交易案例

量化交易 案例介绍 1.1 案例说明 机器学习与人工智能在金融领域已有成熟的应用。用统计模型来预测股票等金融产品的价格并自动交易&#xff0c;这是其中的经典问题。价格预测的模型是这个应用场景中的核心问题&#xff0c;在预测价格变化的基础上&#xff0c;通过一定的交易规则…

给视频添加srt字幕,为你的创作加上心声

无论你是分享生活点滴、教学知识&#xff0c;还是传递某种情感&#xff0c;总会有那么一刹那&#xff0c;言语显得如此苍白无力。而srt字幕就像是一位翻译官&#xff0c;用最恰当、最直接的文字&#xff0c;把你所要表达的意思准确的传递给观众。 所需工具&#xff1a; 一个【…

[C#]winform部署openvino调用padleocr模型

【官方框架地址】 https://github.com/PaddlePaddle/PaddleOCR 【算法介绍】 OpenVINO和PaddleOCR都是用于计算机视觉应用的工具&#xff0c;但它们有不同的特点和用途。OpenVINO是一个由Intel开发的开源工具套件&#xff0c;主要用于加速深度学习推理&#xff0c;而PaddleOC…

MySQL---视图索引

表定义&#xff1a; 学生表&#xff1a;Student (Sno, Sname, Ssex , Sage, Sdept) 学号&#xff0c;姓名&#xff0c;性别&#xff0c;年龄&#xff0c;所在系 Sno为主键 课程表&#xff1a;Course (Cno, Cname,) 课程号&#xff0c;课程名 Cno为主键 学生选课表&#xff1a;S…

DolphinDB学习(0):DolphinDB基本概述

DolphinDB的学习难度不小&#xff0c;主要是写法比较多&#xff0c;官方示例是一次性给一大堆代码&#xff0c;在没有成体系的学习基础的前提下&#xff0c;总有种力不从心的感觉&#xff0c;所以博主汇总这一个系列的文章&#xff0c;尝试从最简单的基础常规操作开始&#xff…

css绘制下拉框头部三角(分实心/空心)

1:需求图: 手绘下拉框 带三角 2:网上查了一些例子,但都是实心的, 可参考,如图: (原链接: https://blog.csdn.net/qq_33463449/article/details/113375804) 3:简洁版的: a: 实心: <view class"angle"/>.angle{width:0;height:0;border-left: 10px solid t…

安全基础~攻防特性3

文章目录 SSTI(模板注入)1. 简介2. 成因3. 常见框架存在注入4. 判断存在SSTI SSTI(模板注入) 1. 简介 (Server-Side Template Injection) 服务端模板注入 1、使用框架&#xff08;MVC的模式&#xff09;&#xff0c;如python的flask&#xff0c;php的tp&#xff0c;java的sp…

Flask 3.x log全域配置(包含pytest)

最近使用到flask3.x&#xff0c;配置了全域的log&#xff0c;这边记录下 首先需要创建logging的配置文件&#xff0c;我是放在项目根目录的&#xff0c; Logging 配置 logging.json {"version": 1, # 配置文件版本号"formatters": {"default&qu…

目标检测难题 | 小目标检测策略汇总

大家好&#xff0c;在计算机视觉中&#xff0c;检测小目标是最有挑战的问题之一&#xff0c;本文给出了一些有效的策略。 从无人机上看到的小目标 为了提高模型在小目标上的性能&#xff0c;本文推荐以下技术&#xff1a; 提高图像采集的分辨率 增加模型的输入分辨率 tile你…

C++PythonC# 三语言OpenCV从零开发(3):图像读取和显示

文章目录 相关链接前言Mat是什么读取图片CC#Python 灰度处理CCSharpPython 打印图像信息CCsharpPython 总结 相关链接 C&Python&Csharp in OpenCV 专栏 【2022B站最好的OpenCV课程推荐】OpenCV从入门到实战 全套课程&#xff08;附带课程课件资料课件笔记&#xff09; …