Spring Cloud及微服务(二):服务治理Spring Cloud Eureka

本文内容基于《Spring Cloud微服务实战》,翟永超著。


服务治理

服务治理用来实现各个微服务实例的自动化注册与发现,在服务不多的时候,可以通过静态配置来完成服务的调用,就需要手工维护服务的具体实例清单,随着服务增多,手工维护就越来越困难,于是产生了大量的服务治理框架和产品。

  • 服务注册:首先构建一个注册中心,每个服务单元向注册中心登记自己提供的服务,将主机、端口号、版本号、通信协议等一些附加信息告知注册中心,注册中心按服务名分类组织服务清单。注册中心还需要以心跳的方式去监测清单中的服务是否可用,若不可用则需要从服务清单中剔除,达到排除故障服务的效果。
  • 服务发现:由于在服务治理框架下运作,服务间的调用不再通过指定具体的实例地址来实现,而是通过向服务名发起请求调用实现。比如现有服务C希望调用服务A,服务C就需要向注册中心发起咨询服务请求,注册中心就会将服务A的位置清单返回给服务C,当服务C要发起调用的时候,便从该清单中以某种轮询策略取出一个位置来进行服务调用(客户端负载均衡)。

搭建服务注册中心

  • 依赖

  • 启动类

  • 配置

Spring Cloud及微服务(二):服务治理Spring Cloud Eureka_第1张图片

注册服务提供者

  • 依赖

  • 接口

Spring Cloud及微服务(二):服务治理Spring Cloud Eureka_第2张图片

  • 启动类

  • 配置

Spring Cloud及微服务(二):服务治理Spring Cloud Eureka_第3张图片

高可用注册中心

  • 两个注册中心分别向对方注册自己,配置

Spring Cloud及微服务(二):服务治理Spring Cloud Eureka_第4张图片

Spring Cloud及微服务(二):服务治理Spring Cloud Eureka_第5张图片

  • 修改服务提供者配置

Spring Cloud及微服务(二):服务治理Spring Cloud Eureka_第6张图片

服务发现与消费

  • 依赖

Spring Cloud及微服务(二):服务治理Spring Cloud Eureka_第7张图片

  • 接口

Spring Cloud及微服务(二):服务治理Spring Cloud Eureka_第8张图片

  • 启动类

Spring Cloud及微服务(二):服务治理Spring Cloud Eureka_第9张图片

  • 配置

Spring Cloud及微服务(二):服务治理Spring Cloud Eureka_第10张图片

Eureka基础架构

Eureka服务治理架构的三个核心要素:

  • 服务注册中心:Eureka提供的服务端,提供服务注册与发现的功能。
  • 服务提供者:提供服务的应用,它将自己提供的服务注册到Eureka,以供其他应用发现。
  • 服务消费者:消费者应用从服务注册中心获取服务列表,从而知道去何处调用其需要的服务。

服务注册中心

  • 失效剔除:注册中心在启动的时候会创建一个定时任务,每隔一段时间(默认60秒)将当前清单中超时(默认90秒)没有续约的服务剔除出去。
  • 自我保护:注册中心在运行期间,会统计心跳失败的比例在15分钟之内是否低于85%,如果出现低于的情况,会将当前的实例注册信息保护起来,让这些实例不会过期,尽可能保护这些注册信息。但是,在这段保护期间内实例若出现问题,那么客户端很容易拿到实际已经不存在的实例,会出现调用失败的情况,所以客户端必须要有容错机制,比如使用请求重试、断路器等。
#本地开发时,关闭保护机制,以确保注册中心可以将不可用的实例正确剔除
eureka.server.enable-self-preservation=false

服务提供者

  • 服务注册:服务提供者在启动的时候,会通过发送REST请求的方式将自己注册到注册中心上,同时带上自身的一些元数据信息。注册中心接收到这个REST请求之后,将元数据信息存储在一个双层结构Map中,其中第一层的key是服务名,第二层的key是具体服务的实例名。
  • 服务同步:高可用注册中心下,由于注册中心之互相注册,当服务提供者发送注册请求到一个注册中心时,它会将该请求转发给集群中相连的其他注册中心,从而实现注册中心之间的服务同步。
  • 服务续约:服务提供者在向注册中心注册之后,会维护一个心跳用来持续告诉注册中心该服务还“活着”。
#定义服务续约任务的调用间隔时间
eureka.instance.lease-renewal-interval-in-seconds=30
#定义服务失效的时间
eureka.instance.lease-expiration-duration-in-seconds=90

服务消费者

  • 获取服务:服务消费者在启动的时候,会发送一个REST请求到注册中心获取在上面注册的服务清单。为了性能考虑,注册中心会维护一份只读的服务清单来返回给客户端,同时该服务清单会每隔30秒更新一次。
#设置服务清单的更新时间
eureka.client.registry-fetch-interval-seconds=30
  • 服务调用:服务消费者在获取到服务清单后,通过服务名可以获得具体提供服务的实例名和实例的元数据信息,就可以根据需要决定调用哪个实例。
  • 服务下线
    • 方式1:客户端主动通知注册中心下线

Spring Cloud及微服务(二):服务治理Spring Cloud Eureka_第11张图片

    • 方式2:设置服务的状态

 

Spring Cloud及微服务(二):服务治理Spring Cloud Eureka_第12张图片

Eureka客户端服务注册相关的配置

  • 注册中心加入安全校验

Spring Cloud及微服务(二):服务治理Spring Cloud Eureka_第13张图片

  • 其他配置

Spring Cloud及微服务(二):服务治理Spring Cloud Eureka_第14张图片

Eureka客户端服务实例相关配置

通过eureka.instance.=的格式对标准化元数据直接进行配置。

  • 实例名配置

  • 端点配置

Spring Cloud及微服务(二):服务治理Spring Cloud Eureka_第15张图片

  • 其他配置

Spring Cloud及微服务(二):服务治理Spring Cloud Eureka_第16张图片

 

你可能感兴趣的:(Java-Spring,Cloud)