Spring Cloud Eureka详细说明

Posted ibethfy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring Cloud Eureka详细说明相关的知识,希望对你有一定的参考价值。

之前学习了如何配置Eureka注册中心、消费者等,关于更详细的一些常用的配置在这里说明。

1、注册中心的自我保护模式

  在我们调试Eureka的注册中心时,访问注册中心页面,常常会看见以下提示。

  该提示表明,注册中心此时已进入保护模式,那什么是保护模式:Eureka服务在注册到注册中心后,会周期发送心跳给注册中心,以证明自己还活着,注册中心在运行期间,会统计15分钟内的心跳失败比例是否低于85%,如果存在,则注册中心进入保护模式,该模式下,注册中心不会剔除失效的节点,这些实例不会过期,此时会有上图提示出现。由于失效节点未及时剔除,可能会出现客户端获取的服务列表中有不可能实例存在,这个时候,可以通过客户端负载均衡和熔断器等机制来实现容错机制。

  自我保护模式在真实环境中是很有用的,它是为了防止网络分区导致的网络问题或心跳续约网络不稳定情况下,实例实际可用,但注册中心却将其剔除的情况。比如a实例在A区,注册中心B区,由于网络故障,a实例无法及时发送心跳给注册中心续约,导致注册中心将其剔除,但实际a实例此时可用。当然,注册中心也可以通过关闭自我保护模式,及时剔除未续约的服务。通过eureka.server.enable-self-preservation=false配置关闭自我保护模式。除非要求及时剔除失效实例,建议还是开启自我保护模式。服务端可以通过eureka.server.eviction-interval-timer-in-ms=6000来设置失效检测时间周期,单位为ms。

  开发环境下可关闭保护模式,实例下线会及时感知到;生产环境下,可以开启保护模式,服务扩展注册中心可以马上得知,服务故障,应定位问题并重启,如果需要剔除该服务,在高可用注册中心下,可以依次重启注册中心,使失效节点剔除,并且消费端Ribbon应配置重试机制。

2、服务提供者的服务续约

  服务提供者将自己注册到注册中心后,需要通过周期发送心跳(默认30秒),让注册中心知道自己是否还存活,已防止被注册中心剔除,这个一般有两个配置项去控制。

  eureka.instance.lease-renewal-interval-in-seconds=30,控制心跳周期间隔时间;

  eureka.ins七ance.lease-expiration-duration-in-seconds=90,控制服务时效的时间,指定距离最后一次心跳时间90秒后未续约,则让注册中心剔除实例(需要同时关闭保护模式才能使过期节点被剔除)。

3、服务消费者的清单更新周期

  当我们启动服务消费者之后,消费者会发送一个Rest请求给注册中心,以获取服务实例清单。需要确保eureka.client.fetch-registry=true,该配置表明需要获取清单。

  服务消费者会定期更新服务清单(默认30秒),也可自己配置更新周期,通过eureka.client.registry-fetch-interval-seconds=60来配置。

4、服务调用

  服务调用我们使用Ribbon,默认是以轮询的方式来调用服务(采用其他方式之后会有另外文章说明)。这里涉及到Region和Zone的概念,Region大致意思是中心,一个服务只能属于一个Region,默认为default,若要自己设置可通过eureka.client.region来定义。Zone表示一个区域,常用于实现不同网络分区的实例配置,已实现负载均衡的区域亲和性。一个Region可以包含多个Zone。我们之前配置的defaultZone就是Zone的默认key值,所以自己可以指定Zone。所谓区域亲和性,指的是,Ribbon在实现的时候,会优先访问与消费者同一Zone下面的服务实例,在当前Zone不存在实例时才会去访问其他Zone的实例。以下是简单的配置及说明。

  1. 服务注册中心,服务提供者,服务消费者都需配置以下内容。
    eureka:
      client:
        prefer-same-zone-eureka: true
        region: chengdu
        availability-zones:
          chengdu: zone-1,zone-2
        service-url:
          zone-1: http://localhost:30000/eureka/
          zone-2: http://localhost:30001/eureka/

    eureka.client.prefer-same-zone-eureka=true,表明会按照availability-zones中指定的可用Zone中的第一个Zone配置的url去注册。服务注册中心在service-url中配置高可用的另一注册中心地址。服务提供者和消费者可以在单个zone的url中指定两个注册中心,实现高可用。

  2. 服务调用者和提供者,有以下配置,用于指定属于哪个zone。Ribbon消费者从注册中心拉去服务列表后,会去匹配以下配置指定的zone,优先调用zone相同的实例。
    eureka:
      instance:
        metadata-map:
          zone: zone-1

     

 

以上是关于Spring Cloud Eureka详细说明的主要内容,如果未能解决你的问题,请参考以下文章

spring cloud 之eureka配置

spring cloud eureka ip或者域名怎么获取

微服务架构之spring cloud eureka

spring cloud 注册中心--eureka注册与发现

Spring-Cloud Eureka集群配置

Spring-Cloud Eureka集群配置