Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
了解Spring Cloud Eureka服务器自我保护和更新阈值_Spring_Spring Cloud_Netflix Eureka - Fatal编程技术网

了解Spring Cloud Eureka服务器自我保护和更新阈值

了解Spring Cloud Eureka服务器自我保护和更新阈值,spring,spring-cloud,netflix-eureka,Spring,Spring Cloud,Netflix Eureka,虽然我已经研究了一段时间,阅读了Spring和Netflix的文档,但我对开发微服务还是新手 我已经开始了一个简单的项目。它基本上是一个Eureka服务器(阿基米德)和三个Eureka客户端微服务(一个公共API和两个私有API)。查看github的自述文件以获取详细描述 关键是,当一切都在运行时,我希望如果某个私有微服务被终止,Eureka服务器会实现并将其从注册表中删除 I,解决方案通过在Eureka服务器配置中使用启用selfpreservation:false传递。执行此操作一段时间后,

虽然我已经研究了一段时间,阅读了Spring和Netflix的文档,但我对开发微服务还是新手

我已经开始了一个简单的项目。它基本上是一个Eureka服务器(阿基米德)和三个Eureka客户端微服务(一个公共API和两个私有API)。查看github的自述文件以获取详细描述

关键是,当一切都在运行时,我希望如果某个私有微服务被终止,Eureka服务器会实现并将其从注册表中删除

I,解决方案通过在Eureka服务器配置中使用
启用selfpreservation:false
传递。执行此操作一段时间后,终止服务将按预期消失

但是,我可以看到以下信息:

自我保护模式已关闭。这可能无法保护实例 网络/其他问题时失效

1。自我保护的目的是什么?声明说,如果在“客户机可以获得不再存在的实例”上进行自我保护。那么什么时候开/关才是明智之举?

renew threshold 5
rewnews last min: (client1) +2 + (client2) +2 -> 4
此外,当“自我保护”处于启用状态时,您可能会在Eureka服务器控制台中收到一条未完成的消息警告:

紧急情况!EUREKA可能错误地声称,当 他们不是。续约低于阈值,因此 实例不会为了安全而过期

现在,继续使用Spring Eureka控制台

Lease expiration enabled    true/false
Renews threshold    5
Renews (last min)   4
我遇到了一个奇怪的阈值计数行为:当我单独启动Eureka服务器时,阈值是1

2。我有一台Eureka服务器,并配置了
registerWithEureka:false
,以防止它在另一台服务器上注册。那么,为什么它会出现在阈值计数中?

renew threshold 5
rewnews last min: (client1) +2 + (client2) +2 -> 4
3。对于我启动的每个客户端,阈值计数增加+2。我想这是因为他们每分钟发送2条续订消息,对吗?

renew threshold 5
rewnews last min: (client1) +2 + (client2) +2 -> 4
4。Eureka服务器从不发送续订,因此最后一分钟续订始终低于阈值。这正常吗?

renew threshold 5
rewnews last min: (client1) +2 + (client2) +2 -> 4
服务器cfg:

server:
  port: ${PORT:8761}

eureka:
  instance:
    hostname: localhost
  client:
    registerWithEureka: false
    fetchRegistry: false
    serviceUrl:
      defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
  server:
    enableSelfPreservation: false
#   waitTimeInMsWhenSyncEmpty: 0
spring:
  application:
    name: random-image-microservice

server:
  port: 9999

eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:8761/eureka/
    healthcheck:
      enabled: true
客户端1 cfg:

server:
  port: ${PORT:8761}

eureka:
  instance:
    hostname: localhost
  client:
    registerWithEureka: false
    fetchRegistry: false
    serviceUrl:
      defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
  server:
    enableSelfPreservation: false
#   waitTimeInMsWhenSyncEmpty: 0
spring:
  application:
    name: random-image-microservice

server:
  port: 9999

eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:8761/eureka/
    healthcheck:
      enabled: true

我得到了与@codependent met相同的问题,我在谷歌上搜索了很多,并做了一些实验,在这里我来贡献一些关于Eureka服务器和实例如何工作的知识

每个实例都需要以每30秒一次的频率向Eureka服务器续订租约,这可以在
Eureka.instance.leaseRenewalIntervalInSeconds
中定义

续订(最后一分钟):表示在最后一分钟从Eureka实例收到的续订数量

续订阈值:Eureka服务器期望每分钟从Eureka实例接收的续订

例如,如果
registerWithEureka
设置为false
eureka.instance.leaseRenewalIntervalInSeconds
设置为30并运行2个eureka实例。两个Eureka实例将每分钟向Eureka服务器发送4续订,Eureka服务器最小阈值为1(用代码编写),因此阈值为5(该数字将乘以系数
Eureka.server.renewalPercentThreshold
,稍后讨论)

自我保护模式:如果更新(最后一分钟)小于更新阈值,自我保护模式将被激活

因此,在上面的示例中,自我保护模式被激活,因为阈值为5,但Eureka服务器每分钟只能接收4次续订

  • 问题1:
  • 自保模式的设计是为了避免网络连接不良故障。Eureka实例A和B之间的连接良好,但由于连接中断,B未能在短时间内续订其对Eureka服务器的租约,此时Eureka服务器不能简单地将实例B踢出。如果这样做,实例A将无法从Eureka服务器获得可用的注册服务,尽管B可用。这就是自我保护模式的目的,最好打开它

  • 问题2:
  • 最小阈值1写入代码中
    registerWithEureka
    设置为false,因此将不存在Eureka实例寄存器,阈值将为1

    在生产环境中,通常我们部署两个Eureka服务器,
    registerWithEureka
    将设置为true。因此,阈值将为2,Eureka服务器将每分钟向自身续订两次租约,因此
    续订小于阈值不会有问题

  • 问题3:
  • 是的,你说得对
    eureka.instance.leaseRenewalIntervalInSeconds
    定义每分钟发送到服务器的续订次数,但它将乘以上文提到的因子eureka.server.renewalPercentThreshold
    ,默认值为0.85

  • 问题4:
  • 是的,这是正常的,因为阈值初始值设置为1。所以,如果
    registerWithEureka
    设置为false,则续订始终低于阈值

    对此,我有两个建议:

  • 部署两台Eureka服务器并启用带有Eureka的注册表
  • 如果您只想在demo/dev环境中部署,可以将
    eureka.server.renewalPercentThreshold
    设置为0.49,因此当您单独启动eureka服务器时,阈值将为0

  • 我写了一篇关于Eureka的详细信息的博文,这篇博文填补了SpringDoc或Netflix博客中缺失的一些细节。这是几天调试和挖掘源代码的结果。我知道复制粘贴比链接到外部URL更可取,但内容太大,无法回答SO问题。

    您可以尝试在您的eureka服务器属性中设置续订阈值限制。如果您要在eureka上注册大约3到4个微服务,则可以将其设置为:

    eureka.server.renewalPercentThreshold=0.33
    
    我想