Eureka组件可以分为Eureka Server和Eureka Client。
Eureka Server提供了以下几个功能:服务注册(存储该服务的相关信息,Eureka Server内部采用二级缓存的方式来存储注册表信息),提供注册表信息,服务剔除(eureka.instance.lease-expiration-duration-in-seconds=90 默认90s没有接收到服务的心跳调用时,移除服务),同步服务状态
Eureka Client提供以下功能:注册服务,服务续约(eureka.instance.lease-renewal-interval-in-seconds=30 默认30s),服务下线,获取服务列表(eureka.client.fetch-registry=true,eureka.client.registry-fetch-interval-seconds=30 从server获取服务列表)
Eureka自我保护机制:
正常情况下 Eureka Server在90s内没有接收到Eureka Client的心跳请求时会将该服务给失效。Eureka Server开启自我保护机制后,如下进行开启 eureka.server.enable-self-preservation=true,当服务心跳失败比例在15分钟内低于85%时,Eureka Server将进入自我保护机制。此时,Eureka Server不再从服务列表中移除没有接收到心跳的服务;但是可以接收注册服务和查询服务列表;该节点无法向其他节点同步服务信息
Eureka集群
Eureka Server集群相互之间通过replicate来同步数据;Eureka Server之间通过异步方式同步数据,只能确保最终一致性
Eureka 工作流程
1、Eureka Server启动,如果是集群方式,通过Replicate方式从其他的节点同步数据
2、Eureka Client启动,将服务信息注册到配置的Eureka Server地址上,从Eureka Server获取相关的服务列表并缓存到本地
3、Eureka Client每30s向Eureka Server发送心跳调用,告知Server服务正常
4、Eureka Server如果90s内没有接收到服务心跳,则将服务从服务列表中剔除
5、如果Eureka Server在15分钟内,心跳失败的服务占比85%以下时,进入自我保护机制
6、Eureka Client心跳调用恢复正常后,Eureka Server退出自我保护机制
7、Eureka Client请求服务时先从本地获取相关服务信息,如果没有从Eureka Server上获取
8、Eureka Client服务停止时,服务从Eureka Server 服务注册表中下线