【springcloud】3.记一次网关优化
今天早上过来突然被告知我们提供给外系统的接口服务出问题了,失败率高达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.记一次网关优化的更多相关文章
- 跟我学SpringCloud | 第九篇:服务网关Zuul初
SpringCloud系列教程 | 第九篇:服务网关Zuul初探 前面的文章我们介绍了,Eureka用于服务的注册于发现,Feign支持服务的调用以及均衡负载,Hystrix处理服务的熔断防止故障扩散 ...
- SpringCloud实战 | 第四篇:SpringCloud整合Gateway实现API网关
一. 前言 微服务实战系列是基于开源微服务项目 有来商城youlai-mall 版本升级为背景来开展的,本篇则是讲述API网关使用Gateway替代Zuul,有兴趣的朋友可以进去给个star,非常感谢 ...
- springcloud(十五):服务网关zuul
前面的文章我们介绍了,Eureka用于服务的注册于发现,Feign支持服务的调用以及均衡负载,Hystrix处理服务的熔断防止故障扩散,Spring Cloud Config服务集群配置中心,似乎一个 ...
- SpringCloud学习系列之六 ----- 路由网关Zuul基础使用教程
前言 在上篇中介绍了SpringCloud Config的完美使用版本,本篇则介绍基于SpringCloud(基于SpringBoot2.x,.SpringCloud Finchley版)中的路由网关 ...
- SpringCloud(5)路由网关Spring Cloud Zuul
一个简单的微服务系统如下图: 1.为什么需要Zuul Zuul很容易实现 负载均衡.智能路由 和 熔断器,可以做身份认证和权限认证,可以实现监控,在高流量状态下,对服务进行降级. 2.路由网关 继续前 ...
- uoj233/BZOJ4654/洛谷P1721 [Noi2016]国王饮水记 【dp + 斜率优化】
题目链接 uoj233 题解 下面不加证明地给出几个性质: 小于\(h[1]\)的城市一定是没用的 任何城市联通包含\(1\)且只和\(1\)联通一次 联通顺序从小到大最优 单个联通比多个一起联通要优 ...
- SpringCloud 进阶之Zuul(路由网关)
1. Zuul(路由网关) Zuul 包含了对请求的路由和过滤两个最主要的功能; 路由功能:负责将外部请求转发到具体的微服务实例上,是实现外部访问统一入口的基础; 过滤功能:负责对请求的处理过程进行干 ...
- 白话SpringCloud | 第十章:路由网关(Zuul)进阶:过滤器、异常处理
前言 简单介绍了关于Zuul的一些简单使用以及一些路由规则的简单说明.而对于一个统一网关而言,需要处理各种各类的请求,对不同的url进行拦截,或者对调用服务的异常进行二次处理等等.今天,我们就来了解下 ...
- 白话SpringCloud | 第九章:路由网关(Zuul)的使用
前言 介绍完分布式配置中心,结合前面的文章.我们已经有了一个微服务的框架了,可以对外提供api接口服务了.但现在试想一下,在微服务框架中,每个对外服务都是独立部署的,对外的api或者服务地址都不是不尽 ...
随机推荐
- Unity调用Android
1.Unity调用Android 根据unity用户手册,unity可以采用native code(c/c++),但是也提供了C#调用方法,本文对此进行简单讲解. 2.Unity获取android类 ...
- VS Code断点调试PHP超详细萌新教程
AppServ安装 1. 下载 2. 安装,一路默认设置顺便设置sql密码即可.这里建议不要修改端口,后续教程默认80端口. 3.点我测试,有下图则恭喜你AppServ安装完成. Xdebug配置 1 ...
- phpStorm //todo 的用途
用phpstorm看到别人的代码使用了注释//todo,且todo是彩色的 我想这个应该是有点用的吧,于是百度了下,大概是可能由于某些原因,导致部分代码没有写.但又怕忘了, 用//todo就可以做提示 ...
- Pandas 转换连接
# 导入相关库 import numpy as np import pandas as pd 拼接 有两个 DataFrame,都存储了用户的一些信息,现在要拼接起来,组成一个 DataFrame. ...
- [考试反思]1031csp-s模拟测试95:优势
假的三首杀.因为交文件所以他们都不往OJ上交. 假装是三首杀吧.嗯. 然而昨天还是没有AK.好像说是按照64位评测机的评测结果为准. 但是联赛省选的机子好像都是32位的?也就是和我们正在用的一致. 所 ...
- 可爱精灵宝贝 DP/爆搜
考崩了 T2 这题是个DP的好题啊(凡是我不会的都是好题,所以所有的题都是好题(雾)) DP思路: 分析性质:这个人对于路上的小精灵,能收集就一定会收集,即他每次都会收集这一段区间的小精灵 然后就考虑 ...
- 使用Typescript重构axios(二十八)——自定义序列化请求参数
0. 系列文章 1.使用Typescript重构axios(一)--写在最前面 2.使用Typescript重构axios(二)--项目起手,跑通流程 3.使用Typescript重构axios(三) ...
- P2905 [USACO08OPEN]农场危机Crisis on the Farm(简单dp+麻烦“回溯”)
惯例,化简题意(看长短决定难度) 一块草坪上有两种点(姑且称为a和b),各有坐标,现在能同时使所有a点向东西南北任意一个方向移动一个单位,若a点与b点重合,则答案增加重合数,求答案的最大值并且求出这个 ...
- Mokia(三维偏序)P4390
提到cdq,就不得不提这道该死的,挨千刀的题目了. 极简题面: 给定一个二维平面,在ti时刻会在(xi,yi)放一个点,会在tj时刻查询一个方框里面的点的数量 看道题就是二维线段树乱搞啊,这么水??? ...
- python——时间模块
格式化时间字符串 %y 两位数的年份表示(00-99) %Y 四位数的年份表示(0000-9999) %m 月份(01-12) %d 月内的一天(0-31) %H 24小时制的小时数(0-23) %I ...