ZhaoWei-2020-02-10
问题 使用Spring Cloud组件构建的服务集群,在第一次请求时经常会出现timeout的情况,也就是超时,然而第二次就正常了 启动涉及到的相关服务: gateway(zuul网关) auth-Service(鉴权服务) user-Service(用户服务) 测试的端点接口为:http:/login/oauth/token。服务之间的调用顺序为:gateway->auth-Service->user-Service。网关收到客户端的请求,转发请求到鉴权服务,鉴权服务对用户身份的核验是通过调用用户服,用户服务给鉴权服务返回身份校验的结果,鉴权服务将身份授权信息返回给gateway,gateway将最终的结果response返回给客户端。三个服务启动后,通过zipkin监控调用链路信息,可以看到第一次和第二次调用情况如下图所示: 首次调用端点 第二次调用信息 通过上面两次的链路监控信息截图,可以看到第一次的耗时是第二次的10多倍。遇到某些情况,很可能会出现第一次请求的超时。去官网看了下,主要原因是zuul网关和各个调用服务之间的Ribbon进行客户端负载均衡的Client懒加载,导致第一次的请求调用包括了创建Ribbon Client的时间。通过启动日志信息就可以发现: Ribbon 客户端懒加载 下面分两部分解决这个问题,一是服务之间调用Ribbon的饥饿加载