当前位置:   article > 正文

SpringCloud-Eureka_springcloud的eureka的版本

springcloud的eureka的版本

Eureka是什么?

Eureka是Spring Cloud中的一个注册中心组件,为我们搭建的微服务项目提供服务注册与发现的功能。

大家是否还记得我们在上篇文章中,介绍Ribbon时搭建的示例代码,我们在那个里面没有引入注册中心,客户端需要调用的服务端的地址是写死到配置文件中的?这种方式会存在如下的弊端:

  • 服务节点的增加或删减都需要去维护调用方的服务列表

  • 服务的某一节点宕机,无法自动感应提出,导致一些请求不可用

注册中心这个组件就为我们很好的解决了上述的问题,通常一个注册中心应当具备如下的功能:

  • 服务注册

  • 服务列表获取

  • 服务列表状态监控

  • 自身高可用

架构

Eureka 由 Eureka Server 和 Eureka Client 两部分组成。

  • Server 是服务注册中心,负责维护集群中的服务实例信息和状态,以及给 Client 返回服务列表。在分布式环境下一般会多实例部署来达到高可用,比如在多个可用区上均部署 Eureka Server。

  • Client 是一个嵌入到业务服务的模块,负责与 Server 交互,包括发送注册请求、维持心跳、拉取服务列表等。

引入了服务发现中心后,需要为其他应用提供服务的应用在启动时需要先通过 Eureka Client 向 Eureka Server 发送注册请求,把自己的服务信息注册到 Eureka Server 上,同时需要定期发送心跳。在应用下线时发送取消注册请求,把自身从 Eureka Server 的服务列表里删除。在多实例部署的情况下,Eureka Client 需要根据一定的策略选择一个目标 Server 进行通讯,这个过程在后面会详细介绍。

而服务的调用方在发起调用时需要先从 Eureka Server 获取服务实例列表,然后可以根据客户端的负载均衡策略选择一个实例,然后再向该实例发起调用请求。

下面基于 spring-cloud-starter-eureka 版本 1.3.2.RELEASE 的代码,分别介绍一下 Eureka Server 和 Eureka Client 两者的工作原理。

Eureka核心原理

1、客户端获取服务 客户端启动服务的时候,会发送一个rest请求到注册中心获取服务信息,缓存到客户端本地,每隔30s会重新获取,可通过eureka.client.registry进行调优

2、客户端服务下线 当客户端正常下线的时候会发送一个rest请求到注册中心,注册中心会把服务的状态改为DOWN,也会推送服务下线的UDP事件到各个服务 3、服务端失效剔除

微服务环境中某个Eureka下线因网络故障等原因短时间内不可用,又没有收到服务下线通知时,Eureka 服务端 注册中心启动的时候会初始化一个定时任务,每隔60s剔除续约超时 4、服务端保护/心跳续约

Eureka 客户端定时向Eureka Server服务端发送心跳(renew),当服务端长时间(60s)没有收到心跳续约时间会进行失效剔除

5、服务端原理

Eureka Server 负责管理整个集群服务实例信息,有新实例注册时需要为其创建和管理对应的 Lease ,同时还负责把 Lease 的变更同步给集群中其他的 Eureka Server,以保证集群中所有的 Eureka Server 节点的服务列表最终一致。Eureka Server 会把这些 Lease 维护在一个 PeerAwareInstanceRegistry 里,当有 Eureka Client 需要获取服务列表时,需要从中获取这些 Lease 信息返回。

Eureka Server 几个关键模块的关系如下图。这里面最核心的是 PeerAwareInstanceRegistry ,它记录了当前注册过的所有服务实例的信息和状态。

Resources :这部分对外暴露了一系列的 Restful 接口。Eureka Client 的注册、心跳、获取服务列表等操作都需要调用这些接口。另外,其他的 Server 在同步 Registry 时也需要调用这些接口。

Controller :这里提供了几个 web 接口,主要用在 Eureka Server 本身的 Dashboard 页面, 从页面上可以查看到当前注册了的服务,以及每个服务下各个实例的状态。

PeerAwareInstanceRegistry :这里面记录了当前所以注册了的服务实例。当这些注册信息发生变化时,PeerAwareInstanceRegistry 还要负责把这些变化同步到其他的 Server。

PeerEurekaNodes :这里维护了集群里所有 Eureka Server 节点的信息,PeerAwareInstanceRegistry 在同步时需要从这里获取其他 Server 的信息。同时它还负责定时检查配置来发现是否有 Eureka Server 节点新增或删除。

HttpReplicationClient :这是 PeerAwareInstanceRegistry 向其他 Server 同步时发送请求的 http client。

5.1、Lease

服务向 Eureka Server 注册时,Eureka Server 会为其创建一个 Lease 。这些 Lease 是维护在上面说到的 PeerAwareInstanceRegistry 里的,它维护了一个 Map 结构

这是一个双重 Map,记录每个服务下有哪些实例,以及每个实例对应的 Lease 。 Lease 里记录了对应实例的注册时间和上次更新时间。

一个实例注册时会在 registry 里添加一个 Lease ,发送心跳时会更新 Lease 的时间,Lease 的有效期默认是 90 秒。有效期内未更新的 Lease 会被认为过期。

PeerAwareInstanceRegistry 会定时执行一个 EvictionTask ,将过期的 Lease 删除。EvictionTask 的默认执行周期是 60 秒,可以通过配置项修改。

eureka.server.evictionIntervalTimerInMs=60 * 1000

6、客户端原理

Eureka Client 封装了与 Eureka Server 进行各种交互的代码逻辑。集群中的服务需要引入 Eureka Client,并通过 Eureka Client 与 Eureka Server 进行交互。Eureka Client 的主要职责包括

  • 服务启动时注册服务

  • 定时发送心跳来更新 Lease

  • 服务下线时取消注册

  • 获取和定时更新已注册的服务列表

如果一个服务只调用其他服务,但自身不提供服务,那么可以通过配置控制不注册自身实例

eureka.client.registerWithEureka=false

相反,如果一个服务只提供服务,但不需要调用其他服务,那么可以配置不获取服务列表 eureka.client.fetchRegistry=false

上图是 Eureka Client 的内部结构。

  • Applications :保存了从 Eureka Server 获取到的服务信息,相当于 Eureka Client 端的服务列表缓存。

  • InstanceInfo :维护了自身服务实例的信息,注册和心跳时需要用到。

  • QueryClient :负责从 Eureka Server 获取已注册的服务,并且更新Applications 。

  • RegistrationClient :负责在服务启动时发送注册请求,然后定期发送心跳,最后在服务下线之前取消注册。

  • ClusterResolver :QueryClient 和 RegistrationClient 在发送请求前需要先知道 Eureka Server 的地址,ClusterResolver 可以根据不同的策略和实现返回 Eureka Server 地址列表以供选择。

  • JerseyApplicationClient :是真正发送网络请求的 Http client,QueryClient 和 RegistrationClient 获取到 Eureka Server 地址后会创建一个 JerseyApplicationClient 和该 Eureka Server 通讯

核心配置

1、服务端核心配置

2、客户端核心配置

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/天景科技苑/article/detail/794146
推荐阅读
相关标签
  

闽ICP备14008679号