SpringCloud Alibaba微服务-- Sentinel的使用(笔记)

news2025/5/29 10:08:44

雪崩问题:

小问题引发大问题,小服务出现故障,处理不当,可能导致整个微服务宕机。
假如商品服务出故障,购物车调用该服务,则可能出现处理时间过长,如果一秒几十个请求,那么处理时间过长,那么卡的人越来越多,那么就会导致资源耗尽。原本服务B可以使用,此时此刻也宕机了,然后其他服务去调用服务B那么也会出现该情况,然后出现连锁反应。因为资源耗尽导致宕机等可能

最后导致:出现级联反应,小问题不解决,越滚越大,原本就一个小问题,某一微服务提供者出现故障,负责调用它的人等待时间多长,就是滚雪球,没有进行异常处理

解决方案:

一、不管请求多少,服务承受的都是固定的,从狂暴的到柔和的,限制到每秒中只有几个,避免崩掉

但是也无法保证百分百没有问题(避免卡死,等待导致雪崩)引入线程隔离。
我们去限定每个业务线程的数量,那么当有请求,就必须去线程池去取 然后去调用服务B,
业务二:那么即使四个线程去取的时候全故障了,那么也不会耗尽服务A的资源,关进黑屋里面,起到故障隔离,服务B影响不到

那么也不能百分百解决问题:假如一直来请求,那么虽然说已经隔离了四个,那么也一直不断有新的请求资源,虽然不会导致服务A宕机,但是也会消耗CPU资源等。

所以应该拒绝它访问,这个叫服务垄断,拦截请求,就像是电路的保险开关。“断路器”自动断开,防止进一步请求
例如:假如访问时间过长,那么发现请求的异常比例 比如五次四次挂的或者慢调用太高,那么直接熔断该业务
fallback:提前写好逻辑,后备处理方案,对于服务C的一个补充。

当有再次新的请求那么直接拒绝走fallback,少了等待卡死

不仅上面故障隔离,避免了服务A被拖死。还在这个熔断策略,避免无效资源浪费,提高了前端的响应速度

sentinel配置:导入相关依赖和配置,与控制台相连接,方便管理

java -Dserver.port=8090 -Dcsp.sentinel.dashboard.server=localhost:8090 -Dproject.name=sentinel-dashboard -jar sentinel-dashboard.jar

以上多调用几次该微服务就可以显示,例如调用购物车列表


簇点链路:意思就是那些Controller接口(监控http接口)

这里把carts作为簇点名称,以这个为唯一标识,但是我们发现我们这个都是restful风格的,路径都是相同,但是请求方式不同

如何解决呢 加上这行

访问该微服务的各个接口,每个接口都分别地去做监控

详细分析:过程使用Jmeter

请求限流:

1.以购物车为例,QPS: 每秒钟请求的数量单机阈值:每秒钟多少个

Jmeter:在TestPlan->线程(用户)->然后线程组(模拟多个用户)
用户100个,发起请求总共耗时多久,多久把请求发完 100%10=10,就是每秒钟10个
每个用户发起一个请求

然后添加HTTP请求

那么启动之后

我们可以查看报告十个里面有4个就是说被拒绝了,并且异常为百分之40
报告如下:(如果访问的是429的状态码),比如秒杀,有可能你被限流了


成功的案例:

线程隔离:

1.举例:查询购物车列表。模拟商品服务需要加载两秒到三秒然后才能返回给服务A,
把服务A的各个业务各自分配相应的线程数

2.找到查询购物车的业务, 这个也是线程隔离也是流控的一部分,因为你要去隔离。
并发线程数:线程可用资源数量。单机阈值,表示你可以用五个线程数;假设接口比较慢 返回一次需要500ms,那么一秒可以处理两次请求,一个线程每秒钟可以处理两个,五个就是每秒钟可以处理十个请求,也就是该接口允许每秒钟处理十个请求


我们现在就是模拟说并发比较高,把资源耗尽导致,添加购物车商品受影响

原本添加只需要22ms,查询:500ms

Jmeter模拟:

以上就是模拟了每秒钟最大的连接数,我们在tomcat已经设置好50

tomcat:  max-connections: 50

刚刚只需要22ms,现在添加的接口资源被耗尽了。

以及极大可能导致查询失败。很慢很慢,查询连进都进不去,
商品服务变慢,导致了 购物车服务也被连累拖慢。如果并发进一步提高,那么可能挂了

如何解决?
我们设置好线程隔离


画红色部分为添加购物车访问时长,丝毫没有受到影响,而查询直接访问失败

fallback:

我们在测试的时候,把线程数打满的情况下,添加和修改的访问时长没有受到任何影响,查询这个接口,响应时长很慢很慢,甚至出现报错,前端得不到响应,资源被耗尽,这个时候我们应该如何去解决?

通过fallback去缓解

一瞬间来了很多请求,不会影响其他业务。但是,自身不可用,自身的资源被耗尽拒绝不再报错,而是给用户一个友好的提示。我们只对查询商品,我们对商品服务feign线程隔离,对购物车查询商品做fallback

所以
第一:让http远程调用也能被sentinel识别成为簇点。

2.代表feign监控开启,开启流控,线程隔离,当线程打满的时候,拒绝新的请求,不想报错,添加fallback返回友好提示


又多了一个链路,内部通过feign发起请求,开启feign监控后,那么就出现了

那么我现在不用对整个购物车中的查询商品进行线程隔离和流量控制,我仅仅对查这个feign的商品服务做线程隔离和流量控制,当我们的商品微服务出现故障的时候,我们只对商品微服务进行隔离,这样就没有问题,尽管你并发很高也不会把整个微服务资源耗尽

这里我配置的参数

不建议对整个查询购物车业务进行流量控制,一旦失败就都失败了,所以只针对feign

服务熔断:

但是我们尽管做了线程隔离,但是我们卡的不会太多线程数,但是每一次请求来了都要做远程调用,又很耗时,浪费,这还是超时,如果挂了没必要再发起请求
如果异常比例比较高,直接熔断,拒绝发起请求,然后再走fallback这是优化后的最优解。
熔断也不能一直断开,如果恢复正常还要取消熔断。

现在还有一个问题就是,什么时候熔断,什么时候断开?
断路器可以帮助我们
默认是绿色状态,表示可以正常访问,同时会去监控经过断路器的请求,如果发现比例过高达到阈值,直接open(持续时间可配置),熔断时间到期后,会去走到测试half,那么
检查一下服务有没有恢复,没有恢复就回到open,到期后,再次进行检查,如果成功了,就关闭

我们仅仅要做的就是在sentinel中做好配置 点击熔断查看规则

慢调用比例:十次请求多少次请求很慢
RT:最大响应时间 代表如果我发出这个请求超出200ms,那么就算是慢的,低于两百不统计
比例阈值:那么就是慢多少达到阈值,超过百分之50,那么就达到阈值我就需要给你熔断,比如十次有五次
熔断时长:就是触发熔断,open的临时状态,拒绝所有的请求,不发起远程调用,减少资源浪费
最小请求次数:就是统计的次数,最少发起几次 然后查看是否达到0.5
统计时长:多少作为周期进行统计,1s只要请求数量为几次,失败多少次然后就触发


测试:

熔断后你会发现查询购物车速度变快很多,因为它不会再去远程调用,不会再去查商品

之前:

改进后:

熔断结束了,我们发行一次检测都是七百多那么没事了,如果有超过继续熔断

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

PARSCALE:大语言模型的第三种扩展范式

----->更多内容&#xff0c;请移步“鲁班秘笈”&#xff01;&#xff01;<----- 随着人工智能技术的飞速发展&#xff0c;大语言模型&#xff08;LLM&#xff09;已成为推动机器智能向通用人工智能&#xff08;AGI&#xff09;迈进的核心驱动力。然而&#xff0c;传统的…

在Windows上,将 Ubuntu WSL 安装并迁移到 D 盘完整教程(含 Appx 安装与迁移导入)

&#x1f4bb; 将 Ubuntu WSL 安装并迁移到 D 盘完整教程&#xff08;含 Appx 安装与迁移导入&#xff09; 本文记录如何在 Windows 系统中手动启用 WSL、下载 Ubuntu 安装包、安装并迁移 Ubuntu 到 D 盘&#xff0c;避免默认写入 C 盘&#xff0c;提高系统性能与可维护性。 ✅…

企微获取会话内容,RSA 解密函数

企微获取会话内容&#xff0c;RSA 解密函数 企微获取会话内容下载SDKSDK配置解密过程解密代码参考SDK文件上传到服务器最后 企微获取会话内容 官方文档&#xff1a; https://developer.work.weixin.qq.com/document/path/91774 下载SDK 根据自己的环境下载对应的SDK。 SDK配置…

MyBatis入门:快速搭建数据库操作框架 + 增删改查(CRUD)

一、创建Mybatis的项目 Mybatis 是⼀个持久层框架, 具体的数据存储和数据操作还是在MySQL中操作的, 所以需要添加MySQL驱动 1.添加依赖 或者 手动添加依赖 <!--Mybatis 依赖包--><dependency><groupId>org.mybatis.spring.boot</groupId><artifactI…

离线安装Microsoft 照片【笔记】

实验环境为&#xff1a;Windows 10 企业版 LTSC。 1.下载好相关离线依赖包和安装包。 2.管理员身份运行powershell&#xff0c;输入以下命令行&#xff1a; Add-AppPackage .\Microsoft.UI.Xaml.2.4_2.42007.9001.0_x64__8wekyb3d8bbwe.Appx Add-AppPackage .\Microsoft.NET…

【后端高阶面经:Elasticsearch篇】39、Elasticsearch 查询性能优化:分页、冷热分离与 JVM 调优

一、索引设计优化:构建高效查询的基石 (一)分片与副本的黄金配置 1. 分片数量计算模型 # 分片数计算公式(单分片建议30-50GB) def calculate_shards(total_data_gb, single_shard_gb=30):return max

基于 ZU49DR FPGA 的无线电射频数据采样转换开发平台核心板

无线电射频数据采样转换开发板及配套开发平台的核心板&#xff0c;该SOM核心板是一个最小系统&#xff0c;包括AMD公司的 Zynq UltraScale RFSOC 第3代系列XCZU49DR-2FFVF1760I FPGA、时钟、电源、内存以及 Flash。与其配套的底板是标准的全高全长Gen4.0 x8的PCIE卡&#xff0c…

软考 系统架构设计师系列知识点之杂项集萃(69)

接前一篇文章&#xff1a;软考 系统架构设计师系列知识点之杂项集萃&#xff08;68&#xff09; 第114题 若对关系R(A&#xff0c;B&#xff0c;C&#xff0c;D)和S(C&#xff0c;D&#xff0c;E)进行关系代数运算&#xff0c;则表达式 与&#xff08;&#xff09;等价。 A.…

leetcode 83和84 Remove Duplicates from Sorted List 和leetcode 1836

目录 83. Remove Duplicates from Sorted List 82. Remove Duplicates from Sorted List II 1836. Remove Duplicates From an Unsorted Linked List 删除链表中的结点合集 83. Remove Duplicates from Sorted List 代码&#xff1a; /*** Definition for singly-linked l…

【LeetCode 热题 100】买卖股票的最佳时机 / 跳跃游戏 / 划分字母区间

⭐️个人主页&#xff1a;小羊 ⭐️所属专栏&#xff1a;LeetCode 热题 100 很荣幸您能阅读我的文章&#xff0c;诚请评论指点&#xff0c;欢迎欢迎 ~ 目录 买卖股票的最佳时机跳跃游戏跳跃游戏 II划分字母区间 买卖股票的最佳时机 买卖股票的最佳时机 class Solution { pu…

万亿参数背后的算力密码:大模型训练的分布式架构与自动化运维全解析

目录 一、技术融合的时代背景 二、深度学习在 AI 大模型中的核心作用 2.1 预训练与微调机制 2.2 多模态深度学习的突破 三、分布式计算&#xff1a;大模型训练的基础设施 3.1 分布式训练核心原理 3.2 数据并行实战&#xff08;PyTorch DDP&#xff09; 3.3 模型并行与混…

Linux10正式版发布,拥抱AI了!

&#x1f4e2;&#x1f4e2;&#x1f4e2;&#x1f4e3;&#x1f4e3;&#x1f4e3; 作者&#xff1a;IT邦德 中国DBA联盟(ACDU)成员&#xff0c;10余年DBA工作经验 Oracle、PostgreSQL ACE CSDN博客专家及B站知名UP主&#xff0c;全网粉丝10万 擅长主流Oracle、MySQL、PG、高斯…

在离线 OpenEuler-22.03 服务器上升级 OpenSSH 的完整指南

当然可以&#xff01;以下是一篇结构清晰、语言通俗易懂的技术博客草稿&#xff0c;供你参考和使用&#xff1a; 在离线 OpenEuler-22.03 服务器上升级 OpenSSH 的完整指南 背景介绍 最近在对一台内网的 OpenEuler-22.03 服务器进行安全扫描时&#xff0c;发现其 SSH 版本存在…

全能邮箱全能邮箱:实现邮件管理的自动化!

全能邮箱全能邮箱&#xff1a;实现邮件管理的自动化&#xff01; 全能邮箱全能邮箱的配置教程&#xff1f;如何注册烽火域名邮箱&#xff1f; 全能邮箱全能邮箱作为一种创新的邮件管理解决方案&#xff0c;正逐渐改变我们处理邮件的方式。蜂邮EDM将围绕全能邮箱全能邮箱&…

mysql-tpcc-mysql压测工具使用

在Linux系统上安装和配置tpcc-mysql进行MySQL的TPC-C基准测试&#xff0c;通常涉及以下几个步骤。请注意&#xff0c;由于tpcc-mysql不是一个官方工具&#xff0c;它可能需要从第三方仓库获取&#xff0c;如Percona提供的版本。 前置条件 确保MySQL或MariaDB已安装&#xff1…

Qt找不到windows API报错:error: LNK2019: 无法解析的外部符号 __imp_OpenClipboard

笔者在开发中出现的bug完整报错如下&#xff1a; spcm_ostools_win.obj:-1: error: LNK2019: 无法解析的外部符号 __imp_OpenClipboard&#xff0c;函数 "void __cdecl spcmdrv::vCopyToClipboard(char const *,unsigned __int64)" (?vCopyToClipboardspcmdrvYAXPE…

OpenCv高阶(十七)——dlib库安装、dlib人脸检测

文章目录 前言一、dlib库简介二、dlib库安装1、本地安装&#xff08;离线&#xff09;2、线上安装 三、dlib人脸检测原理1、HOG 特征提取2、 SVM 分类器训练3、 滑动窗口搜索4、非极大值抑制&#xff08;NMS&#xff09; 四、dlib人脸检测代码1、导入OpenCV计算机视觉库和dlib机…

前端内容黑白处理、轮播图、奇妙的头像特效

1、内容黑白处理 &#xff08;1&#xff09;filter&#xff1a;滤镜 可以把包裹的区域中每一个像素点&#xff0c;经过固定的算法转换成另一种颜色来呈现 &#xff08;2&#xff09;grayscale&#xff1a;灰阶滤镜 取值范围&#xff1a;0~1取0&#xff1a;原图去1&#xff…

Git - .gitignore 文件

一、.gitignore 文件介绍 在使用 Git 进行版本控制时&#xff0c;.gitignore 文件是一个非常重要的配置文件&#xff0c;用于告诉 Git 哪些文件或目录不需要被追踪和提交到版本库中。合理使用 .gitignore 文件可以避免提交不必要的文件&#xff0c;如临时文件、编译生成的文件…

如何通过API接口实现自动化上货跨平台铺货?商品采集|商品上传实现详细步骤

一、引言&#xff1a;跨平台铺货的技术挑战与 API 价值 在电商多平台运营时代&#xff0c;商家需要将商品同步上架至淘宝、京东、拼多多、亚马逊、Shopee 等多个平台&#xff0c;传统手动铺货模式存在效率低下&#xff08;单平台单商品上架需 30-60 分钟&#xff09;、数据一致…