摘要:的上有一句话,大意是一个服务启动后最长可能需要分钟时间才能被其它服务感知到,但是文档并没有解释为什么会有这分钟。其实这是由三处缓存一处延迟造成的。对此做了修改,服务启动后会马上注册以上这四个秒正是官方上写服务注册最长需要分钟的原因。
Eureka的wiki上有一句话,大意是一个服务启动后最长可能需要2分钟时间才能被其它服务感知到,但是文档并没有解释为什么会有这2分钟。其实这是由三处缓存 + 一处延迟造成的。
首先,Eureka对HTTP响应做了缓存。在Eureka的”控制器”类ApplicationResource的109行可以看到有一行
String payLoad = responseCache.get(cacheKey);
的调用,该代码所在的getApplication()方法的功能是响应客户端查询某个服务信息的HTTP请求:
String payLoad = responseCache.get(cacheKey); // 从cache中拿响应数据 if (payLoad != null) { logger.debug("Found: {}", appName); return Response.ok(payLoad).build(); } else { logger.debug("Not Found: {}", appName); return Response.status(Status.NOT_FOUND).build(); }
上面的代码中,responseCache引用的是ResponseCache类型,该类型是一个接口,其get()方法首先会去缓存中查询数据,如果没有则生成数据返回(即真正去查询注册列表),且缓存的有效时间为30s。也就是说,客户端拿到Eureka的响应并不一定是即时的,大部分时候只是缓存信息。
其次,Eureka Client对已经获取到的注册信息也做了30s缓存。即服务通过eureka客户端第一次查询到可用服务地址后会将结果缓存,下次再调用时就不会真正向Eureka发起HTTP请求了。
再次, 负载均衡组件Ribbon也有30s缓存。Ribbon会从上面提到的Eureka Client获取服务列表,然后将结果缓存30s。
最后,如果你并不是在Spring Cloud环境下使用这些组件(Eureka, Ribbon),你的服务启动后并不会马上向Eureka注册,而是需要等到第一次发送心跳请求时才会注册。心跳请求的发送间隔也是30s。(Spring Cloud对此做了修改,服务启动后会马上注册)
以上这四个30秒正是官方wiki上写服务注册最长需要2分钟的原因。
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/72034.html
摘要:和二级缓存影响状态更新,缩短这两个定时任务周期可减少滞后时间,例如配置更新周期更新周期服务提供者保证服务正常下线。服务提供者延迟下线。 引言 Eureka是Netflix开源的、用于实现服务注册和发现的服务。Spring Cloud Eureka基于Eureka进行二次封装,增加了更人性化的UI,使用更为方便。但是由于Eureka本身存在较多缓存,服务状态更新滞后,最常见的状况是:服务...
摘要:大家好,我是悟空呀上两篇讲解源码的文章过于硬核领导让我研究源码启动过程领导叕让我研究源码注册过程本篇将会给大家讲解我在本地搭建的集群环境下,控制台的参数说明。目前悟空我的机器上显示的个。悟空我的本机是往进行注册了。 大家好,我是悟空呀~上两篇讲解 Eureka 源码的文章过于硬核:领导让我研究 Eureka 源...
摘要:所以通过设置一个适中的拉取注册表以及发送心跳的频率,保证大规模系统里对的请求压力不会太大。在注册表发生变更的时候会在内存中更新变更的注册表数据,同时过期掉。上述就是架构中,作为微服务注册中心可以承载大规模系统每天千万级访问量的原理。 欢迎关注微信公众号:石杉的架构笔记 周一至周五早8点!精品技术文章准时送上!! 往期文章1.拜托!面试请不要再问我Spring Cloud底层原理! 目...
摘要:所以通过设置一个适中的拉取注册表以及发送心跳的频率,保证大规模系统里对的请求压力不会太大。在注册表发生变更的时候会在内存中更新变更的注册表数据,同时过期掉。上述就是架构中,作为微服务注册中心可以承载大规模系统每天千万级访问量的原理。 欢迎关注微信公众号:石杉的架构笔记 周一至周五早8点!精品技术文章准时送上!! 往期文章1.拜托!面试请不要再问我Spring Cloud底层原理! 目...
摘要:上篇文章缓存机制介绍了的缓存机制,相信大家对有了进一步的了解,本文将详细介绍网关如何实现服务下线的实时感知。目前网关实现的是对网关下游服务的实时感知,而且需满足以下条件生产者需部署在容器管理平台生产者做正常的下线升级或者缩容操作。 上篇文章《Eureka 缓存机制》介绍了Eureka的缓存机制,相信大家对Eureka 有了进一步的了解,本文将详细介绍API网关如何实现服务下线的实时感知...
阅读 2177·2021-09-22 10:56
阅读 1481·2021-09-07 10:11
阅读 1806·2019-08-30 15:54
阅读 2296·2019-08-30 15:44
阅读 2315·2019-08-29 12:40
阅读 3037·2019-08-28 18:25
阅读 1743·2019-08-26 10:24
阅读 3192·2019-08-23 18:39