Eureka 由 Eureka Server 和 Eureka Client 两部分组成:
各个服务的注册、服务下线、服务故障,全部会在内存里维护和更新注册表,各个服务每隔30秒拉取注册表的时候,Eureka Server就是直接提供内存里存储的有变化的注册表数据给他们就可以了;同样每隔30秒发起心跳时,也是在这个纯内存的Map数据结构里更新心跳时间;
两个重要属性
leaseExpirationDurationInSeconds,表示eureka server至上一次收到client的心跳之后,等待下一次心跳的超时时间,在这个时间内若没收到下一次心跳,则将移除该instance,默认为90秒;
如果该值太大,则很可能将流量转发过去的时候,该instance已经不存活了。如果该值设置太小了,则instance则很可能因为临时的网络抖动而被摘除掉,该值至少应该大于leaseRenewalIntervalInSeconds;
leaseRenewalIntervalInSeconds,表示eureka client发送心跳给server端的频率。如果在leaseExpirationDurationInSeconds后,server端没有收到client的心跳,则将摘除该instance。除此之外如果该instance实现了HealthCheckCallback,并决定让自己unavailable的话,则该instance也不会接收到流量,默认30秒;
尽可能保证了内存注册表数据不会出现频繁的读写冲突问题;并且进一步保证对Eureka Server的大量请求,都是快速从纯内存走,性能极高;
通过定时任务30秒拉取一次注册表,30秒发起一次心跳