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只要请求数量为几次,失败多少次然后就触发
测试:
熔断后你会发现查询购物车速度变快很多,因为它不会再去远程调用,不会再去查商品
之前:
改进后:
熔断结束了,我们发行一次检测都是七百多那么没事了,如果有超过继续熔断
相关文章:

SpringCloud Alibaba微服务-- Sentinel的使用(笔记)
雪崩问题: 小问题引发大问题,小服务出现故障,处理不当,可能导致整个微服务宕机。 假如商品服务出故障,购物车调用该服务,则可能出现处理时间过长,如果一秒几十个请求,那么处理时间过…...

PARSCALE:大语言模型的第三种扩展范式
----->更多内容,请移步“鲁班秘笈”!!<----- 随着人工智能技术的飞速发展,大语言模型(LLM)已成为推动机器智能向通用人工智能(AGI)迈进的核心驱动力。然而,传统的…...

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

企微获取会话内容,RSA 解密函数
企微获取会话内容,RSA 解密函数 企微获取会话内容下载SDKSDK配置解密过程解密代码参考SDK文件上传到服务器最后 企微获取会话内容 官方文档: 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 照片【笔记】
实验环境为:Windows 10 企业版 LTSC。 1.下载好相关离线依赖包和安装包。 2.管理员身份运行powershell,输入以下命令行: Add-AppPackage .\Microsoft.UI.Xaml.2.4_2.42007.9001.0_x64__8wekyb3d8bbwe.Appx Add-AppPackage .\Microsoft.NET…...
地理卷积神经网络加权回归模型的详细实现方案
以下为地理卷积神经网络加权回归模型的详细实现方案。由于篇幅限制,代码和说明将分模块呈现。 地理卷积神经网络加权回归模型实现 目录 理论基础数据预处理模型架构设计空间权重矩阵生成混合模型实现实验与结果分析优化与扩展结论一、理论基础 1.1 地理加权回归(GWR) 地理…...

【后端高阶面经:Elasticsearch篇】39、Elasticsearch 查询性能优化:分页、冷热分离与 JVM 调优
一、索引设计优化:构建高效查询的基石 (一)分片与副本的黄金配置 1. 分片数量计算模型 # 分片数计算公式(单分片建议30-50GB) def calculate_shards(total_data_gb, single_shard_gb=30):return max...
光伏电站及时巡检:守护清洁能源的“生命线”
在“双碳”目标驱动下,光伏电站作为清洁能源的主力军,正以年均20%以上的装机增速重塑全球能源格局。然而,这些遍布荒漠、屋顶的“光伏矩阵”并非一劳永逸的能源提款机,其稳定运行高度依赖精细化的巡检维护。山东枣庄触电事故、衢州…...

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

软考 系统架构设计师系列知识点之杂项集萃(69)
接前一篇文章:软考 系统架构设计师系列知识点之杂项集萃(68) 第114题 若对关系R(A,B,C,D)和S(C,D,E)进行关系代数运算,则表达式 与()等价。 A.…...
从源码编译支持ffmpeg(H264编码)的opencv(创建mp4视频报错:H264 is not supported with codec id 28)
目录 步骤 1:安装 FFmpeg 在 Ubuntu 上安装 FFmpeg 在 Windows 上安装 FFmpeg 验证FFmpeg是否支持H264编码 步骤 3:克隆 OpenCV 源码 步骤 4:编译 步骤 5:验证安装 本人的配置如下: 系统:Ubuntu 18…...

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 代码: /*** Definition for singly-linked l…...
每日leetcode(昨天赶飞机没做,今天补)
896. 单调数列 - 力扣(LeetCode) 题目 如果数组是单调递增或单调递减的,那么它是 单调 的。 如果对于所有 i < j,nums[i] < nums[j],那么数组 nums 是单调递增的。 如果对于所有 i < j,nums[i]…...
SDL2常用函数:SDL_BlitSurfaceSDL_UpdateWindowSurface 数据结构及使用介绍
SDL_BlitSurface SDL_BlitSurface 是 SDL 1.2/2.0 中都存在的函数,用于将一个表面(Surface)的内容复制到另一个表面,支持部分复制、格式转换和简单的混合操作。 核心功能 表面复制:将源表面的像素数据复制到目标表面区域选择:可…...

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

万亿参数背后的算力密码:大模型训练的分布式架构与自动化运维全解析
目录 一、技术融合的时代背景 二、深度学习在 AI 大模型中的核心作用 2.1 预训练与微调机制 2.2 多模态深度学习的突破 三、分布式计算:大模型训练的基础设施 3.1 分布式训练核心原理 3.2 数据并行实战(PyTorch DDP) 3.3 模型并行与混…...
LangChain03-图数据库与LangGraph
图数据库与LangGraph集成实践 1. 引言 在构建智能问答系统、推荐引擎或复杂决策流程时,传统的关系型数据库和向量数据库往往难以满足对实体关系建模和多跳推理的需求。图数据库(如 Neo4j、TigerGraph)通过节点-边-属性的结构化表示ÿ…...
rabbitmq单机多实例部署
RabbitMQ 单实例部署 单实例部署是指在一台服务器上运行一个 RabbitMQ 实例。这种部署方式适用于小型应用或开发环境,配置简单,资源占用较少。单实例部署的核心是安装 RabbitMQ 并启动服务,通常需要配置 Erlang 环境,因为 RabbitMQ 是基于 Erlang 编写的。单实例部署的优势…...

Linux10正式版发布,拥抱AI了!
📢📢📢📣📣📣 作者:IT邦德 中国DBA联盟(ACDU)成员,10余年DBA工作经验 Oracle、PostgreSQL ACE CSDN博客专家及B站知名UP主,全网粉丝10万 擅长主流Oracle、MySQL、PG、高斯…...

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

全能邮箱全能邮箱:实现邮件管理的自动化!
全能邮箱全能邮箱:实现邮件管理的自动化! 全能邮箱全能邮箱的配置教程?如何注册烽火域名邮箱? 全能邮箱全能邮箱作为一种创新的邮件管理解决方案,正逐渐改变我们处理邮件的方式。蜂邮EDM将围绕全能邮箱全能邮箱&…...
[特殊字符] Linux 日志查看与分析常用命令全攻略
在日常运维与开发排查中,我们经常需要查看服务日志来定位问题。本文系统整理了几种常用的日志查看命令,包括 tail、cat、grep、split、sed 等,并结合实际应用场景,提供了完整的使用方式和示例。 📌 一、tail 命令 ——…...

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

Qt找不到windows API报错:error: LNK2019: 无法解析的外部符号 __imp_OpenClipboard
笔者在开发中出现的bug完整报错如下: spcm_ostools_win.obj:-1: error: LNK2019: 无法解析的外部符号 __imp_OpenClipboard,函数 "void __cdecl spcmdrv::vCopyToClipboard(char const *,unsigned __int64)" (?vCopyToClipboardspcmdrvYAXPE…...
机试 | vector/array Minimum Glutton C++
题目地址 : C - Minimum Glutton #include<stdio.h> #include<iostream> #include<vector> #include<algorithm> using namespace std; int main() {//N:菜肴数,X:总甜度阈值,Y:总咸度阈值int…...

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

前端内容黑白处理、轮播图、奇妙的头像特效
1、内容黑白处理 (1)filter:滤镜 可以把包裹的区域中每一个像素点,经过固定的算法转换成另一种颜色来呈现 (2)grayscale:灰阶滤镜 取值范围:0~1取0:原图去1ÿ…...
蓝桥杯 10. 安全序列
当然可以,以下是整理后的 Markdown 格式题目描述: 题目描述 小蓝是工厂里的安全工程师,他负责安放工厂里的危险品。 工厂是一条直线,直线上有 n 个空位,小蓝需要将若干个油桶放置在这 n 个空位上。每 2 个油桶中间至…...
(10)-java+ selenium->元素之By class name
1.简介 继续介绍WebDriver关于元素定位大法,这篇介绍By ClassName。看到ID,NAME这些方法的讲解,应该知道,要做好Web自动化测试,最好是需要了解一些前端的基本知识。有了前端知识,做元素定位会很轻松,同样写网络爬虫也很有帮助 2.常用定位方法(8种) (1)id (2)nam…...