首页/新闻资讯/正文详情

spring cloud alibaba (4)-sentinel实现容错

发布时间:2026/9/27 9:29:27 来源:云帆数科 栏目:资讯中心
spring cloud alibaba (4)-sentinel实现容错
0.背景Sentinel 是由阿里巴巴中间件团队开发的开源项目是一种面向分布式微服务架构的轻量级高可用流量控制组件。Sentinel是对 Hystrix的进一步优化和Sentinel的对比如下Sentinel 分为两个部分:核心库Java 客户端 不依赖任何框架/库能够运行于所有 Java 运行时环境同时对 Dubbo / Spring Cloud 等框架也有较好的支持。控制台Dashboard 基于 Spring Boot 开发打包后可以直接运行不需要额外的 Tomcat 等应用容器。1.Sentinel的安装与使用sentinel下载地址https://github.com/alibaba/Sentinel/releases如果上面下载比较慢的话可以用下面的网盘(1) 百度网盘通过网盘分享的文件sentinel-dashboard-1.8.6.jar链接: https://pan.baidu.com/s/1e2EYtHBcCnAjX2y4HuB2GQ?pwdfiae 提取码: fiae2夸克网盘我用夸克网盘给你分享了「sentinel-dashboard-1.8.6.jar」点击链接或复制整段内容打开「夸克APP」即可获取。/50a33b6kh1链接https://pan.quark.cn/s/b3d407a865c9?pwdUBqv提取码UBqv下载后我们来到下载后的目录在这个目录中 shift右击 打开powershell窗口然后输入下面的指令java-jarsentinel-dashboard-1.8.6.jar注意这个jar包用的8080端口其他项目不要占用8080端口。然后浏览器里输入 http://localhost:8080 打开sentinel 窗口。用户名和密码都是sentinel。 登录成功看到下面界面2.创建演示模块我们在原来的项目上单独创建一个新模块用来演示sentinel的功能。我们首先在 父模块引入sentinel!-- sentinel依赖 --dependencygroupIdcom.alibaba.cloud/groupIdartifactIdspring-cloud-starter-alibaba-sentinel/artifactIdversion2021.0.5.0/versiontypepom/typescopeimport/scope/dependency然后我们创建一个新的module命名为sentinel。POM文件参考如下?xml version1.0 encodingUTF-8?projectxmlnshttp://maven.apache.org/POM/4.0.0xmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsdparentartifactIds-cloud-alibaba/artifactIdgroupIdsite.longkui/groupIdversion0.0.1-SNAPSHOT/version/parentmodelVersion4.0.0/modelVersionartifactIdsentinel/artifactIddependencies!--spring boot web--dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactId/dependency!--nacos服务发现--dependencygroupIdcom.alibaba.cloud/groupIdartifactIdspring-cloud-starter-alibaba-nacos-discovery/artifactIdexclusionsexclusiongroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-starter-netflix-ribbon/artifactId/exclusion/exclusions/dependency!--openfeign --dependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-starter-openfeign/artifactId/dependency!--引入sentinel--dependencygroupIdcom.alibaba.cloud/groupIdartifactIdspring-cloud-starter-alibaba-sentinel/artifactId/dependency/dependencies/project在resources下创建application.yml文件里面内容参考如下server: port:8400#服务的端口#spring相关配置spring: application: name: service-sentinel#服务的名称cloud: nacos: discovery: server-addr: localhost:8848 sentinel: transport: dashboard: localhost:8080#配置Sentinel dashboard地址#应用与Sentinel控制台交互的端口应用本地会起一个该端口占用的HttpServer,#默认8719端口假如被占用会自动从8719开始依次1扫描,直至找到未被占用的端口port:8719创建主启动类packagesite.longkui;importorg.springframework.boot.SpringApplication;importorg.springframework.boot.autoconfigure.SpringBootApplication;importorg.springframework.cloud.client.discovery.EnableDiscoveryClient;EnableDiscoveryClientSpringBootApplicationpublicclasssentinel{publicstaticvoidmain(String[]args){SpringApplication.run(sentinel.class,args);}}创建controller层代码packagesite.longkui.controller;importorg.springframework.web.bind.annotation.GetMapping;importorg.springframework.web.bind.annotation.RequestMapping;importorg.springframework.web.bind.annotation.RestController;RestControllerRequestMapping(/sentinel)publicclassSentinelController{GetMapping(/testA)publicStringtestA(){returnIm testA;}GetMapping(/testB)publicStringtestB(){returnIm testB;}}然后启动模块首先看一下是否在nacos注册成功。然后访问一下我们创建的测试接口 localhost:8400/sentinel/testA然后我们访问sentinel控制台可以看到正常监控3.测试流控规则我们点击 流控规则创建一个新规则。创建成功对于上面出现的内容的解释如下1.资源名 唯一名称默认请求路径表示对该资源进行流控2.针对来源 Sentinel可以针对调用者进行限流填写微服务名默认default不区分来源3.阈值类型/单击阈值 QPS每秒钟的请求数量当调用该api的QPS达到阈值时进行限流 线程数当调用该线程数达到阈值的时候进行限流4.是否集群不需要集群5.流控模式 直接 api达到限流条件时直接限流 关联 当关联的资源达到阈值时就限流自己 链路 只记录指定链路上的流量指定资源从入口资源进来的流量如果达到阈值就进行限流6.流控效果 快速失败 直接失败抛异常 Warm Up 根据codeFactor冷加载因子默认3的值从阈值/codeFctor经过预热时长才达到设置的QPS阈值 排队等待 匀速排队让请求以匀速的速度通过阈值类型必须设置为QPS否则无效关于QPS和线程数的解释QPS是每秒钟的请求数量而线程数是每秒钟的线程数。举个银行的例子银行要受理业务如果按QPS来说就是每秒让1个客户进门受理按线程数来说就是每秒可以让很多客户进门并且办理业务但是银行只开了1个窗口办理业务(1)流控模式—直接我们上面创建的就是 直接模式1秒钟只能访问一次。如果超过阈值则直接快速失败。上面的效果我们首先慢点击一次发现接口正常然后快速点击发现接口失败最后超过1秒点击发现接口又正常了。2流控模式—关联我们把上面的流控规则改为下面这样上面表示当我们访问testA这个接口时如果超过阈值则testB进行限流。效果如下3流控模式—链路链路表示只从某一条路进行控制。比如下面这样。假设我们创建一个CommonService里面有个findGoods方法。controller层里testA和testB都能访问此方法但是我们只对testA方法进行控制和限流。SentinelResource(goods)public voidfindGoods(){System.out.println(找到货物);}service层全部代码packagesite.longkui.service;importcom.alibaba.csp.sentinel.annotation.SentinelResource;importorg.springframework.stereotype.Service;ServicepublicclassCommonService{//默认情况下是不被Sentinel监控的需要我们自己通过注解来标记要监控SentinelResource(goods)publicStringfindGoods(Stringid){return找到货物id;}}controller层改成下面这样packagesite.longkui.controller;importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.web.bind.annotation.GetMapping;importorg.springframework.web.bind.annotation.RequestMapping;importorg.springframework.web.bind.annotation.RestController;importsite.longkui.service.CommonService;RestControllerRequestMapping(/sentinel)publicclassSentinelController{AutowiredCommonServicecommonService;GetMapping(/testA)publicStringtestA(){StringinfocommonService.findGoods(1);returnIm testA-info;}GetMapping(/testB)publicStringtestB(){StringinfocommonService.findGoods(2);returnIm testB-info;}}然后我们需要修改一下application.yml文件加上下面这样的代码将其配置为 false 即可根据不同的URL 进行链路限流如果不配置将不会生效。web-context-unify:false然后新建 一个规则分别从/sentinel/testA和/sentinel/testB访问goods看下是否进行限制。可以看到/sentinel/testA 接口访问findGoods方法时进行了限流操作直接出现了Whitelabel Error Page而/sentinel/testB接口访问findGoods方法一直刷新的情况下没有出现限流操作。(4)流控效果—warm up上面测试流控模式是结果都是直接失败我们也来测试一下warm up效果。warm up一般指的是 冷/热启动方式或者你理解成高速低速模式就像你在开车一样一开始低速行驶然后突然把油门踩到底那么有可能把车搞坏。正确的做法应该是一步一步提速。我们新建一个接口来测试warm upGetMapping(/testC)publicStringtestC(){System.out.println(newDate());returnIm testC;}然后新建一个规则根据公式我们可以得到开始的阈值是 9/33。也就是1秒3次。然后一开始一秒超过3次就会限流在3秒之内慢慢提升到1秒9次。效果如下可以看到经过3秒余热后再刷新也不能达到1秒9次那接口返回就一直是正常的。(5)流控效果—排队等待排队等待效果会设定 一段时间并发阈值这个方式会严格控制请求通过的间隔时间也就是让请求均匀的通过起到一个整形的作用。我们新增一个流控规则如下上面表示2秒内至多能处理5个请求。我们用接口测试工具间隔100ms一次也就是2秒超过了5次。然后我们看一下后台接口监控情况可以看到在一段时间内的最大峰值就是5。3.测试熔断规则慢调用比例 (SLOW_REQUEST_RATIO)选择以慢调用比例作为阈值需要设置允许的慢调用 RT即最大的响应时间请求的响应时间大于该值则统计为慢调用。当单位统计时长statIntervalMs内请求数目大于设置的最小请求数目并且慢调用的比例大于阈值则接下来的熔断时长内请求会自动被熔断。经过熔断时长后熔断器会进入探测恢复状态HALF-OPEN 状态若接下来的一个请求响应时间小于设置的慢调用 RT 则结束熔断若大于设置的慢调用 RT 则会再次被熔断。异常比例 (ERROR_RATIO)当单位统计时长statIntervalMs内请求数目大于设置的最小请求数目并且异常的比例大于阈值则接下来的熔断时长内请求会自动被熔断。经过熔断时长后熔断器会进入探测恢复状态HALF-OPEN 状态若接下来的一个请求成功完成没有错误则结束熔断否则会再次被熔断。异常比率的阈值范围是 [0.0, 1.0]代表 0% – 100%。异常数 (ERROR_COUNT)当单位统计时长内的异常数目超过阈值之后会自动进行熔断。经过熔断时长后熔断器会进入探测恢复状态HALF-OPEN 状态若接下来的一个请求成功完成没有错误则结束熔断否则会再次被熔断。1测试慢调用比例新建一个熔断规则设置为慢调用比例表示1秒的QPS大于5 并且 这些请求的RT0.1(即最大响应时间) 并且大于比例阈值0.1(10%)的时候触发熔断。且熔断持续2秒。我们每隔100ms请求接口一次查看效果后台监控效果2测试异常比例我们修改测试代码Integerid0;GetMapping(/testC)publicStringtestC(){idid1;if(id5){id0;thrownewRuntimeException(测试异常);}System.out.println(newDate());returnIm testC;}上面的代码表示当id大于5时直接抛出异常然后把id重置为0此时如果没有使用熔断策略那么再次请求这个接口应该是正常返回的但是我们参考下面设置测试异常比例这个表示1秒内超过3秒就会出现异常。并且在达到熔断时长时恢复接口访问。可以看到一开始接口访问正常然后id累计到5开始抛出异常同时id重置为0此时访问页面显示的是Whitelabel Error Page (一闪而过)因为id重置为0的原因此时应该 是访问正常但是我们增加了熔断策略当我们异常比例数据过高时接口开始限流出现Blocked by sentinel。经过熔断时长后接口又可以正常访问了。3异常数异常数表示当单位统计时长内的异常数目超过阈值之后会自动进行熔断。和上面的测试过程没有太大区别一个表示比例一个表示数量。4.测试热点规则参数类型是参数索引对应的类型。比如我们访问/sentinel/testC?id1。这个id就是类型比如常见的int、string等参数值就是对参数的某个值进行参数限流比如nametom表示只对这个tom进行限流其余的不限流。限流阈值在统计时长内超过设定设定值就会被限流。参数索引表示第一个参数默认从下标0开始不考虑参数名字。我们新建一个接口参考如下SentinelResource(testD)GetMapping(/testD)publicStringtestD(RequestParam(name)Stringname){returnIm testD---name;}然后新建一个热点规则其中单机阈值设置10表示testD这个接口不论参数是什么都有一个限制是10在这个基础上分别对两个参数进行限制tom限制阈值是3abc这个参数阈值设置是5。我们分别测试一下可以看到tom和abc分别进行了限制但是ok这个参数没有进行限制。5.系统规则系统保护规则是从应用级别的入口流量进行控制从单台机器的 LOAD、CPU 使用率、平均 RT、入口 QPS 和并发线程数等几个维度监控应用指标让系统尽可能跑在最大吞吐量的同时保证系统整体的稳定性。如果配置了系统规则所有的接口都会被限流。

相关推荐

第249篇_电商预售定金尾款与价保信息采集
第249篇_电商预售定金尾款与价保信息采集

【Python爬虫实战】第249篇:拆解定金膨胀与价保规则——电商预售定金尾款与价保信息采集实战 所属专栏:【Python爬虫实战】从零到企业级爬虫工程师(CSDN 付费专栏) 本篇篇目:第 249 篇(全专栏共规划 300+ 篇,每篇都是一个可独立上手的实战项目) 难度等级:进阶级,需要… · 2026/9/27 9:29:14

深度拆解 axton-obsidian-visual-skills:SKILL.md 如何让 Claude 学会画图(触发词、渐进式披露与 references 架构设计)
深度拆解 axton-obsidian-visual-skills:SKILL.md 如何让 Claude 学会画图(触发词、渐进式披露与 references 架构设计)

深度拆解 axton-obsidian-visual-skills:SKILL.md 如何让 Claude 学会画图(触发词、渐进式披露与 references 架构设计) 【免费下载链接】axton-obsidian-visual-skills Visual Skills Pack for Obsidian: generate Canvas, Excalidraw, and … · 2026/9/27 9:29:14

Media Encoder ME2026保姆级安装教程
Media Encoder ME2026保姆级安装教程

前言 Media Encoder ME2026 是 Adobe 旗下的一款专业视频渲染与媒体处理工具,支持各类音视频格式的转码输出。不管你是在做视频剪辑、后期包装还是批量媒体处理,ME2026 都能帮你把渲染效率提上来。这篇 Media Encoder ME2026安装教程 会把从下载到安装的… · 2026/9/27 9:29:08

微信公众号为什么没法直接订阅?用 wewe-rss 十分钟把第一篇公众号文章推进阅读器
微信公众号为什么没法直接订阅?用 wewe-rss 十分钟把第一篇公众号文章推进阅读器

微信公众号为什么没法直接订阅?用 wewe-rss 十分钟把第一篇公众号文章推进阅读器 【免费下载链接】wewe-rss 🤗更优雅的微信公众号订阅方式,支持私有化部署、微信公众号RSS生成(基于微信读书) 项目地址: https://git… · 2026/9/27 10:16:49

如何三步装好 Jellyfin 桌面客户端:音频直通与硬件解码实战指南
如何三步装好 Jellyfin 桌面客户端:音频直通与硬件解码实战指南

如何三步装好 Jellyfin 桌面客户端:音频直通与硬件解码实战指南 【免费下载链接】jellyfin-desktop Jellyfin Desktop Client 项目地址: https://gitcode.com/GitHub_Trending/je/jellyfin-desktop 浏览器放 4K 总卡顿、5.1 声道出不来?这些浏览器… · 2026/9/27 10:16:49

UVa 12448 Casino Advantage
UVa 12448 Casino Advantage

题目描述 大西洋城的几家赌场正在考虑推出一款新游戏以吸引赌徒。游戏中,一个球被随机滚入一个划分为 NNN 个槽位(编号 111 至 NNN)的轮盘,球停下的槽位编号即为该次滚动的结果。之后取出球,再滚下一个,总共… · 2026/9/27 10:16:43

ebpf-go 的 Windows 支持指南:基于 eBPF for Windows 构建跨平台 Go 应用
ebpf-go 的 Windows 支持指南:基于 eBPF for Windows 构建跨平台 Go 应用

系统底层网络可观测性 【免费下载链接】ebpf ebpf-go is a pure-Go library to read, modify and load eBPF programs and attach them to various hooks in the Linux kernel. 项目地址: https://gitcode.com/gh_mirrors/eb/ebpf 点击查看 免费下载 本指南围绕 eb… · 2026/9/27 10:16:43

TaoToken 统一 API 通道实测:用 STARFlow 的 Transformer 标准化流思路,在潜在空间跑通端到端似然训练
TaoToken 统一 API 通道实测:用 STARFlow 的 Transformer 标准化流思路,在潜在空间跑通端到端似然训练

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/27 10:16:43

漫画网站怎么做:3种方案对比与避坑指南
漫画网站怎么做:3种方案对比与避坑指南

漫画网站怎么做:3种方案对比与避坑指南 很多小伙伴私信问我,手里攒了一堆漫画资源,或者自己会画画,想做个站出来分享或变现,但看着后台代码就头大。自己不会代码想做网站,这确实是最大的拦路虎。别慌,今天我就把这套 避坑指南… · 2026/9/27 10:16:30

MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现
MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现

简介:这套Matlab仿真工具完整呈现雷达信号脉冲压缩过程,从线性调频(LFM)信号生成、目标回波仿真到匹配滤波压缩处理均有可运行代码支撑,面向电子信息工程、计算机、数学等专业学生,适用于课程设计、期末大作… · 2026/9/27 0:00:01

汕头网站建设制作厂家避坑指南:5大注意事项救急
汕头网站建设制作厂家避坑指南:5大注意事项救急

汕头网站建设制作厂家避坑指南:5大注意事项救急 改个需求建站公司拖一周,这种憋屈事我见得太多了。 很多汕头老板找本地建站团队,签合同前看着方案挺美,一上线就变脸。 今天不聊虚的,直接拆解找 汕头网站建设制作厂家 时的5个核心 注意事项… · 2026/9/27 0:00:01

多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习
多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习

简介:基于PyTorch的多模态虚假新闻检测项目完整代码包,面向自然语言处理与计算机视觉交叉方向的开发者、科研人员及毕业设计选题者,解决社交媒体中文本与图像联合识别虚假新闻的问题。系统以BERT预训练模型提取文本语义特征,以Res… · 2026/9/27 0:00:01

MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现
MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现

简介:这套Matlab仿真工具完整呈现雷达信号脉冲压缩过程,从线性调频(LFM)信号生成、目标回波仿真到匹配滤波压缩处理均有可运行代码支撑,面向电子信息工程、计算机、数学等专业学生,适用于课程设计、期末大作… · 2026/9/27 0:00:01

汕头网站建设制作厂家避坑指南:5大注意事项救急
汕头网站建设制作厂家避坑指南:5大注意事项救急

汕头网站建设制作厂家避坑指南:5大注意事项救急 改个需求建站公司拖一周,这种憋屈事我见得太多了。 很多汕头老板找本地建站团队,签合同前看着方案挺美,一上线就变脸。 今天不聊虚的,直接拆解找 汕头网站建设制作厂家 时的5个核心 注意事项… · 2026/9/27 0:00:01

多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习
多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习

简介:基于PyTorch的多模态虚假新闻检测项目完整代码包,面向自然语言处理与计算机视觉交叉方向的开发者、科研人员及毕业设计选题者,解决社交媒体中文本与图像联合识别虚假新闻的问题。系统以BERT预训练模型提取文本语义特征,以Res… · 2026/9/27 0:00:01

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码