Eureka的自我保护机制

news2024/12/24 9:13:14

文章目录

  • 一:Eureka的自我保护机制是什么?
  • 二:为什么会出现自我保护机制?
  • 三:怎么禁止Eureka的自我保护?
    • 3.1:来看看开启自我保护模式的时候,Eureka服务端提示:
    • 3.2:修改服务关闭自我保护
    • 重启Eureka服务项目,来看看关闭自我保护模式后提示:
    • 我们来修改客户端(payment8001项目)的yml配置文件:
    • 测试关闭自我保护机制:

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

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

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

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

文章目录

  • 一:Eureka的自我保护机制是什么?
  • 二:为什么会出现自我保护机制?
  • 三:怎么禁止Eureka的自我保护?
    • 3.1:来看看开启自我保护模式的时候,Eureka服务端提示:
    • 3.2:修改服务关闭自我保护
    • 重启Eureka服务项目,来看看关闭自我保护模式后提示:
    • 我们来修改客户端(payment8001项目)的yml配置文件:
    • 测试关闭自我保护机制:

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

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

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

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

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

文章目录

  • 一:Eureka的自我保护机制是什么?
  • 二:为什么会出现自我保护机制?
  • 三:怎么禁止Eureka的自我保护?
    • 3.1:来看看开启自我保护模式的时候,Eureka服务端提示:
    • 3.2:修改服务关闭自我保护
    • 重启Eureka服务项目,来看看关闭自我保护模式后提示:
    • 我们来修改客户端(payment8001项目)的yml配置文件:
    • 测试关闭自我保护机制:

三:怎么禁止Eureka的自我保护?

出厂默认,自我保护机制是开启的:eureka.server.enable-self-preservation=true

文章目录

  • 一:Eureka的自我保护机制是什么?
  • 二:为什么会出现自我保护机制?
  • 三:怎么禁止Eureka的自我保护?
    • 3.1:来看看开启自我保护模式的时候,Eureka服务端提示:
    • 3.2:修改服务关闭自我保护
    • 重启Eureka服务项目,来看看关闭自我保护模式后提示:
    • 我们来修改客户端(payment8001项目)的yml配置文件:
    • 测试关闭自我保护机制:

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服务:曹孟德曰:宁可我负天下人,不可天下人负我。

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

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

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

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

相关文章

【题解】—— LeetCode一周小结

1.经营摩天轮的最大利润 题目链接: 1599. 经营摩天轮的最大利润 你正在经营一座摩天轮,该摩天轮共有 4 个座舱 ,每个座舱 最多可以容纳 4 位游客 。你可以 逆时针 轮转座舱,但每次轮转都需要支付一定的运行成本 runningCost 。摩…

Python爬虫必学数据库:MongoDB

微信公众号:愤怒的it男,超多Python技术干货文章。 MongoDB由C编写而成,是免费开源跨平台的非关系型数据库,与关系型数据库不同,MongoDB将数据存储在类似JSON的文档中,这使得数据库非常灵活和可伸缩。 一、环…

springcloud bus消息总线

简介 Spring Cloud Bus 配合Spring Cloud Config 使用可以实现配置的动态刷新。 Spring Cloud Bus是用来将分布式系统的节点与轻量级消息系统链接起来的框架,它整合了Java的事件处理机制和消息中间件的功能。Spring Clud Bus目前支持RabbitMQ和Kafka。 Spring C…

云计算任务调度仿真01

云计算任务调度的研究大多数以来仿真研究,现梳理一些做过的代码研究 结果无数次的排错,终于finish with code 0 了 这个代码以来的是比较老的TensorFlow版本,我们都知道TensorFlow1.x和TensorFlow2.x之间有很大差别,但其实&#…

vue3中路由的使用(详细讲解)

1、路由的简介 路由(route):就是根据特定的规则将数据包或请求从源地址传输到目标地址的过程。 在前端或者vue3项目中路由主要用于构建单页面应用程序(SPA),其中所有的页面都在同一个HTML文件中加载,通过JavaScript动…

无人驾驶卡尔曼滤波

无人驾驶卡尔曼滤波(行人检测) x k a x k − 1 w k x_k ax_{k-1} w_k xk​axk−1​wk​ w k w_k wk​:过程噪声 状态估计 估计飞行器状态(高度) x k z k − v k x_k z_k - v_k xk​zk​−vk​ 卡尔曼滤波通…

OpenAI 是如何一步一步把RAG做到98%的准确性得

参考OpenAI的官方演讲,如何做好RAG。本文整理的内容,均来源于此演讲内容。 【OpenAI演讲-自制中文字幕】干货-如何提升大模型表现?-提示工程、RAG与Fine-Tuning技巧详解_哔哩哔哩_bilibili 45% 的准确性 普通搜索不做任何处理的效果&#x…

人工智能_机器学习091_使用三维瑞士卷数据_KMeans聚类算法进行瑞士卷数据聚类---人工智能工作笔记0131

然后我们首先来构建一下数据 准备瑞士卷数据: import numpy as np 导入数学计算包 import matplotlib.pyplot as plt 导入画图包 #自底向上聚类 from sklearn.cluster import AgglceerativeClustering 导入分层聚类模型 from sklearn.datasets import make_swiss_roll # 瑞士卷…

给自己创建的GPTs添加Action(查天气)

前言 在这篇文章中,我将分享如何利用ChatGPT 4.0辅助论文写作的技巧,并根据网上的资料和最新的研究补充更多好用的咒语技巧。 GPT4的官方售价是每月20美元,很多人并不是天天用GPT,只是偶尔用一下。 如果调用官方的GPT4接口&…

Linux 下查看内存使用情况方法总结

在做Linux系统优化的时候,物理内存是其中最重要的一方面。自然的,Linux也提供了非常多的方法来监控宝贵的内存资源的使用情况。下面的清单详细的列出了Linux系统下通过视图工具或命令行来查看内存使用情况的各种方法。 1./proc/meminfo 查看RAM使用情况…

【C语言】TCP测速程序

一、服务端 下面是一个用 C 语言编写的测试 TCP 传输速度的基本程序示例。 这只是一个简单示例&#xff0c;没有做详细的错误检查和边缘情况处理。在实际应用中&#xff0c;可能需要增加更多的功能和完善的异常处理机制。 TCP 服务器 (server.c): #include <stdio.h> #…

Centos7 手动更改系统时间

文章目录 1.更改系统时间2.写入系统时间3.查看是否写入成功 1.更改系统时间 date -s "2017-12-18 09:40:00"2.写入系统时间 hwclock -w3.查看是否写入成功 timedatectl

vue中鼠标拖动触发滚动条的移动

前言 在做后端管理系统中&#xff0c;像弹窗或大的表单时&#xff0c;经常会有滚动条的出现&#xff0c;但有些时候如流程、图片等操作时&#xff0c;仅仅使用鼠标拖动滚动条操作不太方便&#xff0c;如果使用鼠标拖拽图片或容器来触发滚动条的移动就比较方便了 功能设计 如…

用python提取word中的所有图片

使用word中提取的方式图片会丢失清晰度&#xff0c;使用python写一个脚本&#xff0c;程序运行将弹出对话框选择一个word文件&#xff0c;然后在弹出一个对话框选择一个文件夹保存word中的文件。将该word中的所有图片都保存成png格式&#xff0c;并命名成image_i的样式。 程序…

模型容器与AlexNet构建

一、模型容器——Containers nn.Sequential 是 nn.module的容器&#xff0c;用于按顺序包装一组网络层 Sequential 容器 nn.Sequential 是 nn.module的容器&#xff0c;用于按顺序包装一组网络层 • 顺序性&#xff1a;各网络层之间严格按照顺序构建 • 自带forward()&#xf…

nodejs版本管理工具nvm的安装与使用

提示&#xff1a;nodejs版本管理工具nvm的安装与使用 文章目录 前言一、安装二、淘宝镜像配置三、安装所需版本的nodejs四、切换nodejs版本五、参考文档总结 前言 需求&#xff1a;新建一个vue3项目&#xff0c;&#xff0c;提示写法错误 查原因为node版本过低 随着技术更新迭…

6个提升Python编程能力的PyCharm插件

大家好&#xff0c;PyCharm作为一款强大的集成开发环境&#xff0c;本身已经提供了许多功能&#xff0c;但一些插件将进一步扩展和增强PyCharm的能力。通过使用这些插件&#xff0c;大家能够更快速地编写代码、提高代码质量、进行调试和优化&#xff0c;并将开发体验提升到一个…

Python 面向对象之元类

Python 面向对象之元类 【一】一切皆对象 【1】元类 元类&#xff08;metaclass&#xff09;是Python中用于创建类的类。在Python中&#xff0c;类是对象&#xff0c;而元类就是类的类它们控制类的创建过程&#xff0c;允许你定制类的行为Python中内置的默认元类是type我们用…

SpringMVC概述、SpringMVC 的入门

1.MVC介绍 MVC是一种设计模式&#xff0c;将软件按照模型、视图、控制器来划分&#xff1a; M&#xff1a;Model&#xff0c;模型层&#xff0c;指工程中的JavaBean&#xff0c;作用是处理数据 JavaBean分为两类&#xff1a; 一类称为数据承载Bean&#xff1a;专门存储业务数据…

12、DolphinScheduler

1、DolphinScheduler简介 1.1、 DolphinScheduler概述 Apache DolphinScheduler是一个分布式、易扩展的可视化DAG工作流任务调度平台。致力于解决数据处理流程中错综复杂的依赖关系&#xff0c;使调度系统在数据处理流程中开箱即用。 1.2、 DolphinScheduler核心架构 Dolph…