SpringCloud Alibaba 微服务(四):Sentinel
目录
前言
一、什么是Sentinel?
Sentinel 的主要特性
Sentinel 的开源生态
二、Sentinel的核心功能
三、Sentinel 的主要优势与特性
1、丰富的流控规则
2、完善的熔断降级机制
3、实时监控和控制台
4、多数据源支持
5、扩展性强
四、Sentinel 与 Hystrix 的对比
五、Sentinel安装与使用
1、Sentineal 控制台下载与安装
2、给服务接入sentinel监控
3、流控规则
接口限流
直接流控模式
关联流控模式
链路流控模式
主要概念
使用场景
4、@SentinelResource注解
基本用法
使用示例
注意事项
总结
前言
随着微服务架构的普及,如何保证系统的高可用性和稳定性成为开发者必须面对的重要课题。阿里巴巴开源的 Sentinel 作为一款流量防护组件,提供了熔断、限流、降级等多种功能,帮助开发者提升系统的容错能力。本文将记录 Sentinel 的核心功能及其在 Spring Cloud 中的集成和使用。也希望本文,能够帮助你们在微服务项目中轻松地集成和使用 Sentinel,提升系统的稳定性和容错能力。
一、什么是Sentinel?
Sentinel 是阿里巴巴开源的流量防护组件,专注于流量控制和系统稳定性保护。它提供了丰富的功能,如限流、熔断降级、系统自适应保护、实时监控等,帮助开发者构建高可用和高稳定性的微服务系统。
中文官网:home | Sentinel (sentinelguard.io)
Sentinel 的主要特性
Sentinel 的开源生态
二、Sentinel的核心功能
限流:通过多种流量控制策略,实现对热点数据、分布式请求等的限流。
熔断降级:根据调用错误比例、RT(响应时间)等指标,对不稳定的服务进行熔断,避免级联故障。
系统自适应保护:根据系统的负载情况,动态调整限流和熔断策略,保证系统在高负载下的稳定性。
实时监控:提供实时的监控与报警功能,帮助开发者及时发现和处理问题。
三、Sentinel 的主要优势与特性
1、丰富的流控规则
流量整形:支持匀速排队、预热、并发等多种流控策略。
热点参数限流:针对传入参数进行热点数据的限流保护。
系统自适应保护:根据系统的负载情况,动态调整限流和熔断策略。
2、完善的熔断降级机制
基于错误比例:在指定时间窗口内,如果请求的错误比例超过阈值,则触发熔断。
基于响应时间:在指定时间窗口内,如果请求的平均响应时间超过阈值,则触发熔断。
3、实时监控和控制台
实时监控:提供对实时流量、调用关系、链路流量等多维度的监控。
控制台:通过可视化的 Dashboard,实时配置和管理限流、熔断规则。
4、多数据源支持
规则动态更新:支持从 Nacos、Apollo、ZooKeeper 等多个数据源动态加载和更新规则。
5、扩展性强
SPI 扩展:提供 SPI 扩展点,可以自定义流控、熔断、降级等策略。
四、Sentinel 与 Hystrix 的对比
特性 | Sentinel | Spring Cloud Hystrix |
---|---|---|
限流 | 提供丰富的限流策略,如预热、匀速排队、并发控制等 | 不支持 |
熔断机制 | 支持基于错误比例、响应时间、异常数量等多种熔断策略 | 主要基于错误比例和响应时间 |
实时监控 | 提供完整的实时监控和可视化控制台 | 需要集成 Turbine 和 Hystrix Dashboard |
规则动态配置 | 支持多种数据源(如 Nacos、Apollo、ZooKeeper)动态配置规则 | 通过 Archaius 实现,灵活性相对较低 |
扩展性 | 提供丰富的 SPI 扩展点,方便自定义策略 | 扩展性相对较差 |
社区活跃度 | 社区活跃,持续更新 | 2018 年 Netflix 宣布进入维护模式,社区活跃度降低 |
依赖 | 轻量级,无需依赖额外组件 | 需要依赖 Hystrix Dashboard 和 Turbine 进行监控 |
Sentinel 和 Spring Cloud Hystrix 都是优秀的服务保护工具,但各有特点。Sentinel 提供了更丰富的限流策略、动态规则配置和实时监控功能,并且具有更高的扩展性。相比之下,Hystrix 在熔断和降级方面也有较好的表现,但由于Hystrix进入维护模式,其社区活跃度和新特性支持有所降低。
在选择时,可以根据具体需求和项目特点进行权衡。如果需要更强的限流能力、动态规则配置和实时监控,建议选择 Sentinel。如果项目已经使用 Hystrix 并且稳定运行,也可以继续使用 Hystrix。
五、Sentinel安装与使用
1、Sentineal 控制台下载与安装
下载地址:Releases · alibaba/Sentinel (github.com)
选择jar包下载
通过CMD命令运行
java -jar sentinel-dashboard-1.8.8.jar
如下图所示,则已启动成功。
访问地址:localhost:8080
账号密码:都是sentinel
2、给服务接入sentinel监控
引入依赖
<!-- sentinel -->
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-sentinel</artifactId><version>${spring-cloud-alibaba.version}</version>
</dependency>
如果版本不对的话,运行会报错,sentinel依赖时与web依赖形成循环依赖。
附上完整的maven依赖
<properties><maven.compiler.source>17</maven.compiler.source><maven.compiler.target>17</maven.compiler.target><!-- spring boot --><spring-boot.version>2.7.5</spring-boot.version><!-- spring cloud --><spring-cloud.version>2021.0.1</spring-cloud.version><spring-cloud-alibaba.version>2021.0.1.0</spring-cloud-alibaba.version><spring-cloud-starter-alibaba-nacos-config.version>2.1.4.RELEASE</spring-cloud-starter-alibaba-nacos-config.version>
</properties>
配置sentinel
server:port: 9090spring:application:name: demo-usercloud:nacos:discovery:server-addr: 192.168.1.85:8848namespace: democonfig:server-addr: 192.168.1.85:8848prefix: ${spring.application.name}file-extension: ymlnamespace: demosentinel:transport:dashboard: localhost:8080 #配置sentinel dashboard地址
重启服务,访问接口localhost:9090/hello/getOrder
这时候在控制台就可以看到我们的请求了,证明已经监控到我们服务
3、流控规则
流控规则属性
资源名: 唯一名称,默认请求路径,表示对该资源进行流控
针对来源: Sentinel可以针对调用者进行限流,填写微服务名,默认default(不区分来源)
阈值类型/单击阈值:
QPS:(每秒钟的请求数量):当调用该api的QPS达到阈值时,进行限流
线程数:当调用该线程数达到阈值的时候,进行限流
是否集群:不需要集群
流控模式:
直接: api达到限流条件时,直接限流
关联: 当关联的资源达到阈值时,就限流自己
链路: 只记录指定链路上的流量(指定资源从入口资源进来的流量,如果达到阈值,就进行限流)【api级别的针对来源】
流控效果:
快速失败: 直接失败,抛异常
Warm Up: 根据codeFactor(冷加载因子,默认3)的值,从阈值/codeFctor,经过预热时长,才达到设置的QPS阈值
排队等待: 匀速排队,让请求以匀速的速度通过,阈值类型必须设置为QPS,否则无效
接口限流
直接流控模式
新增流控规则
资源名指的是我们的接口地址,QPS设置为1,其他都选择默认值。保存后,我们测试接口调用。
第一次请求是正常响应的。
接下来我们快速请求接口,一秒钟点击多次
发现已经被限流了。
关联流控模式
当关联的资源达到阈值时,就限流自己,也就是说关联的资源(接口),QPS为1时,一秒内被多次请求的时候,自己的接口就会被限流。
如图所示,hello/addOrder 接口并发请求,hello/getOrder接口就被限流了。
链路流控模式
链路流控模式(Chain Mode)是 Sentinel 提供的一种流控模式,主要用于控制资源在特定调用链路上的访问频率。与一般的直接流控模式不同,链路流控模式通过定义调用链路来实现更细粒度的流量控制。这对于复杂的分布式系统中,尤其是微服务架构中,控制不同调用路径的流量非常有用。
主要概念
在链路流控模式下,流控规则会对特定的调用链路进行控制。调用链路通常由一个入口资源和一个目标资源组成,表示从入口资源到目标资源的一条特定调用路径。
使用场景
同一资源多入口:当一个资源可以通过多个入口访问时,可以针对不同入口设置不同的流控规则。
细粒度流控:对于某些关键资源,可以根据不同的调用链路进行更细粒度的流量控制,从而实现精细化管理。
示例:
假设有一个系统,其中有一个服务 orderService,它可以通过两个不同的入口资源 getOrder 和 getOrder2 被调用。我们希望限制通过 getOrder2 入口对 orderService 的调用频率。
4、@SentinelResource注解
@SentinelResource 是 Sentinel 提供的一个注解,用于定义资源并为其配置流控、熔断等规则。在方法上使用 @SentinelResource 注解,可以实现对该方法的流控、降级以及异常处理等功能。
基本用法
@SentinelResource 的基本属性包括 value、blockHandler、fallback 等。以下是它的常用属性及使用示例:
1. value(必填)
描述: 指定资源名称。该名称将作为 Sentinel 的资源标识,用于进行流控和降级保护。
类型: String
2. blockHandler
描述: 指定当资源被流控(如限流、降级)时的处理方法。该方法必须与原方法在同一个类中,或者在公共类中。方法签名要求一致,并且最后一个参数必须是 BlockException。
类型: String
3. blockHandlerClass
描述: 指定 blockHandler 所在类。如果 blockHandler 方法不在同一个类中,可以通过 blockHandlerClass 指定类。
类型: Class<?>
4. fallback
描述: 指定当资源执行发生异常时的处理方法。方法签名要求与原方法一致,或者额外带一个 Throwable 类型的参数用于接收异常。
类型: String
5. fallbackClass
描述: 指定 fallback 所在类。如果 fallback 方法不在同一个类中,可以通过 fallbackClass 指定类。
类型: Class<?>
6. defaultFallback
描述: 指定通用的默认降级方法,当未指定 fallback 方法或 fallback 方法不可用时,调用此方法。方法必须是静态的,且返回类型与原方法一致。
类型: String
7. exceptionsToIgnore
描述: 指定不会触发 fallback 处理的异常列表。
类型: Class<? extends Throwable>[]
8. exceptionsToTrace
描述: 指定会触发 fallback 处理的异常列表。默认情况下,所有的异常都会触发 fallback。
类型: Class<? extends Throwable>[]
使用示例
示例1:
在这个示例中,当访问 /hello 接口时,若触发了流控规则,handleBlock 方法会被调用返回处理结果。helloResource指的就是流控规则的资源名
import com.alibaba.csp.sentinel.annotation.SentinelResource;
import com.alibaba.csp.sentinel.slots.block.BlockException;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
public class HelloController {@GetMapping("/hello")@SentinelResource(value = "helloResource", blockHandler = "handleBlock")public String hello() {return "Hello, Sentinel!";}public String handleBlock(BlockException ex) {return "请求已被阻止!";}
}
示例2:
当 /test 接口在执行过程中抛出异常时,会调用 fallbackMethod 方法进行处理。
import com.alibaba.csp.sentinel.annotation.SentinelResource;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
public class FallbackController {@GetMapping("/test")@SentinelResource(value = "testResource", fallback = "fallbackMethod")public String test() {if (Math.random() > 0.5) {throw new RuntimeException("出错");}return "成功";}public String fallbackMethod(Throwable ex) {return "Fallback: " + ex.getMessage();}
}
示例3:
在这个例子中,当资源触发流控时,将调用 ExternalHandler 类中的 externalBlockHandler 方法进行处理。
import com.alibaba.csp.sentinel.annotation.SentinelResource;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
public class ExternalHandlerController {@GetMapping("/external")@SentinelResource(value = "externalResource", blockHandler = "externalBlockHandler", blockHandlerClass = ExternalHandler.class)public String external() {return "这是个示例";}
}class ExternalHandler {// 必须为静态方法public static String externalBlockHandler(BlockException ex) {return "请求已被阻止";}
}
注意事项
blockHandler 和 fallback 方法的签名要求: 这些方法必须和原方法签名一致,blockHandler 方法额外需要接收一个 BlockException 参数,而 fallback 方法可以选择性地接收一个 Throwable 参数。
defaultFallback: 作为全局降级处理方法,必须是 public static 方法,并且参数和返回类型与原方法一致。
处理类的类加载顺序: 如果使用 blockHandlerClass 或 fallbackClass 指定外部类,这些类必须在项目启动时能够被加载。
总结
本文介绍了 Sentinel 的核心功能及其在 Spring Cloud 中的集成和使用。Sentinel 提供了丰富的流量控制和系统保护功能,帮助开发者提升系统的容错能力和稳定性。希望通过本文的学习,能够帮助你更好地理解和使用 Sentinel,提升微服务项目的稳定性和容错能力。
相关文章:

SpringCloud Alibaba 微服务(四):Sentinel
目录 前言 一、什么是Sentinel? Sentinel 的主要特性 Sentinel 的开源生态 二、Sentinel的核心功能 三、Sentinel 的主要优势与特性 1、丰富的流控规则 2、完善的熔断降级机制 3、实时监控和控制台 4、多数据源支持 5、扩展性强 四、Sentinel 与 Hystrix …...
Python 3.12新功能(1)
Python 3.12正式发布已经很久了,我才将主要电脑的Python版本从3.11升级到最新。最近刚好工作没有那么紧张了,就来领略下这个最新版本中的新特性。 改善了错误消息 Python作为一门编程语言,简单易学容易上手,童叟无欺,深…...

c++STL容器中vector的使用,模拟实现及迭代器使用注意事项和迭代器失效问题
目录 前言: 1.vector的介绍及使用 1.2 vector的使用 1.2 1 vector的定义 1.2 2 vector iterator(迭代器)的使用 1.2.3 vector 空间增长问题 1.2.4 vector 增删查改 1.2.5vector 迭代器失效问题。 2.vector模拟实现 2.1 std::vect…...
Android笔试面试题AI答之Activity常见考点
Activity的常见考点可以总结如下: 生命周期管理:理解Activity在不同情况下(如屏幕旋转、配置更改、用户操作等)的生命周期变化,包括但不限于onCreate、onStart、onResume、onPause、onStop和onDestroy等回调方法。 启…...

RK3568笔记四十九:W25Q64驱动开发(硬件SPI1)
若该文为原创文章,转载请注明原文出处。 一、SPI介绍 串行外设接口 (Serial Peripheral interface) 简称 SPI,是一种高速的,全双工,同步的通信总线,并 且在芯片的管脚上只占用四根线,节约了芯片的管脚。 …...

TypeScript 定义不同的类型(详细示例)
还是大剑师兰特:曾是美国某知名大学计算机专业研究生,现为航空航海领域高级前端工程师;CSDN知名博主,GIS领域优质创作者,深耕openlayers、leaflet、mapbox、cesium,canvas,webgl,ech…...

[工具推荐]前端加解密之Burp插件Galaxy
如果觉得该文章有帮助的,麻烦师傅们可以搜索下微信公众号:良月安全。点个关注,感谢师傅们的支持。 免责声明 本号所发布的所有内容,包括但不限于信息、工具、项目以及文章,均旨在提供学习与研究之用。所有工具安全性…...

课题项目结题测试的作用
课题项目结题测试是课题项目研究过程中的一个重要环节,它对于确保课题项目的质量和成果具有重要的作用。本文将详细介绍课题项目结题测试的作用。 一、确保课题项目质量 课题项目结题测试是对课题项目研究成果的全面评估和检测。通过结题测试,可以对课…...

中国工商银行长春分行开展“工驿幸福 健康财富”长辈客群康养活动
中国工商银行长春分行作为国有大行,持续完善有温度、专业化、安全稳健的养老场景服务,以工行驿站为依托、以长辈客群养老需求为中心,积极对接社区构建敬老、康养的“金融泛金融”工行驿站服务生态,进一步提升长辈客群的到店体验。…...
机器学习 第十四章
目录 前言 一、隐马尔可夫模型 二、马尔可夫随机场 三、条件随机场 四、学习和推断 1.变量消去 2.信念传播 五、近似推断 1.MCMC采样 2.变分推断 六、话题模型 总结 前言 机器学习最重要的任务是根据一些已观察到的证据来对感兴趣的未知变量进行估计和推测。概率模…...

未来RPA财税的发展前景
近年来,全球数字化进程持续提速,越来越多企业受到效率及运营成本的压力,正努力寻求企业增长发展的新路径,而财务作为企业战略的“大脑”,成为企业数字化转型的重要突破口。RPA技术由于能够自动化各种重复性和繁琐的任务…...

快速设置 terminator 透明背景
看图,按步骤设置后⭐重启一个终端则为透明效果 效果展示:...

Redis+Unity 数据库搭建
游戏中需要存放排行榜等数据,而且是实时存放,所以就涉及到数据库的问题。这里找服务器大神了解到可以用Redis来做存储,免费的效率极高。 Redis的搭建参考上文的文章,同时也感谢这位网友。 搭建Redis 并测试数据 搭建Redis 1.下…...
WebTracing:如何使用一款SDK实现前端全链路监控
引言 在产品的开发和运营过程中我们经常会遇到一些问题,如用户反馈说无法对某某商品下单,而另一位负责运营的同事也提到某某广告在手机上打不开。尽管这些问题被多次报告,但我们却难以复现这些故障,这让团队感到十分棘手。如何有效地记录项目中的错误并能够重现这些问题,…...

【Story】编程迷航:从 “ 我怎么才学会 ? ” 到 “ 我怎么这么厉害 ! ”
目录 大学生编程入门指南:选择语言、制定计划与避坑技巧1. 选择适合的编程语言1.1 Python1.2 Java1.3 C/C1.4 JavaScript1.5 SQL 2. 制定有效的学习计划2.1 设定明确的目标2.2 制定学习时间表2.3 选择学习资源2.4 实践和项目 3. 避免常见学习陷阱3.1 避免过度焦虑3.…...

基于“日志审计应用”的 DNS 日志洞察实践
作者:羿莉 (萧羿) 基础背景 DNS(Domain Name System) [ 1] 是任何网络活动的基础。它将易于记忆的域名转换为机器能够理解的 IP 地址。监控 DNS 服务可以帮助用户识别网络活动并保持系统安全。出于合规和安全性的考虑,公司通常要求对网络日志进行存储和…...
大学按照学科类别、办学层次、教育性质分类有哪些?创龙教仪一文带您了解
大学的分类多种多样,主要可以从学科类别、办学层次、教育性质等方面进行划分。 一、按学科类别划分 综合类大学 特点:学科门类齐全,文理渗透,科研实力强。 优势:拥有较多的国家级重点学科和实验室,师资…...

数据结构与算法 - 递归
一、递归 1. 概述 定义:在计算机科学中,递归是一种解决计算问题的方法,其中解决方案取决于同一类问题的更小子集。 比如单链表递归遍历的例子: void f(Node node) {if(node null) {return;}println("before:" node…...

python:plotly 网页交互式数据可视化工具
pip install plotly plotly-5.22.0-py3-none-any.whl pip install plotly_express 包含:GDP数据、餐厅的订单流水数据、鸢尾花 Iris数据集 等等 pip show plotly Name: plotly Version: 5.22.0 Summary: An open-source, interactive data visualization librar…...

聊一聊 webpack5性能优化有哪些?
介绍 此文章基于webpack5来阐述 webpack性能优化较多,可以对其进行分类 优化打包速度,开发或者构建时优化打包速度(比如exclude、catch等)优化打包后的结果,上线时的优化(比如分包处理、减小包体积、CDN…...

《从零掌握MIPI CSI-2: 协议精解与FPGA摄像头开发实战》-- CSI-2 协议详细解析 (一)
CSI-2 协议详细解析 (一) 1. CSI-2层定义(CSI-2 Layer Definitions) 分层结构 :CSI-2协议分为6层: 物理层(PHY Layer) : 定义电气特性、时钟机制和传输介质(导线&#…...
1688商品列表API与其他数据源的对接思路
将1688商品列表API与其他数据源对接时,需结合业务场景设计数据流转链路,重点关注数据格式兼容性、接口调用频率控制及数据一致性维护。以下是具体对接思路及关键技术点: 一、核心对接场景与目标 商品数据同步 场景:将1688商品信息…...
Nginx server_name 配置说明
Nginx 是一个高性能的反向代理和负载均衡服务器,其核心配置之一是 server 块中的 server_name 指令。server_name 决定了 Nginx 如何根据客户端请求的 Host 头匹配对应的虚拟主机(Virtual Host)。 1. 简介 Nginx 使用 server_name 指令来确定…...
python爬虫:Newspaper3k 的详细使用(好用的新闻网站文章抓取和解析的Python库)
更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 一、Newspaper3k 概述1.1 Newspaper3k 介绍1.2 主要功能1.3 典型应用场景1.4 安装二、基本用法2.2 提取单篇文章的内容2.2 处理多篇文档三、高级选项3.1 自定义配置3.2 分析文章情感四、实战案例4.1 构建新闻摘要聚合器…...

sipsak:SIP瑞士军刀!全参数详细教程!Kali Linux教程!
简介 sipsak 是一个面向会话初始协议 (SIP) 应用程序开发人员和管理员的小型命令行工具。它可以用于对 SIP 应用程序和设备进行一些简单的测试。 sipsak 是一款 SIP 压力和诊断实用程序。它通过 sip-uri 向服务器发送 SIP 请求,并检查收到的响应。它以以下模式之一…...
LangChain知识库管理后端接口:数据库操作详解—— 构建本地知识库系统的基础《二》
这段 Python 代码是一个完整的 知识库数据库操作模块,用于对本地知识库系统中的知识库进行增删改查(CRUD)操作。它基于 SQLAlchemy ORM 框架 和一个自定义的装饰器 with_session 实现数据库会话管理。 📘 一、整体功能概述 该模块…...

【Redis】笔记|第8节|大厂高并发缓存架构实战与优化
缓存架构 代码结构 代码详情 功能点: 多级缓存,先查本地缓存,再查Redis,最后才查数据库热点数据重建逻辑使用分布式锁,二次查询更新缓存采用读写锁提升性能采用Redis的发布订阅机制通知所有实例更新本地缓存适用读多…...

【 java 虚拟机知识 第一篇 】
目录 1.内存模型 1.1.JVM内存模型的介绍 1.2.堆和栈的区别 1.3.栈的存储细节 1.4.堆的部分 1.5.程序计数器的作用 1.6.方法区的内容 1.7.字符串池 1.8.引用类型 1.9.内存泄漏与内存溢出 1.10.会出现内存溢出的结构 1.内存模型 1.1.JVM内存模型的介绍 内存模型主要分…...

永磁同步电机无速度算法--基于卡尔曼滤波器的滑模观测器
一、原理介绍 传统滑模观测器采用如下结构: 传统SMO中LPF会带来相位延迟和幅值衰减,并且需要额外的相位补偿。 采用扩展卡尔曼滤波器代替常用低通滤波器(LPF),可以去除高次谐波,并且不用相位补偿就可以获得一个误差较小的转子位…...
深度剖析 DeepSeek 开源模型部署与应用:策略、权衡与未来走向
在人工智能技术呈指数级发展的当下,大模型已然成为推动各行业变革的核心驱动力。DeepSeek 开源模型以其卓越的性能和灵活的开源特性,吸引了众多企业与开发者的目光。如何高效且合理地部署与运用 DeepSeek 模型,成为释放其巨大潜力的关键所在&…...