SpringCloud 面试题, 为什么 Feign 第一次调用耗时很长?
SpringCloud 面试题, 为什么 Feign 第一次调用耗时很长?
QA
Step 1
Q:: 为什么 Feign 第一次调用耗时很长?
A:: Feign 第一次调用时耗时较长,通常是因为以下几个原因:1. Feign 在第一次调用时需要初始化连接,包括与 Eureka 或者 Consul 等服务注册中心通信,找到服务的可用实例。2. Feign 的底层使用了 Hystrix 进行熔断处理,第一次调用时,Hystrix 也会初始化相关的线程池和配置。3. 如果使用了 Ribbon 作为负载均衡器,Ribbon 也需要在第一次调用时初始化相关信息,比如从注册中心拉取服务实例列表。4.
若启用了 SSL 或者安全传输协议,第一次调用时也会涉及到 SSL 的握手和认证,这些都会导致初次调用耗时较长。
Step 2
Q:: Feign 的重试机制是如何工作的?
A:: Feign 内置了重试机制,可以通过配置来控制重试的次数和间隔时间。Feign 的重试机制通常基于 Ribbon 的负载均衡功能。在服务调用失败时(比如网络超时、服务未响应等),Feign 可以根据配置重试调用。通过设置 ribbon.MaxAutoRetries``,
ribbon.MaxAutoRetriesNextServer
等参数,可以控制对同一个实例和不同实例的重试次数。同时,ribbon.OkToRetryOnAllOperations
参数决定是否对所有 HTTP 方法进行重试,默认只对 GET 请求重试。
Step 3
Q:: 如何优化 Feign 的首次调用耗时?
A:: 为了优化 Feign 的首次调用耗时,可以采取以下措施:1. 提前初始化 Feign 客户端,可以在应用启动时预热相关的服务调用。2. 配置 Ribbon 缓存服务实例信息,减少每次调用前的实例发现时间。3. 如果使用 Eureka,可以调整 Eureka Client 的注册表获取频率,以便及时获取服务实例列表。4.
调整 Hystrix 的初始化参数,减少线程池和熔断器的初始化时间。