Spring cloud eureka服务治理(2)

本文主要讲解eureka的基础架构、服务治理机制、和一些配置详解

一、基础架构:

Eureka整个服务治理基础架构的三个核心要素:服务注册中心,服务提供者、服务消费者;很多时候服务端提供者也会是消费者。

二、服务治理机制

服务提供者

(1)服务注册

服务提供者在启动的时候回通过发送REST请求的方式将自己注册到Eureka Server上,同时会携带自身的一些元素局,Eureka Server接收到REST请求之后将服务提供者的元数据信息存储在一个双层的Map中,其中第一层的key是服务名,第二层的key是具体服务的实例名。

(2)服务同步

在上一篇文章中提到过,高可用的服务注册中心,如果两个服务注册中心是捆绑在一起的时候,当服务提供者发送注册请求到一个服务注册中心的会后,它会将该请求转发给集群中相连的其他注册中心,从而实现注册中心之间的服务同步,通过服务同步,,服务提供者的信息就可以通过这两台服务注册中心中的任意一台获取到。

(3)服务续约

在服务注册完成之后,服务提供者会维护一个心跳用来持续告诉Eureka Server,以防被服务注册中心剔除掉,这就叫服务续约,关于服务续约有两个属性:

eureka.instance.lease-renawal-interval-in-seconds=30,服务预约任务的调用时间,默认30秒

eureka.instance.lease-expiration-duration-in-seconds=90,定义服务失效的时间,默认90秒

服务消费者

 (1)获取服务

当我们启用服务消费者的时候,会发送一个REST请求给注册中心,获取上面注册的服务清单,Eureka server会维护一份只读的清单返回给客户端,同时清单会每隔30秒更新一次,如果希望修改服务清单的更新时间,可以通过:

eureka.client.registrl-fetch-intervsl-seconds=30 参数进行修改,默认30秒

(2)服务调用

在上一篇文章中,是通过ribbon客户端负载均衡去调用的服务,ribbon默认采用的是轮询的方式进行调用,还可以修改成其他负载均衡策略。

(3)服务下线

当服务实例进行正常的关闭操作,会触发一个服务下线的REST请求给Eureka Server,注册中心收到请求之后,将该服务状态置为下线,并把下线事件传播出去。

服务注册中心

(1)失效剔除

为了将失效的服务从注册中心剔除,Eureka Server在启动时会创建一个定时任务,每隔一段时间(默认60秒),将清单中超时的没有续约的(默认90秒)服务剔除出去。

(2)自我保护

服务注册到Eureka Server中,在运行期间会统计心跳失败比例在15分钟时候低于85%,如果出现低于的情况,Eureka server会将当前的实例保护起来,让这些实例不过期,尽可能的保护服务实例。

有时候客户端会拿到已经失效或者不存在的服务,会出现调用服务失败的情况,所以客户端必须有容错机制,可以使用请求重试、断路器等机制。

由于本地调试很容易触发注册中心的保护机制,会使得注册的服务实例不是特别准确,在本地开发时,可以使用:

eureka.server.enable-self-preservation=false参数来关闭保护机制,确保注册中心可以将不可用的实例正确剔除。

三、配置详解

在实际使用Spring cloud Eureka时,我们所做的配置基本都是对Eureka 客户端进行配置,我们主要了解这部分的配置,

Eureka 客户端的配置主要分为两个方面:

(1)服务注册相关的配置信息:服务注册中心的地址、服务获取间隔时间、可用区域等。

(2)服务实例相关的配置,包括服务实例的名称、IP地址、端口号、健康检查路径等。

服务注册类配置,我们可以通过查看 org.springframework.cloud.netflix.eureka.EurekaClientConfigBean源码。主要就是服务注册中心,就是上篇文章里已经多次写到。

为了服务注册中心的安全。我们很多时候都会为服务注册中心加入安全教校验,在配置service-url时,加入相应的安全校验信息,

比如 http://<username>:<password>@localhost:1111/eureka ,指定用户名和密码。

服务实例配置,我们可以通过org.springframework.cloud.netflix.eureka.EurekainstanceConfigBean的源码来获取,主要有

元数据,实例名配置,端点配置,健康检查。

默认情况下eureka的健康检查不是通过spring-boot-actuator模块的/health端点来实现,而是依靠客户端的心跳机制来保持服务实例的存活,但是依靠心跳机制无法保证客户端应用能够听够正常服务,比如一些外部资源依赖,数据库,缓存,消息代理,如果这些外部依赖无法正常运作,那么就算客户端心跳是OK的,那么还是不能对外提供正常的服务。

在Spring Cloud Eureka中, 我们可以通过简单的配置, 把Eureka客户端的健康检测交 给spring-boot-actuator模块的/health端点, 以实现更加全面的健康状态维护。 详细的配置步骤如下所示:

• 在pom.xml中引入spring-boot-starter-actuator模块的依赖。

• 在application.proper巨es中增加参数配置 eureka.client.healthcheck.enabled=true。

• 如果客户端的/health端点路径做了一些特殊处理,请参考前文介绍端点配置时的 方法进行配置, 让服务注册中心可以正确访问到健康检测端点。

猜你喜欢

转载自blog.csdn.net/qiuhao9527/article/details/81096660