今天早上过来突然被告知我们提供给外系统的接口服务出问题了,失败率高达20%

很奇怪,昨天周末,今天也没做什么处理,怎么突然变成这样了

1.接口测试

第一反应是接口是不是出问题了,然后我立马打开jmeter调20次接口

问题是全部成了???

这就很奇怪了,让对端提供截图证据,是不是别人搞我???

2.定位问题服务

根据对端反馈的视频,可以看到反馈的报错是zuulexception

那么就可以确定,问题抛出的地方在zuul

然后打开日志一看,这一看直接爆炸。。。。

日志疯狂报错,timed-out and no fallback available.

因为当时部署的4个节点,这个机器上的2个节点疯狂报这个错,但是只有20%的的失败率,这个就很奇怪了,

于是我打开第二台机器的日志。。。。

哔了狗。。。。。第二天机器居然毫无波动???

啥意思?就瞧不起前面这台机器咯,到这里我就懵逼了,百思不得起解,然后我第一反应就是看源码。。。

3.源码定位问题

那么要通过源码定位问题,就要准备类似的环境了,生产肯定是不能乱动的

因为之前说过,有台机器是好的,我就先把第一台机器的服务关闭,先把第二台机器的2个节点顶一下了

那么现在生产先抛到一边,我们准备一下环境

1.eureka,2.zuul 3.demo服务

先起eureka

吧对应的服务注册上去

准备接口请求,然后我准备在原来的服务上打个断点,卡一会再过去看看效果

然后我发现卡半天,毫无波动。。。。

几分钟后。。。

终于报错了,但是报的错确不是之前的那个错了

为了模拟那种情况

调试zuul网关参数

设置熔断超时时间:150毫秒,够少了吧

测试一波

终于问题得到复现,很显然是在熔断超时的时间内没有得到返回导致的

但是我们对接口响应时间有要求,3s之内没有返回就应该算超时

那么这个值默认是多少呢??

这也太短了,1s不返回就当超时,我们这个接口涉及到的子接口就有6个,更不用说自己还有部分逻辑了,又不能直接把原子接口直接给外系统用

那这边只能改参数了

调整之后,调整之后,我们再试试效果

效果确实得到改观

测试请求时间:16点26分26s

我们报错时间:16:26:29.

跟我们设置的参数吻合,很好

那是不是吧这个调大就把这个问题解决了呢???

4、压测

我们再试试再大量请求的情况下是否还是会出现这种情况,或者是等待

为了更好的测试,我们设置进程池最大数量为2个

单请求没问题

我们接下来直接模拟8个线程同时请求接口,并在服务中添加线程等待的方法模拟业务繁忙

接下来我们测试一下

随着时间的推移,我们发现失败的数量越来越多,前面的未执行完,后面的继续堆积

总结:

说白了就是调整熔断返回超时的时间,这个default可以手动设置为对应的服务id

hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds

【springcloud】3.记一次网关优化的更多相关文章

  1. 跟我学SpringCloud | 第九篇:服务网关Zuul初

    SpringCloud系列教程 | 第九篇:服务网关Zuul初探 前面的文章我们介绍了,Eureka用于服务的注册于发现,Feign支持服务的调用以及均衡负载,Hystrix处理服务的熔断防止故障扩散 ...

  2. SpringCloud实战 | 第四篇:SpringCloud整合Gateway实现API网关

    一. 前言 微服务实战系列是基于开源微服务项目 有来商城youlai-mall 版本升级为背景来开展的,本篇则是讲述API网关使用Gateway替代Zuul,有兴趣的朋友可以进去给个star,非常感谢 ...

  3. springcloud(十五):服务网关zuul

    前面的文章我们介绍了,Eureka用于服务的注册于发现,Feign支持服务的调用以及均衡负载,Hystrix处理服务的熔断防止故障扩散,Spring Cloud Config服务集群配置中心,似乎一个 ...

  4. SpringCloud学习系列之六 ----- 路由网关Zuul基础使用教程

    前言 在上篇中介绍了SpringCloud Config的完美使用版本,本篇则介绍基于SpringCloud(基于SpringBoot2.x,.SpringCloud Finchley版)中的路由网关 ...

  5. SpringCloud(5)路由网关Spring Cloud Zuul

    一个简单的微服务系统如下图: 1.为什么需要Zuul Zuul很容易实现 负载均衡.智能路由 和 熔断器,可以做身份认证和权限认证,可以实现监控,在高流量状态下,对服务进行降级. 2.路由网关 继续前 ...

  6. uoj233/BZOJ4654/洛谷P1721 [Noi2016]国王饮水记 【dp + 斜率优化】

    题目链接 uoj233 题解 下面不加证明地给出几个性质: 小于\(h[1]\)的城市一定是没用的 任何城市联通包含\(1\)且只和\(1\)联通一次 联通顺序从小到大最优 单个联通比多个一起联通要优 ...

  7. SpringCloud 进阶之Zuul(路由网关)

    1. Zuul(路由网关) Zuul 包含了对请求的路由和过滤两个最主要的功能; 路由功能:负责将外部请求转发到具体的微服务实例上,是实现外部访问统一入口的基础; 过滤功能:负责对请求的处理过程进行干 ...

  8. 白话SpringCloud | 第十章:路由网关(Zuul)进阶:过滤器、异常处理

    前言 简单介绍了关于Zuul的一些简单使用以及一些路由规则的简单说明.而对于一个统一网关而言,需要处理各种各类的请求,对不同的url进行拦截,或者对调用服务的异常进行二次处理等等.今天,我们就来了解下 ...

  9. 白话SpringCloud | 第九章:路由网关(Zuul)的使用

    前言 介绍完分布式配置中心,结合前面的文章.我们已经有了一个微服务的框架了,可以对外提供api接口服务了.但现在试想一下,在微服务框架中,每个对外服务都是独立部署的,对外的api或者服务地址都不是不尽 ...

随机推荐

  1. Dubbo配合SpringBoot,实现接口多个实现(group)

    SpringBoot配合Dubbo,使用@Service和@Reference,group实现接口多实现 公司项目升级,需要实现springBoot + Dubbo,并支持一个接口多个实现的情况.遇到 ...

  2. Window 同时安装Python2和Python3 终极版

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/vitaminc4/article/det ...

  3. spring boot跨域请求访问配置以及spring security中配置失效的原理解析

    一.同源策略 同源策略[same origin policy]是浏览器的一个安全功能,不同源的客户端脚本在没有明确授权的情况下,不能读写对方资源. 同源策略是浏览器安全的基石. 什么是源 源[orig ...

  4. os模块操作文件

    os模块: path=os.path.join(os.path.dirname(os.path.dirname(__file__)),'images') path:运行脚本的当前文件下的上一个文件的地 ...

  5. [考试反思]0921csp-s模拟测试49:困顿

    太弱.还是太弱. 拉不开分差,离第一机房分数线估计还是300多分. 但是,还是要骂:XX出题人. 部分分非常少且没有意义,T1基本只有0/纯暴力20/100三个档, T2正解是n2但是n3一分不给,还 ...

  6. spring session源码解析

    模块划分 core部分代码 存储实现部分部分: jdbc实现 具体存储的实现类 例如:org.springframework.session.jdbc.JdbcOperationsSessionRep ...

  7. Oracle“ORA-00979:不是GROUP BY 表达式”解决方式

    今天在工作中碰到一个问题,用group by 语句进行分组时出现ORA-00979错误. 代码如下: select R.ORDER_NO, R.PRODUCT_CODE, R.REGION_NO, R ...

  8. 测试工程师,选择python还是java?

    问:“你平时工作中,用java多还是用python多”? 答:“都还可以,根据具体的场景选择不同的语言”. 问:“比如说呢”? 答:“开发自己的测试平台,肯定会选择java:在centos服务器跑一些 ...

  9. 来,我们手写一个简易版的mock.js吧(模拟fetch && Ajax请求)

    预期的mock的使用方式 首先我们从使用的角度出发,思考编码过程 M1. 通过配置文件配置url和response M2. 自动检测环境为开发环境时启动Mock.js M3. mock代码能直接覆盖g ...

  10. canvas线条实践之运动的正方形

    原理说明: 1.通过rect实现正方形的绘制: 2.save保存canvas面板的保存,restore回复保存的canvas面板到初始状态: 3.translate用于改变canvas坐标的起始位置: ...