一、Spring Cloud Eureka 简述
Eureka 是 Netflix开发的,一个基于REST服务的,服务注册和发现的组件。
Eureka 包括 Eureka Server 和 Eureka Client,Eureka server 即注册中心,Eureka
Client启动会向 Eureka Server 注册,这样其他的Eureka Client访问Eureka Server
即可拿到注册了的Eureka Client 的信息。
图示各部分说明:
- Eureka Server :Eureka 的服务端,多个Eureka Server 可以构成集群,并且各个节点是完全对等的。
- Eureka Client :Eureka 的客户端,业务服务依赖它实现服务注册和服务发现功能。
- Application Service : 服务提供者,依赖Eureka Client 实现服务的注册功能
- Application Client :服务消费者,依赖Eureka Client 实现服务的发现功能。
- Register:Eureka Client启动时会向Eureka Server发送Register请求来注册自己。
- Renew:续约请求,Eureka Client会周期性的向Eureka Server发送心跳来续约,默认30s。
- Cancel:Eureka Client关闭时会发送Cancel下线请求。
- Get:Eureka Client会周期性的发送Get请求,从Eureka Server中获取注册表信息,默认为30S。
- Make Remote Call:服务消费者通过 Make Remote Call来访问服务提供者。
- Replicate:各个Eureka Server之间通过Replicate实现数据同步。当Eureka Client有请求(Heartbeat、Register、Cancel、StatusUpdate、DeleteStatusOverride)到某一个Eureka Server节点,该节点完成自身对应的操作后,会通过Replicate将本次请求同步到其他节点上。
相关定义:
- 同步:多个Eureka Server之间通过复制的方式完成服务注册表的同步,形成Eureka的高可用。
- 识别:Eureka Client 会缓存Eureka Server中的信息。即使所有Eureka Server节点都宕掉,服务消费者还可以从缓存信息中得到服务提供者的信息。
- 续约:微服务会周期性地向Eureka Server发送Renew(续约消息)来完成续约(默认30S)
- 续期:Eureka Server 会定期执行一次时效服务检测功能(默认60S),它会检查超过一定时间(默认90S)没有Renew(续约)的微服务,发现会注销该微服务节点。
Spring Cloud已经把Eureka集成在其子项目Spring Cloud Netflix 里面。
二、Eureka 的 自我保护机制
Eureka Client 默认每30S会向Eureka Server 发送一次心跳进行续约。默认情况下,Eureka Server超过90S没有收到Eureka Client的心跳,则会注销该Eureka Client。自我保护机制正是一种针对网络异常波动的安全保护措施,Eureka Server在运行期间回去统计续约数量低于85%,Eureka Server 则会进入自我保护模式,停止实例过期将当前的实例注册信息保护起来,同时发生警告。
进入自我保护模式后:
- Eureka Server 不再从注册列表中删除因为长时间沒收到心跳而应该过期的服务。
- Eureka Server 仍然可以接受新的注册和查询请求,但是不会同步到其他节点上,保证当前节点依然可用。
- 当网络稳定之后,当前Eureka Server新的注册信息会同步到其他节点上。
自我保护机制通过配置 eureka.server.enable-self-preservation 来开启/关闭,默认开启。
EMERGENCY! EUREKA MAY BE INCORRECTLY CLAIMING INSTANCES ARE UP WHEN
THEY’RE NOT. RENEWALS ARE LESSER THAN THRESHOLD AND HENCE THE
INSTANCES ARE NOT BEING EXPIRED JUST TO BE SAFE.
紧急!尤里卡可能是错误地声称实例已经启动,而实际上它们还没有启动。续费低于阈值,因此为了安全起见,实例不会过期。(即进入自我保护机制)