springcloud eurek 概念和常用设置

概念
Register : 服务注册 Eureka客户端向Eureka服务端注册信息,包括ip,端口,运行状态等信息。
Renew : 服务续约 Eureka客户端每30s发送一次请求到Eureka服务端来续约,证明客户端正常运行。若服务端90s没有接收到客户端请求,它会将客户端从注册表中删除。
Fetch Registries:获取注册列表信息 Eureka客户端每30s从服务端获取注册表信息,并将其缓存在本地。客户端根据缓存信息查调用其他实例。
Cancel:服务下线 Eureka客户端在程序关闭时向Eureka服务器发送取消请求。 发送请求后,该客户端实例信息将从服务器的实例注册表中删除。该下线请求不会自动完成,它需要调用以下内容:
DiscoveryManager.getInstance().shutdownComponent();
Eviction 服务剔除 在默认的情况下,当Eureka客户端连续90秒没有向Eureka服务器发送服务续约,即心跳,Eureka服务器会将该服务实例从服务注册列表删除,即服务剔除。
Eureka 自我保护机制 自我保护机制: 好死不如赖活着
某时刻一个微服务不可用,Eureka不会立即清理,依然会对该服务信息进行保存。
默认情况下如果在一定时间内没有接受到心跳,EurakeServer会注销该实例信息,但是当网络分区出现问题时,这样会变的很危险——因为可能健康的服务被注销。EurekaServer通过自我保护模式解决这个问题:当短时间丢失过多客户端时,会进入保护机制,EurekaServer不再删除服务,当网络通信正常后自动推出保护机制。
在自我保护模式中,Eureka会保护注册表中的信息,不再注销任何服务实例.当服务的心跳回复阈值以上时,EurekaServer会自动推出保护模式。
eureka集群搭建
域名设置
C:\Windows\System32\drivers\etc\hosts
单机版

192.168.43.123 pactera3 pactera1 pactera2

多台机器 需要在多台机器上设置域名
192.168.43.xx1pactera1 192.168.43.xx2pactera2 192.168.43.XX3 pactera3

Eureka 设置
server: port: 7003eureka: instance: hostname: pactera3.com # 服务实例名 client: register-with-eureka: false # 表示自己不向服务中心组测 fetch-registry: false# 表示自己是注册中心,不去检索服务 service-url: # 注册到其他Eureka上 defaultZone: http://pactera1:7001/eureka/,http://pactera2:7002/eureka/

服务注册
eureka: client: service-url: defaultZone: http://pactera1:7001/eureka/,http://pactera2:7002/eureka/,http://pactera3:7003/eureka/

eureka 量化数据
参考文档:https://www.cnblogs.com/xishuai/p/spring-cloud-eureka-safe.html
Renews threshold 期望心跳数
期望心跳数= (count*2)*RenewalPercentThreshold

count: eureka中实例总数
RenewalPercentThreshold :实际心跳数 /期望心跳小于此值时开启自我保护,默认为0.85,以下为真实测试数据:
Renews threshold 计算方式
服务数量 Renews threshold
1 3
2 5
3 6
4 8
5 10
6 11
7 13
8 15
单个eureka Renews threshold计算代码
// eureka-core com.netflix.eureka.registry.AbstractInstanceRegistry if (this.expectedNumberOfRenewsPerMin > 0) { // Since the client wants to cancel it, reduce the threshold // (1 // for 30 seconds, 2 for a minute) this.expectedNumberOfRenewsPerMin = this.expectedNumberOfRenewsPerMin + 2; this.numberOfRenewsPerMinThreshold = (int) (this.expectedNumberOfRenewsPerMin * serverConfig.getRenewalPercentThreshold()); } /** getRenewalPercentThreshold 默认为0.85服务为0时 this.expectedNumberOfRenewsPerMin =2 服务每增加执行一次代码,eureka期望心跳数增加。 如果服务数为n, 期望心跳数 = (2*n*getRenewalPercentThreshold) */

【springcloud eurek 概念和常用设置】多个eureka Renews threshold 计算代码
// com.netflix.eureka.registry.PeerAwareInstanceRegistryImpl if ((count * 2) > (serverConfig.getRenewalPercentThreshold() * numberOfRenewsPerMinThreshold) || (!this.isSelfPreservationModeEnabled())) { this.expectedNumberOfRenewsPerMin = count * 2; this.numberOfRenewsPerMinThreshold = (int) ((count * 2) * serverConfig.getRenewalPercentThreshold()); }

eureka.instance.renewal-percent-threshold(default=0.85)
实际心跳数 /期望心跳小于此值时开启自我保护。举例: 1. 存在2个实例,期望心跳数为(2*2)*0.85=3,如果注册间隔为30s,则实际心跳为4。此时关闭其中一个实例,则心跳数为2*1=2,2/3=0.66<0.85,开启自我保护 2. 存在10个实例,期望心跳数为(10*2)*0.85=17,如果注册间隔为30s,则实际心跳为20。此时关闭其中一个实例,则心跳数为2*9=18,18/17=>0.85,不开启自我保护

    推荐阅读