Sentinel详解

参考博客:

SpringCloud Sentinel集成到微服务项目中(保姆级教程)

什么是Sentinel

Sentinel 是面向分布式服务架构的轻量级流量控制产品,主要以流量为切入点,从流量控制、熔断降级、系统负载保护等多个维度来保护服务的稳定性。

优点

  • 丰富的应用场景: Sentinel 承接了阿里巴巴近 10 年的双十一大促流量的核心场景,例如秒杀(即突发流量控制在系统容量可以承受的范围)、消息削峰填谷、实时熔断下游不可用应用等。
  • 完备的实时监控: Sentinel 同时提供实时的监控功能。您可以在控制台中看到接入应用的单台机器秒级数据,甚至 500 台以下规模的集群的汇总运行情况。
  • 广泛的开源生态: Sentinel 提供开箱即用的与其它开源框架/库的整合模块,例如与 Spring Cloud、Dubbo、gRPC 的整合。您只需要引入相应的依赖并进行简单的配置即可快速地接入 Sentinel。
  • 完善的 SPI 扩展点: Sentinel 提供简单易用、完善的 SPI 扩展点。您可以通过实现扩展点,快速的定制逻辑。例如定制规则管理、适配数据源等。

下载

Github链接
官方文档,中文的推荐看这个学习

SpringCloud 整合 Sentinel

配置

引入依赖
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>
配置yaml文件
spring:cloud:sentinel:transport:port: 9999	# 控制台交流的端口,所以指定一个未使用的端口dashboard: localhost:8080 # 指定服务地址

流控规则

在这里插入图片描述
为了演示效果,把单机阈值设置为3。新增完成之后,再次访问http://localhost:8080/sentinel2接口,当QPS超过3时,就可以看到限流的效果
在这里插入图片描述
并发线程数规则: 当请求达到设置的最大线程数时候,在这些线程处理响应结束之前,如果此时还有线程到达,那么这个线程就会被流控。

直接流控模式

直接流控模式: 直接对添加流控的资源进行流量限制,默认就是采用这种限流模式

关联流控模式

关联流控模式:两个资源之间存在关联关系,假设A资源和B资源存在关联关系,对A资源进行流控规则,关联了B资源,那么此时如果A资源满足流控规则后,就会限流B资源,这就是关联流控模式。

链路流控模式

链路流控模式:根据接口的调用链路来实现流量控制,假设:A资源被B、C两个资源调用,也就是存在两个链路:B–>A、C–>A;那么就可以采用链路流控模式,对【B–>A】调用链路进行流控限制。
比如两个Controller 调用 同一个Services 中的方法查询数据库,此时我们可以在这个Services 方法上添加注解(SentinelResource),加入到链路流控中去。
配置:Sentinel 默认情况下会给进入SpringMVc的所有请求设置同一个root资源,会导致链路模式失效,我们需要关闭这种资源聚合。
添加配置:

spring:cloud:sentinel:web-context-unify: false

流控效果

快速失败(流控效果)

快速失败:当发生流控的时候,直接快速返回失败信息。

Warm Up(流控效果)

“Warm Up”机制在流控中主要用于平滑请求的处理,避免系统在高并发情况下的突发压力。通过先处理少量请求,系统可以逐步适应负载,降低错误率。
具体来说,Sentinel 的冷加载因子为 3,意味着它会根据设定的阈值(threshold)除以 3 来确定初始处理能力。在预热阶段,系统从处理 3 个请求开始,随着时间的推移,逐步增加处理请求的数量,例如 3、6、10,直到达到预设的阈值。这种逐步增加的方式可以有效防止系统过载,提升系统的稳定性和响应能力。

排队等待(流控效果)

排队等待:请求在达到设定的阈值时候,多余的请求会在指定的时间里面排队等待被处理,如果在指定时间里面,还没有被执行,那就直接失败。

熔断降级

慢调用比列

慢调用比例:请求的响应时长超过给定的RT,并且满足【最小请求数】中满调用的占比达到阈值,则触发熔断规则。
在这里插入图片描述
最大RT(ResponseTime)相当于响应时间,说明该请求属于慢调用。
比例阈值:当慢调用请求数 / 总请求数 > 比例阈值的时候会触发这个熔断规则
熔断时长:触发熔断的时候,在熔断时长之内,不会接受请求。
最小请求数:要触发熔断机制的前提是,已经处理了最小请求书这么多的请求。

异常比例

异常比例:在指定的请求数量里面,出现异常的请求达到指定比例,则触发熔断规则。
在这里插入图片描述

异常数

异常数:在最小请求数里面,出现异常的次数满足阈值,则发生熔断。
在这里插入图片描述

热点规则

何为热点?热点即经常访问的数据。很多时候我们希望统计某个热点数据中访问频次最高的TopK数据,并对其访问进行限制。比如:

  • 商品ID为参数,统计一段时间内最常购买的商品ID并进行限制
  • 用户ID为参数,针对一段时间内频繁访问的用户ID进行限制
    热点参数限流会统计传入参数中的热点参数,并根据配置的限流阈值与模式,对包含热点参数的资源调用进行限流。热点参数限流可以看做是一种特殊的流量控制,仅对包含热点参数的资源调用生效。

注意:热点参数规则,必须是使用 @SentinelResource 注解定义的资源。
在这里插入图片描述

系统规则

Sentinel 系统自适应限流从整体维度对应用入口流量进行控制,结合应用的 Load、CPU 使用率、总体平均 RT、入口 QPS 和并发线程数等几个维度的监控指标,通过自适应的流控策略,让系统的入口流量和系统的负载达到一个平衡,让系统尽可能跑在最大吞吐量的同时保证系统整体的稳定性

Load 自适应(仅对 Linux/Unix-like 机器生效)

系统的 load1 作为启发指标,进行自适应系统保护。当系统 load1 超过设定的启发值,且系统当前的并发线程数超过估算的系统容量时才会触发系统保护(BBR 阶段)。系统容量由系统的 maxQps * minRt 估算得出。设定参考值一般是 CPU cores * 2.5;

CPU usage(1.5.0+ 版本)

当系统 CPU 使用率超过阈值即触发系统保护(取值范围 0.0-1.0),比较灵敏;

平均 RT

当单台机器上所有入口流量的平均 RT 达到阈值即触发系统保护,单位是毫秒;

并发线程数

当单台机器上所有入口流量的并发线程数达到阈值即触发系统保护;

入口 QPS

当单台机器上所有入口流量的 QPS 达到阈值即触发系统保护。

授权规则

Sentinel 的授权规则(Authority Rule)是用于实现访问控制的机制,允许开发者根据请求来源(origin)来限制资源的访问。这一功能特别适用于需要保护 API 或服务的场景。以下是关于 Sentinel 授权规则的几个关键点:

  1. 主要概念
  • 资源(resource):指需要进行访问控制的目标,通常是 API、服务或其他关键操作。
  • 请求来源(limitApp):定义可以访问资源的来源,支持白名单和黑名单的配置。
  • 策略(strategy):确定访问控制的模式,可以是白名单模式或黑名单模式。
  1. 配置项
  • resource:指定要受限的资源名称。
  • limitApp:定义可以访问或被禁止访问的应用来源,用逗号分隔。
  • strategy:限制模式:
    a. AUTHORITY_WHITE:白名单模式,只有 limitApp 列出的应用能够访问。
    b. AUTHORITY_BLACK:黑名单模式,limitApp 列出的应用将被拒绝访问,其他应用可以访问。
  1. 使用场景
  • API 保护:防止未经授权的应用访问敏感 API。
  • 多租户系统:为不同租户设置访问权限,确保数据安全。
  • 流量管理:根据来源控制流量,避免恶意请求影响系统稳定性。

Sentinel自定义异常

自定义bean实现替换,实现BlockExceptionHandler 接口 重写handler方法
在这里插入图片描述

SentinelResource注解的使用

博客推荐

@SentinelResource 注解是 Spring Cloud Alibaba Sentinel 的一部分,用于实现流量控制和熔断降级。这个注解可以用在方法上,主要用于标记要进行熔断和流量控制的资源。以下是一些主要特性和使用方法:

主要特性
  1. 流量控制:通过设置阈值来限制请求数量,防止服务过载。
  2. 熔断降级:在服务出现异常时,能够快速切换到降级逻辑,保证系统的稳定性。
  3. 自定义回调:可以指定当请求被熔断时的回调方法。
使用示例
import com.alibaba.csp.sentinel.annotation.SentinelResource;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
public class MyController {@GetMapping("/myResource")@SentinelResource(value = "myResource", fallback = "fallbackMethod", blockHandler = "blockHandlerMethod")public String myResource() {// 业务逻辑return "Hello, Sentinel!";}public String fallbackMethod(Throwable ex) {return "Fallback response due to: " + ex.getMessage();}public String blockHandlerMethod(BlockException ex) {return "Blocked request: " + ex.getMessage();}
}
参数说明
  • value:资源名称,通常是方法名称。
  • fallback:指定降级逻辑的方法。
  • blockHandler:当流量控制策略生效(如限流)时,指定的处理方法将被调用,用于返回一个自定义的响应

Feign整合Sentinel

只需要FeignClient注解添加属性,FallBack保证

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

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

相关文章

Vue学习记录之二十五 Vue3中Web Componets的使用

一、webcomponets介绍 在Vue 3中使用Web Components可以通过多种方式实现。Web Components是一组允许你创建可重用、封装良好的自定义元素的标准技术。它们包括Custom Elements、Shadow DOM、HTML Templates等。 Vue3 支持原生模式&#xff0c;可以让单个文件的js,css,html以h…

移植rv1106SDK的ipcweb到ubuntu

移植minilogger 在sdk中找到minilogger&#xff0c;复制到任意的文件夹&#xff0c;执行 cmake ./ make make install把minilogger 安装到系统 修改Makefile 在上次那个基础上&#xff0c;修改Makefile #* 这里原来要包含../Makefile.param&#xff0c;但含有sdk的很多参数…

w003基于Springboot的图书个性化推荐系统的设计与实现

&#x1f64a;作者简介&#xff1a;拥有多年开发工作经验&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。&#x1f339;赠送计算机毕业设计600个选题excel文件&#xff0c;帮助大学选题。赠送开题报告模板&#xff…

Mysql(十) --- 用户权限和管理

文章目录 前言1. 应用场景2.用户2.1. 查看用户2.2. 创建用户2.2.1 语法2.2.2. 注意事项 2.2.3.示例2.3. 修改密码2.3.1. 语法2.3.2. 示例 2.4.删除用户2.4.1.语法2.4.2.示例 3. 权限和授权MySQL内置支持的权限列表3.1.给用户授权3.1.1.语法3.1.2. 示例 3.2.回收权限3.2.1.语法3…

Golang Agent 可观测性的全面升级与新特性介绍

作者&#xff1a;张海彬&#xff08;古琦&#xff09; 背景 自 2024 年 6 月 26 日&#xff0c;ARMS 发布了针对 Golang 应用的可观测性监控功能以来&#xff0c;阿里云 ARMS 团队与程序语言与编译器团队一直致力于不断优化和提升该系统的各项功能&#xff0c;旨在为开发者提…

基于SpringBoot的中药材进存销管理系统设计与实现

摘要 中药材进存销管理系统是为了满足中药材生产和销售企业的高效管理需求&#xff0c;涵盖了药材采购、库存管理和销售跟踪等主要功能。本系统采用Spring Boot框架进行开发&#xff0c;结合了前端和数据库设计&#xff0c;构建了一个实用的中药材管理平台&#xff0c;为企业提…

游戏服务器被攻击有办法防护吗

游戏服务器受到攻击时比较常见的。就算是刚上线的游戏&#xff0c;都会有被攻击的时候。游戏服务器受到攻击的原因以及解决方案有哪些呢&#xff1f; 游戏服务器被攻击的原因有哪些呢&#xff1f; 1、常见的攻击&#xff0c;大部分来自于同行之间的恶意竞争&#xff0c;你的游…

【QT】Qt窗口(上)

个人主页~ Qt窗口 一、菜单栏二、工具栏三、状态栏四、浮动窗口 Qt窗口是通过QMainWindow类来实现的&#xff0c;我们之前的学习是通过QWidget类实现的 QMainWindow包含一个菜单栏Menu Bar②&#xff0c;多个工具栏Tool Bars③&#xff0c;多个浮动窗口Dock Widgets&#xff0c…

OpenRTP 传输增加OpenRTPServer

开源地址 最近增加了OpenRTPServer&#xff0c; 已经修改完成一版放在了目录下&#xff0c;window和linux下编译都成功了&#xff0c;不过由于修改代码CMakefile 需要修改&#xff0c;先放放 OpenRTP开源地址 vlc得纠错传输方式 我发现我代码写错以后&#xff0c;vlc 依然能…

大数据Azkaban(二):Azkaban简单介绍

文章目录 Azkaban简单介绍 一、Azkaban特点 二、Azkaban组成结构 三、Azkaban部署模式 1、solo-server ode&#xff08;独立服务器模式&#xff09; 2、two server mode&#xff08;双服务器模式&#xff09; 3、distributed multiple-executor mode&#xff08;分布式多…

【Rust】环境搭建

▒ 目录 ▒ &#x1f6eb; 导读需求 1️⃣ 安装Chocolatey安装依赖 2️⃣ 安装RustRover安装toolchain&#xff08;rustup、VS&#xff09;重启配置生效设置安装插件 &#x1f4d6; 参考资料 &#x1f6eb; 导读 需求 重装系统&#xff0c;记录下环境搭建遇到的问题。 1️⃣ …

【最全基础知识2】机器视觉系统硬件组成之工业相机镜头篇--51camera

机器视觉系统中,工业镜头作为必备的器件之一,须和工业相机搭配。工业镜头是机器视觉系统中不可或缺的重要组成部分,其质量和性能直接影响到整个系统的成像质量和检测精度。 目录 一、基本功能和作用 二、分类 1、按成像方式分 2、按焦距分 3、按接口类型分 4、按应用…

如何制定有效的学习计划

文章目录 第一章&#xff1a;目标设定1.1 目标的重要性1.2 SMART原则1.3 目标设定公式 第二章&#xff1a;时间管理2.1 时间的重要性2.2 制定时间表2.3 时间管理公式2.4 番茄工作法2.5 时间分配公式 第三章&#xff1a;学习策略3.1 学习方法3.2 学习材料的选择3.3 学习效果公式…

量子计算突破:下一个科技革命的风口浪尖在哪里?

内容概要 在当今科技飞速发展的时代&#xff0c;量子计算如同一颗璀璨的明珠&#xff0c;正闪烁着无尽的可能性。它不仅是解决科学难题的钥匙&#xff0c;更是即将引领科技革命的先锋。如今&#xff0c;随着技术的不断突破&#xff0c;量子计算已经步入了一个崭新的阶段。想象…

【ZZULI】数据库第二次实验

【ZZULI】数据库第二次实验 创建学生信息管理系统的数据库通过T-SQL语句创建学生表、课程表、选课表创建学生表创建课程表创建选课表 修改表结构。为SC表添加写的列&#xff0c;列名为备注修改备注列的数据长度。删除SC表的备注列。 通过T-SQL语句对表的列添加约束&#xff0c;…

iOS静态库(.a)及资源文件的生成与使用详解(OC版本)

引言 iOS静态库&#xff08;.a&#xff09;及资源文件的生成与使用详解&#xff08;Swift版本&#xff09;_xcode 合并 .a文件-CSDN博客 在前面的博客中我们已经介绍了关于iOS静态库的生成步骤以及关于资源文件的处理&#xff0c;在本篇博客中我们将会以Objective-C为基础语言…

实验:使用Oxygen发布大型手册到Word格式

此前&#xff0c;我曾发表过一篇文章《结构化文档发布的故事和性能调优》&#xff0c;文中讨论了在将大型DITA手册转换为PDF格式时可能遇到的性能挑战及相应的优化策略。 近日&#xff0c;有朋友咨询&#xff0c;若将同样的大型手册输出为MS Word格式&#xff0c;是否也会面临…

从0到1,用Rust轻松制作电子书

我之前简单提到过用 Rust 做电子书&#xff0c;今天分享下如何用Rust做电子书。制作电子书其实用途广泛&#xff0c;不仅可以用于技术文档&#xff08;对技术人来说非常方便&#xff09;&#xff0c;也可以制作用户手册、笔记、教程等&#xff0c;还可以应用于文学创作。 如果…

Python应用指南:利用高德地图API实现路径规划

高德路径规划API是一套基于HTTP协议的接口服务&#xff0c;旨在为开发者提供便捷的路径规划解决方案。该API支持多种出行方式&#xff0c;包括步行、公交和驾车&#xff0c;能够满足不同场景下的路径查询需求。通过调用这些API&#xff0c;用户可以获得从起点到终点的最优路径建…

【Web.路由】——路由原理

这篇文章&#xff0c;我们来讲一讲什么是路由。 路由是 将用户请求地址映射为一个请求委托的过程&#xff0c;负责匹配传入的Http请求&#xff0c;然后将这些请求发送到应用的可执行终结点。 这里需要注意一个内容&#xff0c;发送到应用的可执行终结点。 路由的分类&#x…