微服务-Sentinel
目录
背景
Sentinel使用
Sentinel控制台
Sentinel控制规则
Sentinel整合OpenFeign
背景
在微服务项目架构中,存在多个服务相互调用场景,在某些情况下某个微服务不可用时,上游调用者若一直等待,会产生资源的消耗,极端情况下会影响整个应用,如下图:
在高并发的场景下,由于A服务不可用,导致B调用A一直等待,迟迟不能释放资源,进而导致B服务不可用,进而导致CD服务不可用,最终整个项目服务不可用,产生了服务崩塌。Sentinel可以解决上述问题,它在服务流量控制、熔断等方面有很好的解决方案。
Sentinel常用的使用场景如下:
1、秒杀场景:限流防止瞬时流量冲击。
2、服务熔断与降级:当服务不可用时,快速失败,避免级联故障。
3、系统保护:预防由于高负载引发的系统崩溃。
Sentinel使用
Sentinel控制台
Sentinel 控制台是一个独立应用,用于可视化的监控和管理,它可以直接运行可执行的jar,项目使用的jar版本是:sentinel-dashboard-1.8.8,直接运行:java -jar sentinel-dashboard-1.8.8.jar
运行后访问:http://localhost:8080/#/login sentinel/sentinel登录
Sentinel控制规则
Sentinel控制规则很多,包括:流控规则、熔断规则、热点规则、系统规则、授权规则,本文重点介绍流控规则、熔断规则。项目配置步骤如下:
1、项目添加对Sentinel的依赖
2、项目配置Sentinel
3、服务接口编写及简单测试
简单写了一个后台数据库查询接口,查询id=1的用户信息
4、Sentinel控制台配置流控规则
对上述服务接口,配置了每秒请求数不能超过1的流控规则,超过后,直接返回调用失败,浏览器快速请求后,会出现如下效果(流控规则已生效):
流控规则配置说明如下:
资源名:资源名是需要限流的唯一标识,可以是方法名、API请求路径等。通过资源名,Sentinel能够对流量进行管理与控制。
针对来源:针对特定的调用方进行限流。例如,服务A调用服务B时,可以针对服务A的调用进行限流。默认为 default,表示不区分调用来源。
QPS(每秒请求数):如果某个资源的每秒请求数超过设定的阈值,则会触发限流。
线程数:当访问该资源的并发线程数达到设定的阈值时,触发限流。
是否集群:如果不需要集群模式限流,默认选择“不需要集群”。否则,可以开启集群限流。
流控模式-直接限流:一旦达到阈值,直接限流当前的请求。
流控模式-关联限流:当关联的其他资源达到限流条件时,限流当前的资源。比如/resourceA达到阈值时,/resourceB也被限流。
流控模式-链路限流:对入口资源进行链路限流,限制从指定入口进入的资源访问。当链路上的访问量达到阈值时,限制链路上的流量,常用于链路保护。
流控效果-快速失败:当达到限流条件时,直接抛出异常,返回失败结果。
流控效果-Warm Up(预热):在一段时间内,逐步增加允许通过的流量,直至达到设定的 QPS 阈值。适合应用在高峰期流量突增的场景。
流控效果-排队等待:请求不会立即失败,而是进入排队状态,匀速通过。适用于平滑处理请求的场景,类似于“漏斗效应”。阈值类型必须为 QPS,否则无效。
如果需要手工处理限流或者降级的逻辑,不直接演示生硬的【Blocked by Sentinel (flow limiting)】信息,可以通过@SentinelResource 解决,参考代码如下:
blockHandler:处理限流或降级时的逻辑,方法名必须是 public,返回类型与原方法一致,且参数类型需要与原方法匹配,方法最后要加上 BlockException 参数。可以处理流控、熔断等情况触发的 BlockException。
5、Sentinel控制台配置熔断规则
Sentinel 的熔断规则主要分为三种策略,慢调用比例、异常比例和异常数,这些策略用于保护服务免于过载或连续的失败。
慢调用比例 :该策略会根据请求响应的时间来判断是否进行熔断,适合用于防止因某些请求响应过慢而拖垮整个系统。
最大RT(Response Time):表示系统中允许的最大响应时间,如果一个请求的响应时间超过这个设定值,就会被判定为慢调用。
最小请求数目:在统计周期内,只有请求数超过设定的最小请求数,才会触发熔断逻辑。
熔断条件:当单位时间内内的慢调用比例超过设定的阈值时,触发熔断,进入熔断状态。
恢复机制:在熔断时长过后,进入半开状态,如果后续请求正常则关闭熔断器,如果再发生慢调用则继续熔断。
异常比例:该策略会根据异常的比例来判断是否进行熔断,适合用于当请求的失败率突然增加时,自动进行保护。
最小请求数目:同样需要单位时间内的请求数达到设定的最小值,才会计算异常比例。
熔断条件:当单位时间内内的异常比例大于设定的阈值时,触发熔断,进入熔断状态。
恢复机制:在熔断时长过后,进入半开状态,如果后续请求成功,则关闭熔断器,否则继续熔断。
异常数:该策略根据单位时间内的异常数量来判断是否熔断,适合用于系统中发生大量异常时的保护机制。
下方以异常数熔断规则举例:
后台模拟异常
异常数熔断规则配置:
在10秒时间内,最小请求大于5,接口出现10次异常后,接口服务熔断不可用
jemter多线程请求测试:
启动jemter任务,然后在浏览器请求:http://localhost:8088/blogUser/simulateException 显示接口服务已熔断。
当关闭jemter测试任务后,再次请求 http://localhost:8088/blogUser/simulateException 后,服务接口恢复。
Sentinel整合OpenFeign
Sentinel整合OpenFeign步骤如下:
1、增加配置信息
2、对feign接口增加服务降级的逻辑
3、测试调用
在blog-content服务正常可用时,调用http://localhost:8088/blogUser/simulate 时,系统返回后台数据信息;当关闭blog-content服务时,控制台显示【BlogContent 服务降级】
相关文章:

微服务-Sentinel
目录 背景 Sentinel使用 Sentinel控制台 Sentinel控制规则 Sentinel整合OpenFeign 背景 在微服务项目架构中,存在多个服务相互调用场景,在某些情况下某个微服务不可用时,上游调用者若一直等待,会产生资源的消耗,极端情…...
DNS缓存
DNS详细解释 DNS缓存(DNS Cache)是指操作系统或应用程序在本地保存的一份“域名与IP地址的对应关系”记录。 1. DNS的基本作用 当你访问一个网站(比如 www.jd.com)时,计算机需要先把这个域名转换成实际的IP地址&…...

MySQL垂直分库(基于MyCat)
参考资料: 参考视频 参考博客 Mycat基本部署 视频参考资料:链接: https://pan.baidu.com/s/1xT_WokN_xlRv0h06b6F3yg 提取码: aag3 概要: 本文的垂直分库,全部是基于前文部署的基本架构进行的 垂直分库: 垂直分库…...

Rust 变量与可变性
文章目录 变量与可变性常量遮蔽(Shadowing) 变量与可变性 Rust中变量默认是不可变的,这是 Rust 鼓励你编写更安全、易于并发代码的众多方式之一。不过,你仍然可以选择让变量可变。让我们来探讨 Rust 为什么鼓励你优先使用不可变性…...

深入理解 C++ 中的 list 容器:从基础使用到模拟实现
一、list 的底层数据结构与核心特性 1.1 双向循环链表的物理结构 节点定义:每个节点包含三个部分 template <typename T> struct ListNode {T data; // 存储的数据ListNode* prev; // 指向前驱节点的指针ListNode* next; // 指向后继节点的指针L…...

状态机实现文件单词统计
系统如何查找可执行文件 默认:在PATH路径下寻找文件文件下 执行当前目录下文件: ./:指定文件目录是当前目录 ./count:执行当前目录文件 编译.c文件为运行文件 gcc -o count 0voice.c #将0voice.c编译为名字count 为什么主函数要那么写&a…...

从0开始学习R语言--Day13--混合效应与生存分析
混合效应模型(Mixed Effects Model) 对于数据来说,我们通常把所有样本共有的影响因素(性别,实验处理,实验方法),这种可以推广到总体的叫做固有效应,而仅适用于特定分组的…...

基于mediapipe深度学习的虚拟画板系统python源码
目录 1.前言 2.算法运行效果图预览 3.算法运行软件版本 4.部分核心程序 5.算法仿真参数 6.算法理论概述 7.参考文献 8.算法完整程序工程 1.前言 虚拟画板系统基于计算机视觉与深度学习技术,通过摄像头捕获用户手部动作,利用 MediaPipe框架实现手…...

复变函数 $w = z^2$ 的映射图像演示
复变函数 w z 2 w z^2 wz2 的映射图像演示 复变函数 w z 2 w z^2 wz2 是一个基本的二次函数,在复平面上具有有趣的映射性质。下面我将介绍这个函数的映射特性,并使用MATLAB进行可视化演示。 映射特性 极坐标表示:若 z r e i θ z …...

Python实现P-PSO优化算法优化循环神经网络LSTM回归模型项目实战
说明:这是一个机器学习实战项目(附带数据代码文档),如需数据代码文档可以直接到文章最后关注获取。 1.项目背景 在当今数据驱动的时代,时间序列预测和回归分析是许多领域中不可或缺的技术手段。循环神经网络ÿ…...

复合机器人:纠偏算法如何重塑工业精度与效率?
在智能制造领域,复合机器人正成为柔性生产与高精度作业的核心载体。面对“复合机器人有纠偏算法吗?”这一行业高频问题,富唯智能以多模态纠偏技术体系给出了答案——通过自研的AI驱动纠偏算法与多传感器融合方案,复合机器人不仅能…...

审计- 1- 审计概述
1.财务报表审计的概念 财务报表审计是指注册会计师对财务报表是否不存在重大错报提供合理保证,以积极方式提出意见,增强除管理层之外的预期使用者对财务报表信赖的程度。 1.1 审计业务三方关系人 注册会计师对财务报表发表审计意见是注册会计师的责任管…...

在MDK中自动部署LVGL,在stm32f407ZGT6移植LVGL-8.4,运行demo,显示label
在MDK中自动部署LVGL,在stm32f407ZGT6移植LVGL-8.4 一、硬件平台二、实现功能三、移植步骤1、下载LVGL-8.42、MDK中安装LVGL-8.43、配置RTE4、配置头文件 lv_conf_cmsis.h5、配置lv_port_disp_template 四、添加心跳相关文件1、在STM32CubeMX中配置TIM7的参数2、使能…...

模块二:C++核心能力进阶(5篇) 篇一:《STL源码剖析:vector扩容策略与迭代器失效》
一、前言:重新认识vector的复杂性 在C开发者中,std::vector常被视为"动态数组"的简单实现,但其底层机制实则蕴含着深刻的工程智慧。本篇将通过: 多维度源码剖析(GCC/Clang/MSVC三平台实现对比)…...
计算机组成原理核心剖析:CPU、存储、I/O 与总线系统全解
引言 在当今数字化时代,计算机已经渗透到我们生活的方方面面,从智能手机到超级计算机,从智能家居到自动驾驶汽车。然而,你是否曾好奇过,这些功能强大的设备内部究竟是如何工作的?是什么让计算机能够执行各种…...
数据分类分级的实践与反思:源自数据分析、治理与安全交叉视角的洞察
在数据安全体系的构建中,数据分类分级无疑扮演着基石性的角色,其系统性与复杂性对从业者提出了极高要求。尽管个人并非专注于该领域的研究专家,但凭借在数据分析、数据治理及数据安全策略应用交叉地带的长期实践与系统性认知,得以…...

自动化立体仓库WCS的设计与实现
导语 大家好,我是社长,老K。专注分享智能制造和智能仓储物流等内容。欢迎大家使用我们的仓储物流技术AI智能体。 新书《智能物流系统构成与技术实践》 新书《智能仓储项目出海-英语手册,必备!》 完整版文件和更多学习资料…...
百度蜘蛛池的作用是什么?技术@baidutopseo
百度蜘蛛池的作用 百度蜘蛛池是一种用于集中管理和调度百度搜索引擎蜘蛛(爬虫)的技术工具。其主要目的是优化网站内容的收录效率,帮助搜索引擎更高效地发现和抓取网页内容。技术baidutopseo 提升收录效率 通过集中大量百度蜘蛛的访问请求&…...
8.linux文件与文件夹内处理命令cp,mv,rm
cp 可以用于复制文件/文件夹 cp 【-r】 参数1 参数2 -r,用于复制文件夹使用,表示递归 mv 用于移动文件/文件夹,没有选项 参数2:表示移动去的地方,如果参数2不存在,则进行改名,保证目标存在…...
JavaScript性能优化:实战技巧提升10倍速度
JavaScript 性能优化实战技术文章大纲 基础优化策略 减少 DOM 操作:频繁的 DOM 操作会导致重绘和回流,影响性能。使用文档片段(DocumentFragment)或虚拟 DOM 技术优化批量操作。 避免全局变量污染:全局变量会增加内…...
核函数:解锁支持向量机的强大能力
在机器学习的世界中,支持向量机(SVM)是一种强大的分类算法,而核函数则是其背后的“魔法”,让 SVM 能够处理复杂的非线性问题。今天,我们就来深入探讨核函数的奥秘,看看它们是如何帮助 SVM 在高维…...

UE5 2D地图曝光太亮怎么修改
UE5 2D地图曝光怎么修改 在场景添加后期处理体积 修改后期处理体积Exposure曝光参数最大值最小值都改为0 勾选Infinite Extend 全地图范围应用此后期处理体积...

C# 类和继承(基类访问)
基类访问 如果派生类必须访问被隐藏的继承成员,可以使用基类访问(base access)表达式。基类 访问表达式由关键字base后面跟着一个点和成员的名称组成,如下所示: 例如,在下面的代码中,派生类Oth…...

帕金森带来的生活困境
当这种健康状况出现,行动不再自如成为最明显的改变。日常行走时,步伐会逐渐变小、变慢,甚至会出现 “小碎步” 往前冲,难以停下,简单的起身、转身都可能变得艰难。手部也会不受控制地颤抖,拿水杯、系纽扣这…...
集成测试的流程总结
首先我们的目的是进行自动化测试,也就是通过cl工具来对我们的项目用我们自己写的yaml文件中的命令来测试项目,这是我们的根本性目的,现在用github action cl工具以及maestro cli 云端作为例子通一遍流程。 首先用xcode创建我们的ios app应用程…...

Redis最佳实践——性能优化技巧之Pipeline 批量操作
Redis Pipeline批量操作在电商应用中的性能优化技巧 一、Pipeline核心原理与性能优势 1. 工作机制对比: sequenceDiagramtitle 常规请求 vs Pipeline请求# 常规模式Client->>Redis: 命令1Redis-->>Client: 响应1Client->>Redis: 命令2Redis--&g…...
Node.js 项目调试指南
Node.js 项目调试指南 🧭 一、调试工具和方式总览 方式难度场景说明console.log 调试★简单问题定位最常见,但效率低debug 模块★★模块化输出日志支持命名空间的调试日志VSCode 断点调试★★★跟踪函数调用、变量状态推荐使用node inspect / ndb★★★…...

win32相关(虚拟内存和物理内存)
虚拟内存和物理内存 在win32操作系统下,每个进程都有它自己独立的4GB空间,是window给它分配的一个虚拟空间,并不是真正的物理空间,这4GB空间中,分为高2G和低2G,高2G是应用程序的,低2G空间是给内…...

Linux操作系统安全管理概述与命令操作
前言: 1.本文将详细描述让读者了解Linux操作系统安全管理的概述和SELinux安全上下文以及基础操作命令; 2.本文将让读者掌握Linux操作系统防火墙firewall的结构和命令使用方法; 3.了解Iptables防火墙配置的结构与特点以及…...

《操作系统真相还原》——中断
可以毫不夸张的说,操作系统离不开中断 此时我们将中断处理程序放在了汇编文件中了,很显然我们不能很方便的编写中断处理程序,不如在汇编程序里调用c函数。 在这个感觉过可以在c语言中直接内联汇编完成这些。 定时器 将时钟中断的频率提高后…...