本篇文章主要深入介绍Eureka,以及部分源码分析和配置详解
基础架构
在服务治理中包含三个核心要素
服务注册中心:Eureka提供的服务器,提供了服务注册和服务发现的功能
服务提供者:提供服务的应用,可以使SpringBoot,也可以是其他技术平台且遵循Eureka的通信机制的应用。它将自己的服务注册到Eureka
服务消费者:消费者从服务注册中心获取服务列表,从而使得消费者知道去何处调用其所需要的服务,在SpringCloud中可以通过Ribbon和Feign的消费方式实现(后面文章会提到这两个组件)
服务治理机制
下面这幅图包含
两个服务注册中心组成的高可用 服务注册中心-1 服务注册中心-2
两个服务提供者,分别注册到一个服务注册中心
两个服务消费者,交叉调用两个服务提供者,以及分别获取其中一个注册中心中的服务列表清单
下面基于这幅图来详细了解 Eureka基础架构中各个元素是如何通信,以此理解Eureka实现的服务治理体系是如何运作起来的
服务注册
服务提供者在启动的时候会通过REST请求的方式将自己注册到Eureka Server上,同时带上自身的一些元数据,Eureka Server接收到这个请求后,会把这些元数据信息存储在一个双层Map中第一层的key是key的服务名,第二层的key是具体服务的实例名,(同一个服务可以创建多个实例,在不同的节点上运行
Map<serverName,<instanceName,元数据>>
服务同步
上图可以看到两个服务提供者,分别注册到不同的注册中心上面,他们的信息分别被两个服务注册中心维护,由于服务注册中心之间是互相注册为服务(高可用),当一个服务提供者向一个注册中心发送注册请求的时候,该注册请求同时也会发送到这个注册中心所有相关联的其他注册中心,从而这样两个服务提供者的服务信息就可以通过任意一个注册中心获取到。
服务续约
服务注册成功后,服务提供者会维护一个心跳用户持续的告诉Eureka Server:“我还活在”,以防止Eureka Server的“剔除任务”将该服务剔除注册中心。这种心跳操作称为续约
在Eureka Client端 有两个重要的参数配置
eureka.instance.lease-renewal-interval-in-seconds = 30(默认30秒)用于续约任务的调用时间间隔
eureka.instance.lease-expiration-duration-in-seconds = 90(默认90秒)用于定义服务失效的有效时间间隔
获取服务
启动服务消费者的时候,会发送时一个REST请求给服务注册中心,获取一份该注册中心上的服务清单,服务注册中心只会维护一份服务清单,同时服务消费者默认30秒刷新一次服务清单。
获取服务是服务消费者的基础,同时必须保证服务消费者的配置参数eureka.client.fetch-registry=true表示是否从EurekaServer获取注册信息,默认为true。
eureka.client.registry-fetch-interval-seconds=30表示服务消费者缓存清单的刷新时间间隔
服务调用
服务消费者在获取服务清单后,通过服务名可以获取得到具体提供服务的实例名和该实例的元数据信息,有了这些服务实例的详细信息,客户端就可以根据自己的需求决定调用哪个实例。
服务下线
在客户端程序中,当服务实例进行正常的关闭操作时,它会触发一个服务下线的REST请求给Euteka Server,告诉服务注册中心“我要下线”,服务端接受到这个请求后,会把该服务的状态设置为下线(DOWN),并把该服务下线的事件传播到其他关联的注册中心去。
失效剔除
有时候,服务实例并不能正常下线,可能由于网络故障,内存溢出等原因造成服务不能正常下线,而服务注册中心并未收到“服务下线”的请求,为了在服务注册中心剔除这些无法提供服务的实例,Eureka Server 在启动的时候会创建一个定时任务,每个一段时间(默认60秒)将当前清单中没有续约的实例剔除。
自我保护
这个是Eureka Server的一种容错机制,服务注册到注册中心后会维护一个心跳,由于网络等原因,可能Eureka Server 会存在漏接收心跳,在Eureka Server中,会统计15分钟内心跳的失败比例在85%以下,就会启动自我保护机制,让这个实例不会过期。通知设置eureka.server.enable-self-preservation=true开启自我保护。在本地测试可以关闭自我保护,以确保注册中心能够及时提出不可用实例。
Eureka Server 关闭自我保护后,页面会有提示
配置详解
在Eureka中分为Eureka Server 和Eureka Client,在集群中所有的微服务应用,包括一些基础应用,都可以看做是Eureka客户端,其实Eureka服务端也可以看做是Eureka客户端只不过在这个Eureka客户端的基础上添加了一个注册中心的特殊功能,所以Eureka 客户端的配置存在于所有的Eureka 服务治理体系下的应用实例中。
Eureka客户端的配置主要分为两个方面
服务注册相关的配置信息,包括服务注册中心地址,服务获取的时间间隔,可用区域等。
服务实例相关的配置信息,包括服务实例名称,IP地址,端口号,健康检查路径等
服务注册类配置
服务注册配置的前缀是eureka.client
下面是详细的服务注册类配置
服务实例配置
服务实例配置的前缀是eureka.instance
服务实例详细配置
网友评论