当前位置: 首页 > 知识库问答 >
问题:

Eureka更新阈值(&Renews)(最后一分钟)

应和光
2023-03-14

我有一个Eureka服务器A和两个客户端实例B(Client3)和C(Client4)

我从Eureka服务器上得到了日志,这些日志如下:

2018-01-25 12:56:27.828  INFO 7145 --- [nio-8765-exec-2] c.n.e.registry.AbstractInstanceRegistry  : Registered instance CLIENT3/client3:bb488bb73fd313321e393915f746bfe5 with status UP (replication=false)
2018-01-25 12:56:28.417  INFO 7145 --- [nio-8765-exec-3] c.n.e.registry.AbstractInstanceRegistry  : Registered instance CLIENT3/client3:bb488bb73fd313321e393915f746bfe5 with status UP (replication=true)
2018-01-25 12:56:33.028  INFO 7145 --- [nio-8765-exec-3] c.n.e.registry.AbstractInstanceRegistry  : Registered instance CLIENT4/client4:9fcbf4ed26162ee12c4c4b85774c39b1 with status UP (replication=false)
2018-01-25 12:56:33.542  INFO 7145 --- [nio-8765-exec-8] c.n.e.registry.AbstractInstanceRegistry  : Registered instance CLIENT4/client4:9fcbf4ed26162ee12c4c4b85774c39b1 with status UP (replication=true)

a)他们是什么意思?我的意思是每个客户出现两次

b)更新阈值:5,更新(最后一分钟):8,为什么更新最后一分钟是8,它应该是4?因为只有两个客户端,每个客户端每分钟2拍

c)当我启动第三个服务D(CLient5)时,续订阈值是6,而不是7,这是为什么?

d)Eureka对等体如何相互传递信息?何时传递?例如,当前有两个Eureka服务器(对等体)和两个客户端(每个客户端一个实例)。现在当一个新客户端注册时,它将向两个对等体发送beat还是只向一个对等体发送beat?在一个对等体中,另一个对等体如何知道?

共有1个答案

萧英光
2023-03-14

a)这意味着Eureka正在将心跳复制到自己。这很可能是由于配置错误。如果您查看Eureka的仪表板,您的主机可能在不可用副本列表中。要解决此问题,Eureka实例名需要与默认区域中使用的主机名相同。因此,对于独立的Eureka服务器,配置应如下所示

eureka:
  client:
    registerWithEureka: false
    fetchRegistry: false
    serviceUrl:
      defaultZone: http://localhost:8080/eureka/
  instance:
    hostname: localhost

eureka.instance.hostnameeureka.client.serviceurl.defaultzone中的主机名匹配是至关重要的。配置后,unavailable-replicas应该会消失。

b)一旦你修复了a)这个问题应该被修复,你应该看到4次更新。

c)在此引用解释

计算是这样的:如果有两个客户机注册到一个Eureka实例,每个客户机每隔30s发送一次心跳,那么该实例应该在一分钟内接收4次心跳。Spring在此基础上增加了一个较低的最小值1(可通过eureka.instance.registry.ExpectedNumberOFrenewSpermin配置),因此实例期望每分钟接收5次心跳。然后将其乘以0.85(可由Eureka.Server.RenewalPercentThreshold配置)并舍入到下一个整数,这将我们再次回到5。如果Eureka在15min内接收到的心跳少于5次(可由Eureka.Server.RenewalThresholdUpdateIntervalms配置),它将进入自我保护模式并停止已注册实例的过期。

因此,在两个实例中:(2*2+1)*0.85=4.25,四舍五入。对于三个实例(2*3+1)*0.85=5.95四舍五入为6。

d)Eureka客户端只向一个服务器实例发送心跳。该实例将这些心跳传递给其他服务器实例,以保持它们的更新。如果您检查Eureka服务器日志,您可以找到如下日志

InstanceRegistry: renew SERVICEA serverId localhost:serviceA:12345, isReplication {}true

如果isreplication为true,这意味着更新是从对等服务器节点发送的。如果为false,则表示实例本身收到了更新。

 类似资料:
  • 我有一个简单的eureka服务器,配置简单(这个服务器用于开发和本地测试,spring-boot-starter 1.5.4版本,eureka 1.3.4)。 它有以下配置(没有其他特殊配置):

  • 当我查看注册表仪表板时,当结束时,我会看到以下警告消息: 当我查看代码时,测试始终为true 为什么是默认配置,它似乎怪异,因为它不断地产生一个警告! 如果有谁能给我一个解释。我想我错过了什么…

  • 我已经在GitHub上启动了一个简单的项目。它基本上是一个Eureka服务器(阿基米德)和三个Eureka客户端微服务(一个公共API和两个私有API)。查看GitHub的自述文件获得详细描述。 关键是,当一切都在运行时,我希望如果一个私有微服务被杀死,那么Eureka服务器会发现并从注册表中删除它。 我在Stackoverflow上发现了这个问题,通过在Eureka服务器配置中使用解决了这个问题

  • 我一直在做一些实验,使用一些变换,例如在Matlab中对图像数据进行DCT变换。使用512x512像素lena图像的DCT示例: x=双(imread('lenna.bmp'));R=dct2(x); 然后,我想通过保持R的100000个最大系数并将剩余的设置为零来阈值变换系数。 我该怎么做?

  • 问题内容: 我已经开始开发微服务,尽管我已经进行了一段时间的研究,同时阅读了Spring的文档和Netflix的文档。 我已经开始在Github上进行一个简单的项目。它基本上是一个Eureka服务器(Archimedes)和三个Eureka客户端微服务(一个公共API和两个私有)。查看github的自述文件以获取详细描述。 关键是,当一切都运行时,我希望如果其中一个私有微服务被杀死,Eureka服