Eureka 工作细节

Eureka 本身可以分为两大部分,Eureka Server 和 Eureka Client

Eureka Server

Eureka Server 主要对外提供了三个功能:

  1. 服务注册,所有的服务都注册到 Eureka Server 上面来
  2. 提供注册表,注册表就是所有注册上来服务的一个列表,Eureka Client 在调用服务时,需要获取这个注册表,一般来说,这个注册表会缓存下来,如果缓存失效,则直接获取最新的注册表
  3. 同步状态,Eureka Client 通过注册、心跳等机制,和 Eureka Server 同步当前客户端的状态

Eureka Client

Eureka Client 主要是用来简化每一个服务和 Eureka Server 之间的交互。Eureka Client 会自动拉取、更新以及缓存 Eureka Server 中的信息,这样,即使 Eureka Server 所有节点都宕机,Eureka Client依然能够获取到想要调用服务的地址(但是地址可能不准确)。

服务注册

服务提供者将自己注册到服务注册中心(Eureka Server),需要注意,所谓的服务提供者,只是一个业务上上的划分,本质上他就是一个 Eureka Client。当 Eureka Client 向 Eureka Server 注册时,他需要提供自身的一些元数据信息,例如 IP 地址、端口、名称、运行状态等等。

服务续约

Eureka Client 注册到 Eureka Server 上之后,事情没有结束,刚刚开始而已。注册成功后,默认情况下,Eureka CLient 每隔 30 秒就要向 Eureka Server 发送一条心跳消息,来告诉 Eureka Server 我还在运行。如果 Eureka Server 连续 90 秒都有没有收到 Eureka Client 的续约消息(连续三次没发送),它会认为 Eureka Client 已经掉线了,会将掉线的 Eureka Client 从当前的服务注册列表中剔除。

服务续约,有两个相关的属性(一般不建议修改):

eureka.instance.lease-renewal-interval-in-seconds=30
eureka.instance.lease-expiration-duration-in-seconds=90
  • eureka.instance.lease-renewal-interval-in-seconds 表示服务的续约时间,默认是 30 秒
  • eureka.instance.lease-expiration-duration-in-seconds 服务失效时间,默认是 90 秒

服务下线

当 Eureka Client 下线时,它会主动发送一条消息,告诉 Eureka Server ,我下线啦。

获取注册表信息

Eureka Client 从 Eureka Server 上获取服务的注册信息,并将其缓存在本地。本地客户端,在需要调用远程服务时,会从该信息中查找远程服务所对应的 IP 地址、端口等信息。Eureka Client 上缓存的服务注册信息会定期更新(30 秒),如果 Eureka Server 返回的注册表信息与本地缓存的注册表信息不同的话,Eureka Client 会自动处理。
这里,也涉及到两个属性,一个是是否允许获取注册表信息:
eureka.client.fetch-registry=true
Eureka Client 上缓存的服务注册信息,定期更新的时间间隔,默认 30 秒:
eureka.client.registry-fetch-interval-seconds=30

Eureka 集群原理

我们来看官方的一张 Eureka 集群架构图:

在这个集群架构中,Eureka Server 之间通过 Replicate 进行数据同步,不同的 Eureka Server 之间不区分主从节点,所有节点都是平等的。节点之间,通过置顶 serviceUrl 来互相注册,形成一个集群,进而提高节点的可用性。

在 Eureka Server 集群中,如果有某一个节点宕机,Eureka Client 会自动切换到新的 Eureka Server上。每一个 Eureka Server 节点,都会互相同步数据。Eureka Server 的连接方式,可以是单线的,就是 A-->b-->C ,此时,A 的数据也会和 C 之间互相同步。但是一般不建议这种写法,在我们配置
serviceUrl 时,可以指定多个注册地址,即 A 可以即注册到 B 上,也可以同时注册到 C 上。

Eureka 分区:

  1. region:地理上的不同区域
  2. zone:具体的机房
posted @ 2020-08-02 20:18  柒丶月  阅读(100)  评论(0编辑  收藏  举报