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

雪崩问题:

小问题引发大问题,小服务出现故障,处理不当,可能导致整个微服务宕机。
假如商品服务出故障,购物车调用该服务,则可能出现处理时间过长,如果一秒几十个请求,那么处理时间过长,那么卡的人越来越多,那么就会导致资源耗尽。原本服务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.pswp.cn/web/80920.shtml

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

相关文章

5:OpenCV—图像亮度、对比度变换

1.更改图像和视频的亮度 更改亮度 更改图像的亮度是常用的点操作。在此操作中,图像中每个像素的值应增加/减少一个常数。要更改视频的亮度,应对视频中的每一帧执行相同的操作。 如果要增加图像的亮度,则必须为图像中的每个像素添加一些正常…

【工作流】Fastgpt配置豆包模型-火山引擎

V4.9.7 Fastgpt现在不通过oneapi 来配置模型和渠道了, 可以直接在页面进行设置 首先在账号- 模型提供商里面 填入豆包的信息: 渠道名随便填,厂商选豆包, 然后选3个模型,如图所示 如果没有填入模型映射的话是没办法 …

2025年系统架构师---综合知识卷

1.进程是一个具有独立功能的程序关于某数据集合的一次运行活动,是系统进行资源分配和调度的基本单位(线程包含于进程之中,可并发,是系统进行运算调度的最小单位)。一个进程是通过其物理实体被感知的,进程的物理实体又称为进程的静态描述,通常由三部分组成,分别是程序、…

LangChain4j入门AI(六)整合提示词(Prompt)

前言 提示词(Prompt)是用户输入给AI模型的一段文字或指令,用于引导模型生成特定类型的内容。通过提示词,用户可以告诉AI“做什么”、 “如何做”以及“输出格式”,从而在满足需求的同时最大程度减少无关信息的生成。有…

如何使用 Docker Compose 部署 Immich

如何使用 Docker Compose 部署 Immich Immich 是一个开源的自建照片和视频备份解决方案,通过 Docker 部署可以快速构建一个稳定的自主管理系统。本文将带你一步步完成使用 Docker Compose 部署 Immich 的过程,帮助你在生产环境中实现高效的媒体管理。 1…

Mac远程连接Windows电脑教程

在 Mac 上通过微软官方远程桌面工具(Windows App)连接局域网内的 Windows 电脑,需按照以下步骤操作: 一、准备工作 确认 Windows 版本支持远程连接 Windows 专业版/企业版/教育版 支持远程桌面功能。家庭版不支持,需使…

从0到1打造AI Copilot:用SpringBoot + ChatGPT API实现智能开发助手

本文将从0到1系统性地讲解如何基于SpringBoot与OpenAI ChatGPT API打造一款智能开发助手(AI Copilot)。文章首先介绍AI Copilot的背景与价值,接着深入架构设计与环境准备,然后通过详尽的代码示例演示SpringBoot项目的搭建、依赖配…

Crawl4AI:高效的AI数据抓取工具

在大数据时代,抓取并处理大量数据是进行人工智能(AI)研究与开发的基础。而网络爬虫是获取网页数据的重要工具。今天,我想介绍一个功能强大的爬虫框架——Crawl4AI,它为数据抓取和机器学习任务提供了无缝的支持。Crawl4…

从单链表 list 中删除第 i 个元素--Python

从单链表 list 中删除第 i 个元素 一、问题引入二、解题步骤1.思维导图2.解题步骤 三、代码实现四、个人总结 一、问题引入 请编写程序,将 n 个整数顺次插入一个初始为空的单链表的表头。随后对任意给定的位序 i,删除链表中第 i 个结点。注意&#xff1…

git学习与使用(远程仓库、分支、工作流)

文章目录 前言简介git的工作流程git的安装配置git环境:git config --globalgit的基本使用新建目录初始化仓库(repository)添加到暂存区新增/修改/删除 文件状态会改变 提交到仓库查看提交(commit)的历史记录git其他命令…

九、日志分析和系统故障排查

目录 1、日志分析1.1、日志介绍1.1.1、日志的功能1.1.2、日志文件的分类1.1.3、日志保存位置1.2、rsyslog服务1.2.1、发送日志到远程日志服务器1.3、查看日志文件1.3.1、/var/log/messages文件的内容示例1.3.2、用户登录、退出系统的相关日志1.4、日志级别1.5、程序日志分析1.6…

C++ 非类成员变量 非类成员函数 全局变量 使用

1 使用特点 加 :: 变量使用 #include <iostream> using namespace std; int qwer 100; int asdf 900; void sitl(){std::cout <<"globe dog is sitting." << std::endl; }class Cat { public:static int num;}; int Cat::num 99;class Dog { …

【小乌龙问题】stm32供电,用过的ch340缺无法被识别

解决&#xff1a;更换正确供电&#xff08;stlink&#xff09;&#xff0c;不能用usb-ttl的仅供电&#xff0c;会干扰的&#xff01;&#xff01;&#xff01;&#xff01; 原来用stlink供电&#xff0c;今天没拿就想着usb-ttl的电源供电&#xff0c;然后用ch340传输数据&…

使用 Navicat 17 for PostgreSQL 时,请问哪个版本支持 PostgreSQL 的 20150623 版本?还是每个版本都支持?

&#x1f9d1;‍&#x1f4bb; PostgreSQL 用户 使用 Navicat 17 for PostgreSQL 时&#xff0c;请问哪个版本支持 PostgreSQL 的 20150623 版本&#xff1f;还是每个版本都支持&#xff1f; &#x1f9d1;‍&#x1f527; 官方技术中心 Navicat Premium 17 和 Navicat for P…

游戏引擎学习第305天:在平台层中使用内存 Arena 的方法与思路

回顾前一天内容&#xff0c;并为今天的开发工作设定方向 我们正在直播制作完整游戏&#xff0c;当前正在实现一个精灵图&#xff08;sprite graph&#xff09;的排序系统。排序的代码已经写完&#xff0c;过程并不复杂&#xff0c;虽然还没做太多优化&#xff0c;但总体思路比…

PHP-FPM 调优配置建议

1、动态模式 pm dynamic; 最大子进程数&#xff08;根据服务器内存调整&#xff09; pm.max_children 100 //每个PHP-FPM进程大约占用30-50MB内存(ThinkPHP框架本身有一定内存开销)安全值&#xff1a;8GB内存 / 50MB ≈ 160&#xff0c;保守设置为100 ; 启动时创建的进程数&…

腾讯2025年校招笔试真题手撕(一)

一、题目 有n 把钥匙&#xff0c;m 个锁&#xff0c;每把锁只能由一把特定的钥匙打开&#xff0c;其他钥匙都无法打开。一把钥匙可能可以打开多把锁&#xff0c;钥匙也可以重复使用。 对于任意一把锁来说&#xff0c;打开它的钥匙是哪一把是等概率的。但你无法事先知道是哪一把…

【北邮通信系统建模与仿真simulink笔记】(2)2.3搭建仿真模型模块操作运行仿真

【声明】 本博客仅用于记录博主学习内容、分享笔记经验&#xff0c;不得用作其他非学术、非正规用途&#xff0c;不得商用。本声明对本博客永久生效&#xff0c;若违反声明所导致的一切后果&#xff0c;本博客均不负责。 目录 【声明】 一、搭建第一个仿真模型 二、模块操作…

系统与账户安全

SYS-01&#xff1a;Windows的账户安全 安全配置核心原则&#xff1a; 强密码策略&#xff1a; 通过组策略设置密码复杂度&#xff1a; # 启用密码复杂度要求 secedit /export /cfg secpolicy.inf # 修改文件中的 "PasswordComplexity 1" secedit /configure /db …

COMPUTEX 2025 | 广和通5G AI MiFi解决方案助力移动宽带终端迈向AI新未来

随着5G与AI不断融合&#xff0c;稳定高速、智能的移动网络已成为商务、旅行、户外作业等场景的刚需。广和通5G AI MiFi方案凭借领先技术与创新设计&#xff0c;重新定义5G移动网络体验。 广和通5G AI MiFi 方案搭载高通 4nm制程QCM4490平台&#xff0c;融合手机级超低功耗技术…