SpringCloud学习笔记(六)-Zuul及Feign的超时时间测试

本文涉及的产品
传统型负载均衡 CLB,每月750个小时 15LCU
应用型负载均衡 ALB,每月750个小时 15LCU
网络型负载均衡 NLB,每月750个小时 15LCU
简介: SpringCloud学习笔记(六)-Zuul及Feign的超时时间测试

image.pngimage.png


springcloud中Ribbon常常用来做负载均衡,其超时时间可以用以下公式来计算。


RibbonTime=(ReadTimeout+ConnectTimeout)*(1+MaxAutoRetries)*(1+MaxAutoRetriesNextServer)


ReadTimeout:处理超时时间


ConnectTimeout:连接建立超时时间


MaxAutoRetries:当前服务器的重试次数(不包括当前请求)


MaxAutoRetriesNextServer:负载到其他服务器的请求次数


上图中T1指网关转发请求到服务A时,总共的超时时间。


T2指服务A调用服务B的超时时间,如果服务是采用Feign,则代表是FeignClient的超时时间。


一、服务A到服务B的超时时间测试


服务A中FeignClient的超时配置如下(其中网关的超时时间是60秒)

#--------------超时配置----------------------
#hystrix超时
hystrix.command.default.execution.timeout.enabled=true
hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds=70000
#开启重试机制
spring.cloud.loadbalancer.retry.enabled=true
#当前服务器连接次数
ribbon.MaxAutoRetries=2
#下个负载均衡服务器连接次数
ribbon.MaxAutoRetriesNextServer=1
#请求处理的超时时间
ribbon.ReadTimeout=14000
#请求连接超时时间
ribbon.ConnectTimeout=10000
#--------------超时配置----------------------


执行超时:14秒,连接超时:10秒,熔断:150秒,本服务器重试次数:2次,下个服务器重试次数:1次,假如服务B执行需要200秒,


Feign是get接口,实际需要84秒超时


Feign是post接口,实际需要14秒超时


由此可以看出得出如下结论


结论一:get请求时会重试。post请求不会重试,主要是考虑到幂等性问题。当然可以通过配置强制所有接口都重试(不推荐)


由实际测试结果看,实际的超时时间并没有包括配置的连接超时时间,这一点跟官网给出的超时时间的计算是有出入的,原因未知。


get:T2 = 14*(1+2)*(1+1) = 84秒


post:T2 = 14*1*1 = 14秒


如果把熔断超时修改为70秒,其他配置不变


则实际超时时间如下


get:min(14*(1+2)*(1+1),  70)=70


Post: min(14*1*1,  70)=14


结论二:熔断的超时时间要大于执行超时


这是在服务A中看到的时间结果,但是由于zuul配置的超时时间是60秒,所以返回给用户的信息是60秒就已经超时。


二、网关的超时时间测试


FeignClient的超时时间不变,网关的超时配置如下:

#--------------超时配置----------------------
#hystrix超时
hystrix.command.default.execution.timeout.enabled=true
zuul.ribbonIsolationStrategy=THREAD
hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds=90000
#开启重试机制
zuul.retryable=true
#当前服务器连接次数
ribbon.MaxAutoRetries=1
#下个负载均衡服务器连接次数
ribbon.MaxAutoRetriesNextServer=1
#请求处理的超时时间
ribbon.ReadTimeout=15000
#请求连接超时时间
ribbon.ConnectTimeout=10000
#--------------超时配置----------------------


实际超时时间:


Get请求时:    T1 = 15*(1+1)*(1+1) = 60秒


Post请求时:   T1 = 15秒


如果把熔断的超时时间改为40秒,其他不变

#--------------超时配置----------------------
#hystrix超时
hystrix.command.default.execution.timeout.enabled=true
zuul.ribbonIsolationStrategy=THREAD
hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds=40000
#开启重试机制
zuul.retryable=true
#当前服务器连接次数
ribbon.MaxAutoRetries=1
#下个负载均衡服务器连接次数
ribbon.MaxAutoRetriesNextServer=1
#请求处理的超时时间
ribbon.ReadTimeout=15000
#请求连接超时时间
ribbon.ConnectTimeout=10000
#--------------超时配置----------------------


Get请求时:    T1 = min(40, 15*(1+1)*(1+1)) = 40秒


Post请求时:   T1 = min(40, 15) = 15秒


结论三:从上面配置可以看出,feign与zuul开启超时重试的参数是不一致的。另外hytrix默认的隔离策略是信号量隔离,需要配置
zuul.ribbonIsolationStrategy=THREAD,否则熔断不会生效。


结论四:如果FeignClient的超时大于网关的超时时间时,网关会直接超时返回或熔断返回,通过ZuulFallbackProvider接口实现,网关是服务级的超时。


相关实践学习
SLB负载均衡实践
本场景通过使用阿里云负载均衡 SLB 以及对负载均衡 SLB 后端服务器 ECS 的权重进行修改,快速解决服务器响应速度慢的问题
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
相关文章
|
2月前
|
JSON Java 测试技术
SpringCloud2023实战之接口服务测试工具SpringBootTest
SpringBootTest同时集成了JUnit Jupiter、AssertJ、Hamcrest测试辅助库,使得更容易编写但愿测试代码。
82 3
|
3月前
|
测试技术
自动化测试项目学习笔记(五):Pytest结合allure生成测试报告以及重构项目
本文介绍了如何使用Pytest和Allure生成自动化测试报告。通过安装allure-pytest和配置环境,可以生成包含用例描述、步骤、等级等详细信息的美观报告。文章还提供了代码示例和运行指南,以及重构项目时的注意事项。
367 1
自动化测试项目学习笔记(五):Pytest结合allure生成测试报告以及重构项目
|
3月前
|
测试技术 Python
自动化测试项目学习笔记(四):Pytest介绍和使用
本文是关于自动化测试框架Pytest的介绍和使用。Pytest是一个功能丰富的Python测试工具,支持参数化、多种测试类型,并拥有众多第三方插件。文章讲解了Pytest的编写规则、命令行参数、执行测试、参数化处理以及如何使用fixture实现测试用例间的调用。此外,还提供了pytest.ini配置文件示例。
79 2
|
8月前
|
监控 Java API
Spring cloud Hystrix 、Dashboard、API(zuul)相关报错
Spring cloud Hystrix 、Dashboard、API(zuul)相关报错
102 2
|
3月前
|
测试技术 Python
自动化测试项目学习笔记(二):学习各种setup、tearDown、断言方法
本文主要介绍了自动化测试中setup、teardown、断言方法的使用,以及unittest框架中setUp、tearDown、setUpClass和tearDownClass的区别和应用。
103 0
自动化测试项目学习笔记(二):学习各种setup、tearDown、断言方法
|
4月前
|
负载均衡 Java 网络架构
实现微服务网关:Zuul与Spring Cloud Gateway的比较分析
实现微服务网关:Zuul与Spring Cloud Gateway的比较分析
217 5
|
5月前
|
网络协议 安全 前端开发
【应用服务 App Service】Azure 应用服务测试网络访问其他域名及请求超时限制(4分钟 ≈ 230秒)
【应用服务 App Service】Azure 应用服务测试网络访问其他域名及请求超时限制(4分钟 ≈ 230秒)
|
5月前
|
缓存 Java Maven
SpringCloud基于Eureka的服务治理架构搭建与测试:从服务提供者到消费者的完整流程
Spring Cloud微服务框架中的Eureka是一个用于服务发现和注册的基础组件,它基于RESTful风格,为微服务架构提供了关键的服务注册与发现功能。以下是对Eureka的详细解析和搭建举例。
101 0
|
7月前
|
Java 测试技术 持续交付
Java一分钟之-Spring Cloud Contract:契约测试
【6月更文挑战第16天】Spring Cloud Contract是微服务契约测试框架,通过DSL定义接口行为,使用WireMock生成存根进行独立开发验证。常见问题包括契约编写不清晰、未集成到CI/CD和契约版本控制混乱。例如,定义一个`GET /greeting`返回JSON响应的契约,Spring Cloud Contract会自动生成测试代码,帮助确保服务间接口一致性,提升开发效率和系统稳定性。
156 7
|
8月前
|
前端开发 JavaScript Java
java测试链接超时返回前端
java测试链接超时返回前端
70 0

热门文章

最新文章