Eureka是什么

eureka是springcloud Netflix微服务套件中的一部分,是一个服务注册和发现模块。
eureka包含了服务器端和客户端组件。服务器端,也被称作是服务注册中心,用于提供服务的注册于发现。Eureka支持高可用配置,当集群中有分片出现故障时,Eureka会转入自动保护模式,它允许分片故障期间继续提供服务的发现和注册,当故障分片恢复正常时,集群中其他分片会把他们的状态再次同步回来。

客户端组件包含服务消费者与服务生产者。在应用程序运行时,Eureka客户端向注册中心注册自身提供的服务并周期性发送心跳来更新它的服务租约。同时也可以从服务端查询当前注册的服务信息并把他们缓存到本地并周期性刷新服务状态。

Eureka好比是滴滴,负责管理、记录服务提供者的信息。服务调用者无需自己寻找服务,而是把自己的需求告诉Eureka,然后Eureka会把符合你需求的服务告诉你。
同时,服务提供方与Eureka之间通过“心跳”机制进行监控,当某个服务提供方出现问题,Eureka自然会把它从服务列表中剔除。
这就实现了服务的自动注册、发现、状态监控。

Eureka原理图

注册中心eureka不维护_注册中心eureka不维护


• Eureka:就是服务注册中心(可以是一个集群),对外暴露自己的地址

• 提供者:启动后向Eureka注册自己信息(地址,提供什么服务)

• 消费者:向Eureka订阅服务,Eureka会将对应服务的所有提供者地址列表发送给消费者,并且定期更新

• 心跳(续约):提供者定期通过http方式向Eureka刷新自己的状态

Eureka详解

3.1 Eureka架构中的三个核心角色:

• 服务注册中心
Eureka的服务端应用,提供服务注册和发现功能
• 服务提供者
提供服务的应用,可以是SpringBoot应用,也可以是其他任意技术实现,只要对外提供的Rest风格服务即可。
• 服务消费者
消费应用从注册中心获取服务列表,从而得知每个服务方的信息,知道去哪里调用服务方。

3.2 高可用的Eureka Server

服务同步
多个Eureka Server之间也会相互注册为服务,当服务提供者注册到Eureka Server集群中的某个节点时,该节点会把服务的信息同步给集群中的每个节点,从而实现数据同步。因此,无论客户端访问到Eureka Server集群中的任意一个节点,都可以获取到完整的服务列表信息。

3.3 服务提供者

服务续约
在注册服务完成以后,服务提供者会位置一个心跳(定时向EurekaServer发起Rest请求),告诉EurekaServer:“我还活着”。这个我们成为服务的续约(renew)

有两个重要参数可以修改服务续约的行为:

eureka:
  instance:
    lease-renewal-interval-in-seconds: 30
    lease-expiration-duration-in-seconds: 90
• lease-renewal-interval-in-seconds:服务续约(renew)的间隔,默认为30秒
• lease-expiration-duration-in-seconds:服务失效时间,默认值90秒

也就是说,默认情况下每隔30秒服务会向注册中心发送一次心跳,证明自己还活着。如果超过90秒没有发送心跳,EurekaServer就会认为该服务宕机,会从服务列表中移除,这两个值在生产环境不要修改,默认即可。

3.4 服务消费者

获取服务列表
当服务消费者启动时,会检测 eureka.client.fetch-registry=true 参数的值,如果为true,则会拉取Eureka Server服务的列表只读备份,然后缓存在本地。并且每隔30秒会重新获取并更新数据。
我们可以通过下面的参数来修改:

eureka:
  client:
    registry-fetch-interval-seconds: 5

生产环境中,我们不需要修改这个值。

4 Eureka 集群原理说明

注册中心eureka不维护_保护模式_02

5 Eureka自我保护机制

5.1 概述

保护模式主要用于一组客户端盒Eureka Server 之间存在网络分区场景下的保护。一旦进入保护模式,Eureka Server将会尝试保护其服务注册表中的信息,不再删除服务注册表中的数据,也就是不会注销任何微服务。

如图这段话说明进入了自我保护模式。

注册中心eureka不维护_注册中心eureka不维护_03

5.2 为什么会有自我保护机制

为了使EurekaClient可以正常运行,但是与EurekaServer网络不通情况下,EurekaServer不会立刻将EurekaClient服务剔除。

5.3 什么是自我保护机制

如图:

注册中心eureka不维护_Server_04


默认情况下,EurekaClient定时向EurekaServer端发送心跳包。如果Eureka在Server端在一定时间内(默认90秒)没有收到EurekaClient发送心跳包,便会直接从服务注册列表剔除该服务,但是在段时间啊(90秒中)内丢失了大量的服务实例心跳,这时候EurekaServer会开启自我保护机制,不会剔除该服务(该现象可能出现在如果网络不通,但是EurekaClient未出现宕机的时候。此时如果换做别的注册中心,如果一定时间内没有收到心跳会将剔除该服务,这样就出现了严重失误,因为客户端还能正常发送心跳,只是网络延迟问题,而保护机制是为了解决此问题而产生的)。

在自我保护模式中,Eureka Server会保护服务注册表中的信息,不再注销任何服务实例。

它的设计哲学就是宁可保留错误的服务注册信息,也不盲目注销任何可能健康的服务实例。
综上,自我保护模式是一种应对网络以长的安全保护措施。它的架构哲学就是宁可同时保留所有微服务(健康的和不健康的)也不盲目注销任何可能健康的微服务。使用自我保护模式,可以让Eureka集群更加健壮、稳定。