Eureka的自我保护机制

一:Eureka的自我保护机制是什么?

保护模式主要用于一组客户端和Eureka Server之间存在网络分区场景下的保护。一旦进入保护模式,Eureka Server将会尝试保护其服务注册表中的信息,不再删除服务注册表中的数据,也就是不会注销任何微服务。

简单一句话:(好死不如赖活着)

用电视剧新三国中,曹操说的:“宁可天下人负我,我不负天下人”即:Eureka服务端,进入自我保护模式,就算所有的微服务真的都出问题了,也不会里面删除它们的。

二:为什么会出现自我保护机制?

一句话:某时刻某一个微服务不可用了,Eureka不会立刻清理,依旧会对该服务的信息进行保存。属于CAP里面的AP分支,也即是:保证可用性、分区容错性。
PS:CAP原则:分布式系统中,C:一致性;A:可用性;P:分区容错性。
我们来看看百度百科对CAP原则的详细介绍,如下图:

在这里插入图片描述为什么会产生Eureka自我保护机制?

为例防止EurekaClient可以正常运行,但是与Eureka Server网络不通情况下,EurekaServer 不会立刻将EurekaClient服务剔除
默认情况下,如果EurekaServer在一定时间内没有收到某个微服务实例的心跳,EurekaServer将会注销该实例(默认90s).但是当网络分区故障发生(延时、卡顿、拥挤)时候,微服务与EurekaServer之间无法正常通信,以上行为可能变得非常危险了–因为微服务本身其实是健康的。此时本不应该注销这个微服务的。Eureka通过"自我保护模式"来解决这个问题–当EurekaServer节点在短时间内丢失过多客户端时候(可能发生了网络分区故障),那么这个节点就会进入自我保护模式了。

在这里插入图片描述
综上,自我保护是一种应对网络异常的安全保护措施。它的架构哲学是宁可同时保留所有微服务(健康的、不健康的微服务都会保留),也不盲目注销任何健康的微服务。
职用自我保护模式,可以让Eureka集群更加的健壮和稳定

三:怎么禁止Eureka的自我保护?
出厂默认,自我保护机制是开启的:eureka.server.enable-self-preservation=true
3.1:来看看开启自我保护模式的时候,Eureka服务端提示:

在这里插入图片描述
3.2:修改服务导关闭自我保护
修改Eureka Server项目:7001项目的yml配置:
关闭自我保护机制,同时修改心跳时间为2s.如下图:

server:
  port: 7001

eureka:
  instance:
    hostname: eureka7001.com #eureka服务端的实例名称
  client:
    register-with-eureka: false     #false表示不向注册中心注册自己。
    fetch-registry: false     #false表示自己端就是注册中心,我的职责就是维护服务实例,并不需要去检索服务
    service-url:
    #集群指向其它eureka
      #defaultZone: http://eureka7002.com:7002/eureka/
    #单机就是7001自己
      defaultZone: http://eureka7002.com:7002/eureka/
  server:
    #关闭自我保护机制,保证不可用服务被及时踢除
    enable-self-preservation: false
    # 设置心跳时间(eureka默认心跳时间是30)
    eviction-interval-timer-in-ms: 2000

重启Eureka服务项目,来看看关闭自我保护模式后提示:

在这里插入图片描述
我们来修改客户端(payment8001项目)的yml配置文件:
Eureka客户端向服务端发送心跳的时间间隔-单位秒(默认30s),修改为1s.
Eureka服务导在收到最后一次心跳后等待时间上限,超时将剔除服务单位秒,默认90s,修改值为2s.如下图:

#eureka配置
eureka:
  client:
    #表示是否将自己注册进EurekaServer默认为true。
    register-with-eureka: true
    #是否从EurekaServer抓取已有的注册信息,默认为true。单节点无所谓,集群必须设置为true才能配合ribbon使用负载均衡
    fetchRegistry: true
    service-url:
      #defaultZone: http://localhost:7001/eureka # 单机版
      defaultZone: http://eureka7001.com:7001/eureka,http://eureka7002.com:7002/eureka # 集群版
  instance:
    instance-id: payment8001
    prefer-ip-address: true #访问路径可以显示IP地址
    #Eureka客户端向服务端发送心跳的时间间隔,单位为秒(默认是30)
    lease-renewal-interval-in-seconds: 30
    #Eureka服务端在收到最后一次心跳后等待时间上限,单位为秒(默认是90),超时将剔除服务
    lease-expiration-duration-in-seconds: 90
  server:
    #关闭自我保护机制,保证不可用服务被及时踢除
    enable-self-preservation: false
    # 设置心跳时间(eureka默认心跳时间是30)
    eviction-interval-timer-in-ms: 2000

测试关闭自我保护机制:
启动服务端7001项目,再启动客户端8001项目,我们可以在页面查看客户端成功注册到服务端了。如下图:

在这里插入图片描述

我们关闭客户端8001项目后,间隔2秒+以后,在刷新页面.可以看到客户端被移除了。如下图:

在这里插入图片描述当出现这个效果,说明,我们测试成功了

当eureka关闭自我保护模式后,只要检查到客户端没有发送心跳检测,就将客户端从注册列表中移除了,这是很危险的。
用一句话来形容,关闭自我保护模式的Eureka服务:曹孟德曰:宁可我负天下人,不可天下人负我。

为什么说,没有了自我保护机制很危险?

有可能因为网络原因,没有发送心跳成功,但是实际上客户端是正常运行的。如果这个时候,直接移除掉客户端,可能造成服务大面积不能使用。是很危险的一个操作。所以,最好别关闭自我保护机制

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

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

相关文章

springCould中的Hystrix【下】-从小白开始【8】

目录 🧂1.熔断机制❤️❤️❤️ 🌭2.修改8001服务 ❤️❤️❤️ 🥞3.测试 ❤️❤️❤️ 🥓4. 服务监控hystrixDashboard❤️❤️❤️ 🌭5.仪表盘❤️❤️❤️ 🧂6.仪表盘的使用 ❤️❤️❤️ 1.熔断机…

LibVLC中播放、录制

video 1:首先官网下载vlc库 2:将下载的库添加到工程目录 3:添加功能接口 bool QtVLCWidget::playMedia(const char* url, PlayType type) {if (type PT_Url){m_media libvlc_media_new_location(url);}else if (type PT_LocalFile){m_med…

设计模式④ :分开考虑

一、前言 有时候不想动脑子,就懒得看源码又不像浪费时间所以会看看书,但是又记不住,所以决定开始写"抄书"系列。本系列大部分内容都是来源于《 图解设计模式》(【日】结城浩 著)。该系列文章可随意转载。 …

实验二 Linux文件编程

一、实验目的与任务 目的:了解掌握文件系统特点与功能,学会借助文件系统的功能函数进行编程。 任务:利用C语言指令编写程序调用文件系统函数,完成相应功能。 二、实验设备 装有Linux操作系统的计算机一台。 三、实验要求 1&…

电源芯片浪涌电流如何产生?该怎么测试?

对于电源芯片的设计和制造商来说,防止芯片受到电源干扰是非常重要的。为了保障芯片能正常稳定运行,浪涌测试无疑是必要的。本篇文章将全方位为你介绍浪涌电流如何产生以及如何测试的过程。 电源芯片浪涌电流的产生原因 1.开关电源切换和电压突变 在电源开…

Golang : Bson\Json互转

代码 package bson_jsonimport ("encoding/json""errors""fmt""gopkg.in/mgo.v2/bson""os""testing" )type User struct {Name string json:"name,omitempty" bson:"name,omitempty"CSD…

软件测试|MySQL主键约束详解:保障数据完整性与性能优化

简介 主键(PRIMARY KEY)的完整称呼是“主键约束”,是 MySQL 中使用最为频繁的约束。一般情况下,为了便于 DBMS 更快的查找到表中的记录,都会在表中设置一个主键。 MySQL是一种广泛使用的开源关系型数据库管理系统&am…

轻松实现Word转PPT!别说你还不知道这个办公神器!

在日常的学习和工作中,Microsoft Word和PowerPoint是我们最常使用的2款办公软件。Word,拥有出色的文字处理功能,让我们能够轻松编辑各种文档,而PowerPoint,可以让我们轻松地进行各种演示文稿的创建和播放。 在实际使用…

Unity 3D GridLayoutGroup3D 让子物体对齐,调整子物体间距

Unity 3D GridLayoutGroup3D 让子物体对齐,调整子物体间距 效果 介绍 GridLayoutGroup3D 脚本是一个用于在 Unity 3D 编辑器中创建 3D 网格布局的实用工具。主要用于在 Unity 编辑器中提供一种可视化的方式来设置和调整子物体的位置,同时支持删除脚本时…

BabylonJS 6.0文档 Deep Dive 摄像机(二):摄像机碰撞

摄像机、网格碰撞和重力 你玩过第一人称射击游戏(FPS)吗?在本教程中,我们将模拟FPS的摄影机移动:摄影机位于地板上,与地面碰撞,并可能与场景中的任何对象碰撞。 如何实现? 为了实现这一功能,我们必须执…

CodeWave智能开发平台--03--目标:应用创建--07供应商数据表格02

摘要 本文是网易数帆CodeWave智能开发平台系列的第10篇,主要介绍了基于CodeWave平台文档的新手入门进行学习,实现一个完整的应用,本文主要完成07供应商数据表格下 CodeWave智能开发平台的10次接触 CodeWave参考资源 网易数帆CodeWave开发…

Hello 2024(A~D,F1)

新年坐大牢 A - Wallet Exchange 题意:共有俩钱包,每回合从其中一个钱包中拿走一块钱,谁拿走最后一块钱谁赢。 思路:奇偶讨论即可。 // Problem: A. Wallet Exchange // Contest: Codeforces - Hello 2024 // URL: https://cod…

josef 约瑟 数字式时间继电器 JS14P 0~20S AC220V 通电延时

JS14P系列时间继电器 JS14P系列数字式时间继电器是JS14、JS20等的更新换代产品采用集成电路,数字按键开关预置,它具有体积小、重量轻、精度高、寿命长、通用性强等优点,适用于交流50Hz,电压380V及以下和直流220w以下的自动控制电…

Pycharm安装numpy库失败解决办法

一、出现错误(以matplotlib为例): 二、解决办法: 方法一(失败):PyCharm中有一个安装库的方法是:Settings>>Python Interpreter>>点击右侧的加号 第二个图 失败原因&am…

C++每日一练(14):对称矩阵的判定

题目描述 输入矩阵的行数&#xff0c;再依次输入矩阵的每行元素&#xff0c;判断该矩阵是否为对称矩阵&#xff0c;若矩阵对称输出“yes"&#xff0c;不对称输出”no“。 输入 第一行输入一个正整数N&#xff08;N<20&#xff09;&#xff0c;表示矩阵的行数&#xff0…

深入了解pnpm:一种高效的包管理工具

✨专栏介绍 在当今数字化时代&#xff0c;Web应用程序已经成为了人们生活和工作中不可或缺的一部分。而要构建出令人印象深刻且功能强大的Web应用程序&#xff0c;就需要掌握一系列前端技术。前端技术涵盖了HTML、CSS和JavaScript等核心技术&#xff0c;以及各种框架、库和工具…

Python笔记03-判断和循环

文章目录 比较运算符if-else语句while语句for循环循环中断 比较运算符 字面量True表示真&#xff0c;字面量False表示假 if-else语句 if语句判断条件的结果一定要是布尔类型 不要忘记判断条件后的&#xff1a; 归属于if语句的代码块&#xff0c;需在前方填充4个空格缩进 age…

批量整理记账,让你的财务生活更轻松

每个月&#xff0c;每季度&#xff0c;每年&#xff0c;都需要花费大量的时间来整理、核对账单和记录每一笔支出。这种繁琐的工作真的太费时、费力了&#xff01;但今天&#xff0c;我要给你介绍一个神奇的工具——晨曦记账本。 所需工具&#xff1a; 一个【晨曦记账本】软件…

常用类型_日期..

1.Date java.util.Date是开发中常用的日期处理类(并非java.sql.Date类) 现在这么一个需求&#xff1a; 就是获取当前时区的时间 public class Main{public static void main(String[] args) {// d1和d2表示的时间都是一样的 所以推荐使用第一种写法 比较简洁Date d1 new Da…

全新热门电商API接口,实现闲鱼商品详细搜索功能

近年来&#xff0c;电商行业蓬勃发展&#xff0c;API&#xff08;Application Programming Interface&#xff09;接口已经成为电商平台的重要组成部分。API接口联讯数据不仅可以实现平台间的数据交互&#xff0c;还可以为开发者提供丰富的功能&#xff0c;满足用户多样化的需求…