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

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

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

springcloud线上发布超时之grpc

springcloud线上发布超时方案之终极杀招:预热(测试用例)

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

问题分析

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

解决方案

ribbon饥饿加载

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

1ribbon: 2 # 饥饿加载 3 eager-load: 4 # 是否开启饥饿加载 5 enabled: true 6 # 饥饿加载的服务 7 clients: demo-goods,demo-product

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

zuul饥饿加载

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

1zuul: 2 ribbon: 3 eager-load: 4 enabled: true
点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

springcloud线上发布超时方案之终极杀招:预热(测试用例)

springcloud线上发布超时系列文章:springcloud线上发布超时之feign(ribbon饥饿加载)(https://my.oschina.net/u/560547/blog/3275636)springcloud线上发布超时之grpc(https://my.oschina.net/u/560547/blog/3275637)

Spring Cloud 系列之 Config 配置中心(二)

本篇文章为系列文章,未读第一集的同学请猛戳这里:SpringCloud系列之Config配置中心(一)(https://my.oschina.net/u/4126211/blog/4274304)本篇文章讲解Config如何实现配置中心自动刷新。配置中心自动刷新  点击链接观看:配置中心自动刷新视频(http

Spring Cloud搭建微服务架构

SpringCloud搭建微服务架构前言原文地址:https://my.oschina.net/u/1000241/blog/882929(https://my.oschina.net/u/1000241/blog/882929)SpringCloud搭建微服务架构使用Springboot开发web项