SpringCloud Eureka服务治理体系

本文使用的SpringCloud版本为 Greenwich.SR1

服务治理:Spring Cloud Eureka

Spring Cloud Eureka是Spring Cloud Netflix微服务套件中的一部分,它基于Netflix Eureka做了二次封装,主要完成微服务架构中的服务治理功能。Spring Cloud通过为Eureka增加了SpringBoot风格的自动化配置,我们只需通过简单引入依赖和注解配置就能让SpringBoot构建的微服务和Eureka服务治理体系整合。

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

  1. 服务注册中心:Eureka提供的服务端,提供服务注册与发现的功能
  2. 服务提供者:提供服务的应用,可以是SpringBoot应用,也可以是其他技术平台且遵循Eureka通信机制的应用。它将自己提供的服务注册到Eureka,以供其他应用发现。
  3. 服务消费者:消费者应用从服务注册中心获取服务列表,从而使消费者可以知道去何处调用所需要的服务,可以使用Ribbon或者Feign来实现服务消费。

服务注册

在服务治理框架中,通常都会构建一个注册中心,每个服务单元向注册中心登记自己提供的服务,将主机与端口号、版本号、通信协议等一些附加信息告知注册中心,注册中心按服务名分类组织服务清单。

服务发现

由于在服务治理框架下运作,服务间的调用不再通过指定具体的实例地址来实现,而是通过向服务名发起请求调用实现。所以服务调用方在调用服务提供方接口的时候,并不知道具体的服务实例位置。因此,调用方需要向服务注册中心咨询服务,并获取所有服务的实例清单,以实现对具体服务实例的访问。

 

Eureka服务端(服务注册中心)

Eureka服务端,也称为服务注册中心,支持高可用配置,依托强一致性提供良好的服务实例可用性,可以应对多种不同的故障场景。

如果Eureka以集群模式部署,当集群中有分片出现故障时,那么Eureka就转入自我保护模式。它允许在分片故障期间继续提供服务的发现和注册,当故障分片恢复运行时,集群中的其他分片会把它们的状态再次同步回来。

(1)导包

(2)配置

 

  • eureka.client.register-with-eureka:由于该应用是注册中心,所以设置为false,代表不向注册中心注册自己
  • eureka.client.fetch-registry:由于注册中心的职责就是维护服务实例,它并不需要去检索服务,所以也设置为false

(3)Enable注解

Eureka客户端

Eureka客户端,主要处理服务的注册与发现。客户端服务通过注解和参数配置的方式,嵌入在客户端应用程序的代码中,在应用程序运行时,Eureka客户端向注册中心注册自身提供的服务并周期性地发送心跳来更新它的服务租约。同时,它也能从服务端查询当前注册的服务信息并把它们缓存到本地并周期性地刷新服务租约。(很多时候既是服务提供者也是服务消费者)

服务提供者

(1)导包

(2)配置

  • eureka.client.serviceUrl.defaultZone:指定服务注册中心的地址

  • eureka.instance.prefer-ip-address:使用IP地址形式定义注册中心地址

(3)Enable注解

@EnableDiscoveryClient:激活eureka中的DiscoveryClient实现(自动化配置,创建DiscoveryClient接口针对eureka客户端的EurekaDiscoveryClient实例),实现以下Controller中对服务信息的输出。让该应用注册为Eureka客户端应用,已获得服务发现的能力。

服务发现与消费

服务消费者,主要完成两个目标,发现服务与消费服务。其中服务发现的任务由eureka的客户端完成,而服务消费的任务由Ribbon完成。Ribbon是一个基于HTTP和TCP的客户端负载均衡器,它可以通过客户端配置的服务端列表去轮询访问以达到均衡负载的作用。当Ribbon与Eureka联合使用时,Ribbon的服务实例清单扩展成从Eureka注册中心中获取服务端列表。

(1)导包

(2)配置

服务消费者不需要注册到eureka中

 

 

(3)Enable注解

(4)开启客户端负载均衡

(5) Controller中使用RestTemplate对服务提供的接口进行调用。注意这里使用Ribbon负载均衡时需要使用服务名来访问而不是具体的地址。当访问这个url时,会对配置的三个eureka服务提供的接口进行轮询调用,使用不同的数据库即可看出轮询效果。

失效剔除

有些时候,我们的服务实例并不一定会正常下线,可能由于内存溢出、网络故障等原因使服务不能正常运作。而服务注册中心并未收到“服务下线”的请求,为了从服务列表中将这些无法提供服务的实例剔除,Eureka Server在启动的时候会创建一个定时任务,默认每隔一段时间(默认为60秒)将当前清单中超时(默认为90秒)没有续约的服务剔除出去。

自我保护机制

服务注册到Eureka Server之后,会维护一个心跳连接,告诉Eureka Server自己还活着。Eureka Server在运行期间会统计心跳失败的比例在15分钟之内是否低于85%,如果出现低于的情况,Eureka Server会将当前实例注册信息保护起来,让这些实例不会过期。这样做会使客户端很容易拿到实际不存在额服务实例,会出现调用失败的情况。因此客户端要有容错机制,比如请求重试、断路器。

PS:本文参考《Spring Cloud微服务实战》翟永超著

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值