首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >springcloud线上发布超时之feign(ribbon饥饿加载)

springcloud线上发布超时之feign(ribbon饥饿加载)

作者头像
一笠风雨任生平
发布于 2020-04-24 10:25:10
发布于 2020-04-24 10:25:10
1.9K0
举报
文章被收录于专栏:服务化进程服务化进程

​

springcloud线上发布超时系列文章:

springcloud线上发布超时之feign(ribbon饥饿加载)

springcloud线上发布超时之grpc

在高并发情况下发布应用时,经常会发现监控中有很多超时报错或者断路器打开,下图中可以看到监控情况,测试时也会偶现第一次feign调用出错,第二次就会恢复正常。

问题分析

大家都知道,这里feign底层是集成的ribbon,这里ribbon也会有http连接池,这里的连接池是长连接,定时初始化一批并销毁旧连接,这里还包括一些上下文需要初始化,但是在容器初始化好时,ribbon底层的client是未初始化的,当第一次调用时,有一个初始化过程会导致超时,一般情况下会说需要调整超时时间,但是在电商高并发情况下,这里肯定时不现实的,响应请求都需要ms级别。

解决方案

ribbon饥饿加载

这里可以通过配置ribbon饥饿加载来减少出错次数,如下:

代码语言:javascript
复制
ribbon:
  # 饥饿加载
  eager-load:
    # 是否开启饥饿加载
    enabled: true
    # 饥饿加载的服务
    clients: demo-goods,demo-product

这里为什么说不能完全解决呢?因为在发布时流量切换的瞬间,流量太大,并不是仅仅ribbon需要初始化,hystrix、web容器线程池等都需要初始化或者扩容,这里也需要耗时,所以这里的饥饿加载仅仅只是做到了发布时减少错误数。

zuul饥饿加载

网关作为对外请求的入口,zuul内部使用Ribbon调用其他服务,Spring Cloud默认在第一次调用时懒加载Ribbon客户端。zuul同样需要维护一个相对的子应用环境的上下文,所以也需要启动时饥饿加载。

代码语言:javascript
复制
zuul:
  ribbon:
    eager-load:
      enabled: true
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除
目录
  • 问题分析
  • 解决方案
    • ribbon饥饿加载
    • zuul饥饿加载
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档