gateway整合sentinel限流不生效排查

news/2023/6/9 19:35:46

问题

线上的sentinel 在测试压测时候可以正常被限流 但是在正常的流量中 发现被限流的接口很少 (我发誓肯定都配置了限流规则)

约定

文中的 服务名称以及地址 都被改写了

排查步骤

1.检查相关配置 以及 pom依赖配置 发现SentinelGatewayFilter 重复配置

2.猜测可能是配置没有进行初始化 或者初始化存在问题 去掉相关的配置初始化 直接使用sentinel -dashboard 进行配置

3.部署并搭建dashborad 添加相关配置 (spring.cloud.sentinel.transport.dashboard=localhost:8888
),使服务启动注册到sentinel-dashboard中 访问 localhost:8888 (默认是端口8080 可以在启动时候指定 java -Dserver.port=8888 -jar ./sentinel-dashboard-1.8.6.jar &) 需要登录 默认账号密码 都是sentinel 效果如下
在这里插入图片描述

4.在流控规则中 添加具体的流控配置 因为我们没有配置API 所以只有 根据routeId 配置

在这里插入图片描述

5.接下来使用 压测工具进行 压测 发现限流规则 并没有生效

6.开始漫长的寻找不生效原因

。。。。。。。。。。。。。。

7.后来找到 可能是版本原因 升级 如下组件的版本

com.alibaba.cloud spring-cloud-starter-alibaba-sentinel 2.2.1.RELEASE com.alibaba.cloud spring-cloud-alibaba-sentinel-gateway 2.2.0.RELEASE

8.后来 因为其他的版本不兼容问题 只能整理升级 springboot springcloud springcloud-alibaba

于是根据 spring-cloud-alibaba 官方提供的版本说明 进行了 版本 升级 官方版本说明地址 https://github.com/alibaba/spring-cloud-alibaba/wiki/%E7%89%88%E6%9C%AC%E8%AF%B4%E6%98%8E
目前使用的版本
spring cloud alibaba 2.2.7.RELEASE
spring cloud Hoxton.SR12
spring boot 2.3.12.RELEASE

9.升级过后,首先去掉 代码中 sentinel 的重复配置 同时在nacos的限流配置中 仅保留一个接口的限流配置 同时增加 nacos中 sentinel 相关的配置

10.启动 使用jmter 压测 发现限流生效了

后续的改进

去掉配置的 异常拦截 (旧的配置中定义了 ErrorWebExceptionHandler 处理器) 使用sentinel的拦截配置
调整多个过滤器的顺序 (异常处理器→限流拦截器→全局日志拦截器 ->cat 链路->cat过滤)

官方网关限流文档: https://sentinelguard.io/zh-cn/docs/api-gateway-flow-control.html

阿里巴巴cloud官方文档 : https://github.com/alibaba/spring-cloud-alibaba/blob/2022.x/spring-cloud-alibaba-docs/src/main/asciidoc-zh/sentinel.adoc

后记 以下两个问题 也耽误了很久

问题1. 配置了某个服务的某个接口 限流规则 导致某个服务的其他的接口 也被限流

有问题的配置 {“resource”:“mall_service”,“apiDefinitions”:[{“matchStrategy”:0,“pattern”:“/mall-service/entry/scene/xxx”}],“count”:10,“intervalSec”:1,“controlBehavior”:0}

问题表现 在请求 /该服务下另一个接口 也被限流 sspmall-service/client/points/user/balance

解决办法

指定resource 名称为 特殊的名称 而不是微服务的名称
指定resorceMode=1 含义是 使用自定义API限流
正确的配置

{“resource”:“mall_service_entry_scene_xxx”,“resourceMode”:1,“apiDefinitions”:[{“matchStrategy”:0,“pattern”:“/mall-service/entry/scene/xxx”}],“count”:10,“intervalSec”:1,“controlBehavior”:0}

resource是 同一个自定义API组的名称 以及 限流规则中使用的 自定义API组名称

问题二 本地部署的 dashboard 和 test环境部署的dashboard 采集的链路不一致
本地部署的效果图
在这里插入图片描述
测试环境上的效果图
在这里插入图片描述
注意观察 一个是叫 请求链路 一个叫做簇点链路 还有资源名 想差很大 同时 当簇点链路为测试环境中的时 接口的限流将失效

本地部署在自己电脑上 同时服务也是在idea中运行
test环境dashboard 部署在服务器(java -jar方式) 而应用是部署在k8s环境中 同时 dashboard和 应用通信的端口不同

解决办法: 测试环境中的dashboard 也部署到和应用相同的k8s环境里

误区 因为看到 测试环境中的链路 和 zuul 集成 sentinel的时候 链路一样 导致一直在找 zuul是否被生效了 而忽略了 dashboard请求 gateway-service 端口不同 导致链路采集有误

the end

三年过年没回家了 明天将踏上回家路
在这里插入图片描述

新春快乐

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.exyb.cn/news/show-4553506.html

如若内容造成侵权/违法违规/事实不符,请联系郑州代理记账网进行投诉反馈,一经查实,立即删除!

相关文章

13.相机和图像——介绍,太阳摄影机,成像系统,图像形成,光圈(Aperture)_1

目录 介绍 太阳摄影机 成像系统 图像形成 光圈(Aperture) 介绍 因此,3 是我们的新单元,我们将开始谈论相机模型,它将开始温和,然后稍微稍微粗略一点,我们开始进入像透视投影,所…

导出数据时老显示导出失败,显示“保存对象时出错”

之所以显示“保存对象时出错”是因为数据类型导致的: 要素类必须存储在数据库中,若保存类型选择了“要素类”,其保存路径就必须选定一个数据库而非文件夹,文件夹中只能存储shapefile文件,否则保存数据时将会报错。 那…

VS2013 新建工程 出现错误 “未将对象引用设置到对象的实例”

现象 通过visio studio 新建 MVC4 工程在接下的对话框中选择 “基本”模板,视图引擎 选择“Razor”在工程生成的最后,出现错误弹窗,提示“未将对象引用设置到对象的实例”测试 1,在上述工程中添加新的控制器以及对应视图&#xff…

DataTables在IE8下报'style' 为空或不是对象错误问题 , SCRIPT5007: 无法获取未定义或 null 引用的属性“style”

网页错误详细信息: 消息: style 为空或不是对象 行: 5570 字符: 5 代码: 0 检查后才发现,问题在于数组最后多了一个“,”,会造成Table列数计算时多了一列。在chrome和firefox下测试都正常,但在IE8下会出现此问题。 转…

switch case语句里面不能定义对象 错误信息:Cannot jump from switch statement to this case..

case分支下如果过出现两条以上(包含两条)的语句。就要用大括号{} 括起来 错误如图: 只要在花括号 “{ }”中定义的对象,那么该对象的作用域就局限在这对花括号里面,上面的代码的错误就出现在这儿了。

拒绝的权限----创建中间层对象错误解决方法

错误描述: 服务器可以正常进入金蝶ERP K3系统。 然后安装客户端,安装好后运行远程组件配置,总是提示: 模块:加密服务 组件无法正常工作! 创建中间层对象错误:拒绝的权限 模块:公共组件 组件无法正常工作! 创建中间层对…

JavaScript---错误对象

错误对象是一种特殊的基本对象。它们拥有基本的 Error 类型,同时也有多种具体的错误类型。 标准文档:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects Error 定义:通过Error的构造器可以创建一个错误对象…

心田花开写人作文指导,小学优秀写人作文推荐

关于写人作文,心田花开总结出几点关于写人作文高分技巧,并为您推荐4篇小学优秀的写人作文供您参考。 一、写人作文技巧口诀 1、关于人物外貌描写(样貌、身材、着装等) 2、围绕主题选取最能打动读者事例(人物语言描写、…