Chapter three《SpringCloud微服务实战》

2018-12-20  本文已影响0人  LUOERD

服务治理之Spring Cloud Eureka

1.服务治理。可以说是微服务架构中最为核心和基础的模块,主要用来实现各个微服务实例的自动化注册发现

PS:为了解决微服务架构中的服务实例维护问题,产生了大量的服务治理框架和产品。而他们都围绕着服务注册服务发现机制来完成对微服务应用实例的自动化管理。

2.使用Eureka构建注册中心以及进行注册与发现服务。

3.Eureka详解。

1.基础架构,即三个核心要素。服务注册中心、服务提供者、服务消费者。

2.服务治理机制。

image.png

a. 服务提供者:服务注册、服务同步、服务续约。
b. 服务消费者:获取服务、服务调用、服务下线。
c.服务注册中心:失效剔除、自我保护。

eg:服务注册:服务提供者在启动的时候会通过REST请求的方式将自己注册到Eureka Server上,同时带上自身服务的一些元数据信息。Eureka Server接收到这个Rest请求之后,将元数据信息存储在一个双层结构的Map中,其中第一层的key是服务名。第二层的key 是具体服务的实例名。
在服务注册时,需要确认一下eureka.client.register-with-eureka=true参数是否正确,该值默认为true。若设置为fasle将不会启动注册操作。
eg:服务同步:从eureka服务治理体系架构图中可以看到,不同的服务提供者可以注册在不同的服务注册中心上,它们的信息被不同的服务注册中心维护。
此时,由于多个服务注册中心互相注册为服务,当服务提供者发送注册请求到一个服务注册中心时,它会将该请求转发给集群中相连的其他注册中心,从而实现服务注册中心之间的服务同步。通过服务同步,提供者的服务信息就可以通过集群中的任意一个服务注册中心获得。
eg:服务续约:在注册服务之后,服务提供者会维护一个心跳用来持续高速Eureka Server,“我还在持续提供服务”,否则Eureka Server的剔除任务会将该服务实例从服务列表中排除出去。我们称之为服务续约。

下面是服务续约的两个重要属性:
(1)eureka.instance.lease-expiration-duration-in-seconds
leaseExpirationDurationInSeconds,表示eureka server至上一次收到client的心跳之后,等待下一次心跳的超时时间,在这个时间内若没收到下一次心跳,则将移除该instance。默认为90秒,如果该值太大,则很可能将流量转发过去的时候,该instance已经不存活了。
如果该值设置太小了,则instance则很可能因为临时的网络抖动而被摘除掉。
该值至少应该大于leaseRenewalIntervalInSeconds
(2)eureka.instance.lease-renewal-interval-in-seconds
leaseRenewalIntervalInSeconds,表示eureka client发送心跳给server端的频率。如果在leaseExpirationDurationInSeconds后,server端没有收到client的心跳,则将摘除该instance。除此之外,如果该instance实现了HealthCheckCallback,并决定让自己unavailable的话,则该instance也不会接收到流量。

eg:获取服务:消费者服务启动时,会发送一个Rest请求给服务注册中心,来获取上面注册的服务清单。为了性能考虑,Eureka Server会维护一份只读的服务注册清单来返回给客户端,同时该缓存清单默认会每隔30秒更新一次。
下面是获取服务的两个重要的属性:
(1)eureka.client.fetch-registry
是否需要去检索寻找服务,默认是true
(2)eureka.client.registry-fetch-interval-seconds
表示eureka client间隔多久去拉取服务注册信息,默认为30秒,对于api-gateway,如果要迅速获取服务注册状态,可以缩小该值,比如5秒
eg:服务调用:服务消费者在获取服务清单后,通过服务名可以获取具体提供服务的实例名和该实例的元数据信息。因为有这些服务实例的详细信息,所以客户端可以根据自己的需要决定具体调用哪个实例,在Ribbon中会默认采用轮询的方式进行调用,从而实现客户端的负载均衡。
eg:服务下线:在系统运行过程中必然会面临关闭或重启服务的某个实例的情况,在服务关闭操作时,会触发一个服务下线的Rest服务请求给Eureka Server,告诉服务注册中心:“我要下线了。”服务端在接收到该请求后,将该服务状态置位下线(DOWN),并把该下线事件传播出去。

image.png

3. region(地域)与zone(可用区)

4.服务实例类配置

大多数情况下,我们不需要修改这个几个url配置。但是当应用不使用默认的上下文(context path或servlet path,比如配置server.servletPath=/test),或者管理终端路径(比如配置management.contextPath=/admin)时,我们需要修改健康检查和状态页的url地址信息。
application.yml配置文件如下:
server.context-path=/helloeureka

我们可以通过eureka.instance.<properties>=<value>的格式对标准化元数据直接进行配置,其中<properties>就是EurekaInstanceConfigBean对象中的成员变量。而对于自定义元数据,可以通过eureka.instance.metadataMap.<key>=<value>的格式来进行配置。比如:
eureka.instance.metadataMap.zone=shanghai
//随机生成实例名
eureka.instance.metadataMap.instanceId={spring.application.name}:{random.value}

在Spring Cloud Eureka中,可以把Eureka客户端的健康检测交给spring-boot-actuator模块的health端点,以实现更加全面的健康状态维护,设置方式如下:
(1) 在pom.xml中引入spring-boot-starter-actuator模块的依赖
(2) 在application.properties中增加参数配置
eureka.client.healthcheck.enabled=true

5.跨平台支持

上一篇 下一篇

猜你喜欢

热点阅读