一、了解服务治理机制
在上一节搭建SpringCloud中,我们知道了整个 Eureka
服务治理基础架构的三个核心要素。
下面我们进一步了解下SpringCloud的服务治理机制
我们看可以先看下图:
根据上面的结构, 下面我们来详细了解一下, 从服务注册开始到服务调用, 及各个元
素所涉及的一些重要通信行为。
二、服务提供者
服务提供者有服务注册、服务同步、服务续约。
服务注册: “服务提供者” 在启动的时候会通过发送REST请求的方式将自己注册到EurekaServer
上, 同时带上了自身服务的一些元数据信息。- 在服务注册时, 需要确认一下
eureka.client.register-with-eureka=true
参数是否正确, 该值默认为true
。 若设置为false
将不会启动注册操作。
- 在服务注册时, 需要确认一下
服务同步: 当服务提供者发送注册请求到一个服务注册中心时, 它会将该请求转发给集群中相连的其他注册中心, 从而实现注册中心之间的服务同步。
服务续约: 在注册完服务之后,服务提供者会维护一个心跳用来持续告诉
EurekaSe1-ver:
“我还活着”, 以防止Eureka Server
的“剔除任务 ” 将该服务实例从服务列表中排除出去,我们称该操作为服务续约(Renew)。eureka.instance.lease-renewal-interval-in-seconds
参数用于定义服务续约任务的调用间隔时间,默认为30秒。eureka.instance.lease-expira巨ondura已on-in-seconds
参数用于定义服务失效的时间,默认为90秒。
三、服务消费者
服务消费者有获取服务、服务调用、服务下线。
获取服务: 启动服务消费者的时候,会发送一个
REST
请求到注册中心,获取注册的服务清单。- 必须确保
eureka.c巨ent.fetch-registry= true
参数设置为true
- 可以修改缓存清单的更新时间,设置过
eureka.client.registry-fetch-interval-seconds= 30
,单位为秒
- 必须确保
服务调用: 服务消费者在获取服务清单后,通过服务名可以获得具体提供服务的实例名和该实例
的元数据信息。服务下线: 以在客户端程序中, 当服务实例进行正常的关闭操作时, 它会触发一个服务下线的REST请求给
Eureka Server
, 告诉服务注册中心:“我要下线了”。 服务端在接收到请求之后,该服务状态置为下线(DOWN)
, 并把该下线事件传播出去。
四、服务注册中心
服务注册中心有失效剔除、自我保护。
失效剔除: 由于内存溢出、 网络故障等原因使得服务不能正常工作, 而服务注册中心并未收到 “服务下线” 的请求。
- 解决办法:在启动的时候会创建一个定时任务,默认每隔一段时间(默认为60秒) 将当前清单中超时(默认为90秒)没有续约的服务剔除出去。
自我保护: 客户端必须要有容错机制, 比如可以使用请求重试、断路器等机制,避免出现调用失败的情况。本地调试很容易出发自我保护机制。
- 解决办法:以使用
eureka.server.enableself-preservation = false
来关闭自我保护机制,以确保注册中心可以将不可用的实例正确剔除。
- 解决办法:以使用