Fork me on GitHub

Spring Cloud微服务-注册中心Eureka

#前言
微服务体系服务注册Eureka

问题1

1
EMERGENCY! EUREKA MAY BE INCORRECTLY CLAIMING INSTANCES ARE UP WHEN THEY'RE NOT. RENEWALS ARE LESSER THAN THRESHOLD AND HENCE THE INSTANCES ARE NOT BEING EXPIRED JUST TO BE SAFE.

启动两个client,过了一会,停了其中一个,访问注册中心时,界面上显示了红色粗体警告信息:

查阅了很多资料,终于了解了中间的问题。现将理解整理如下:

Eureka server和client之间每隔30秒会进行一次心跳通信,告诉server,client还活着。由此引出两个名词:

Renews threshold:server期望在每分钟中收到的心跳次数

Renews (last min):上一分钟内收到的心跳次数。

前文说到禁止注册server自己为client,不管server是否禁止,阈值(threshold)是1。client个数为n,阈值为1+2n(此为一个server且禁止自注册的情况)
如果是多个server,且开启了自注册,那么就和client一样,是对于其他的server来说就是client,是要
2的

我开了两个server,自注册,相关数据如下

阈值:1+2*1

renews:

  1. 自注册 2 + 2*1
  2. 非自注册:2*1

Eurake有一个配置参数eureka.server.renewalPercentThreshold,定义了renews 和renews threshold的比值,默认值为0.85。当server在15分钟内,比值低于percent,即少了15%的微服务心跳,server会进入自我保护状态,Self-Preservation。在此状态下,server不会删除注册信息,这就有可能导致在调用微服务时,实际上服务并不存在。
这种保护状态实际上是考虑了client和server之间的心跳是因为网络问题,而非服务本身问题,不能简单的删除注册信息

stackoverflow上,有人给出的建议是:

  1. 在生产上可以开自注册,部署两个server
  2. 在本机器上测试的时候,可以把比值调低,比如0.49
  3. 或者简单粗暴把自我保护模式关闭
    1
    eureka.server.enableSelfPreservation=false
-------------The End-------------

本文标题:Spring Cloud微服务-注册中心Eureka

文章作者:Fancy君

发布时间:2018年08月09日 - 16:11:55

最后更新:2018年08月10日 - 11:51:21

原始链接:http://www.fancyiscrying.top/2018/08/09/Spring-Cloud微服务-注册中心Eureka/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。