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.xx1  pactera1	
192.168.43.xx2  pactera2
192.168.43.XX3	pactera3

Eureka 设置

server:
  port: 7003
  
eureka:
  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)
*/

多个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,不开启自我保护

你可能感兴趣的:(java)