Spring Cloud Alibaba 实战:Sentinel 保障微服务的高可用性与流量防护
1.1 Sentinel 作用
Sentinel 是阿里巴巴开源的一款 流量控制和熔断降级 框架,主要用于:
- 流量控制:限制 QPS,防止流量暴增导致系统崩溃
- 熔断降级:当某个服务不可用时自动降级,避免故障扩散
- 热点参数限流:根据参数值进行精细化流控(例如 VIP 用户限流策略)
- 系统自适应保护:根据系统负载自动调整限流规则
- 授权规则:根据来源服务进行限流
- API 网关防护:结合 Spring Cloud Gateway 保护微服务
1.2 Sentinel 核心概念
| 概念 | 说明 |
|---|---|
| 资源 (Resource) | 需要保护的代码逻辑(如方法、API) |
| 规则 (Rule) | 限流、熔断等策略 |
| 流控 (Flow Control) | 限制 QPS、线程数等 |
| 熔断 (Circuit Breaker) | 基于响应时间或错误比率触发熔断 |
| 热点限流 (Hot Param Flow) | 针对特定参数进行限流 |
| 系统规则 (System Rule) | 保护系统整体资源 |
| 授权规则 (Authority Rule) | 根据请求来源控制访问 |
2. 引入 Sentinel 依赖
在 pom.xml 中添加 Sentinel 依赖:
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>
Spring Boot 自动整合 Sentinel,无需额外配置。
3. 启动 Sentinel 控制台
3.1 下载并运行 Sentinel 控制台
- 下载 Sentinel Dashboard
wget https://github.com/alibaba/Sentinel/releases/download/1.8.6/sentinel-dashboard-1.8.6.jar - 启动控制台
java -jar sentinel-dashboard-1.8.6.jar - 访问 Sentinel 控制台
- URL:
http://localhost:8080 - 默认账号:
sentinel - 默认密码:
sentinel
- URL:
4. 配置 Sentinel
在 application.yml 添加 Sentinel 连接控制台:
spring:application:name: sentinel-democloud:sentinel:transport:dashboard: localhost:8080port: 8719 # 本地 Sentinel 客户端通信端口
这样,Sentinel 客户端会自动向控制台注册。
5. 流量控制
流控规则可以基于 QPS、线程数 等方式进行限流。
5.1 代码示例
在 SentinelController.java 创建受保护的接口:
@RestController
public class SentinelController {@GetMapping("/test")@SentinelResource(value = "testResource", blockHandler = "handleBlock")public String test() {return "Hello Sentinel";}// 限流时的处理方法public String handleBlock(BlockException ex) {return "请求被限流";}
}
5.2 配置流控规则
在 Sentinel 控制台 添加流控规则:
- 资源名称:
testResource - 流控模式:QPS
- 阈值:1(超过 1 QPS 就触发限流)
- 流控效果:直接拒绝
测试:
ab -n 10 -c 2 http://localhost:8080/test
如果请求过多,就会返回 "请求被限流"。
6. 熔断降级
Sentinel 支持基于:
- RT(响应时间):如果平均响应时间超过阈值,就会熔断。
- 异常比例:如果异常请求占比超过阈值,就会熔断。
- 异常数:一定时间内异常数超过阈值,就会熔断。
6.1 代码示例
@RestController
public class CircuitBreakerController {@GetMapping("/slow")@SentinelResource(value = "slowService", fallback = "fallbackMethod")public String slowService() throws InterruptedException {Thread.sleep(2000);return "Slow Service";}// 降级处理public String fallbackMethod(Throwable t) {return "降级:服务不可用";}
}
6.2 Sentinel 控制台配置
- 资源名称:
slowService - 熔断策略:响应时间
- RT 阈值:1000ms(如果超过 1s,就会熔断)
7. 热点参数限流
针对某个 URL 参数进行限流,例如:
@RestController
public class HotParamController {@GetMapping("/paramLimit")@SentinelResource(value = "hotParam", blockHandler = "handleHotParam")public String hotParam(@RequestParam String type) {return "Access type: " + type;}public String handleHotParam(String type, BlockException ex) {return "请求被限流:" + type;}
}
Sentinel 控制台配置
- 资源名称:
hotParam - 限流方式:按参数
- 参数1:
type=vip,QPS 限制 1
测试:
curl "http://localhost:8080/paramLimit?type=vip"
8. 结合 Nacos 进行规则动态推送
在 application.yml 配置:
spring:cloud:sentinel:datasource:flow:nacos:server-addr: localhost:8848data-id: sentinel-rulesgroup-id: DEFAULT_GROUPrule-type: flow
在 Nacos 配置 sentinel-rules:
[{"resource": "testResource","limitApp": "default","grade": 1,"count": 2,"strategy": 0,"controlBehavior": 0}
]
这样 Sentinel 规则可以动态调整,无需重启服务。
9. 监控 API 网关
Sentinel 结合 Spring Cloud Gateway 保护 API 网关:
spring:cloud:gateway:routes:- id: service1uri: lb://service1predicates:- Path=/service1/**filters:- name: Sentinel
在 Sentinel 控制台可以查看 API 访问流量。
10. 总结
| 功能 | 说明 |
|---|---|
| 流量控制 | 限制 QPS、线程数,防止瞬时流量过载 |
| 熔断降级 | 避免错误扩散,提高系统稳定性 |
| 热点限流 | 只对特定参数进行限流 |
| 动态规则 | 结合 Nacos 实现规则热更新 |
| API 网关保护 | 结合 Spring Cloud Gateway 保护微服务 |
🔥 如果这篇文章有帮助,欢迎 点赞、收藏、评论,你的支持是我持续更新的动力!🚀
相关文章:
Spring Cloud Alibaba 实战:Sentinel 保障微服务的高可用性与流量防护
1.1 Sentinel 作用 Sentinel 是阿里巴巴开源的一款 流量控制和熔断降级 框架,主要用于: 流量控制:限制 QPS,防止流量暴增导致系统崩溃熔断降级:当某个服务不可用时自动降级,避免故障扩散热点参数限流&…...
大数据技术在土地利用规划中的应用分析
大数据技术在土地利用规划中的应用分析 一、引言 土地利用规划是对一定区域内的土地开发、利用、整治和保护所作出的统筹安排与战略部署,对于实现土地资源的优化配置、保障社会经济的可持续发展具有关键意义。在当今数字化时代,大数据技术凭借其海量数据处理、高效信息挖掘等…...
MoonSharp 文档三
MoonSharp 文档一-CSDN博客 MoonSharp 文档二-CSDN博客 MoonSharp 文档四-CSDN博客 MoonSharp 文档五-CSDN博客 7.Proxy objects(代理对象) 如何封装你的实现,同时又为脚本提供一个有意义的对象模型 官方文档:MoonSharp 在实际…...
linux和windows之间的复制
第一步 sudo apt-get autoremove open-vm-tools第二步 sudo apt-get update第三步 sudo apt-get install open-vm-tools-desktop按y 第四步 重启虚拟机,终端下输入 rebootLinux下 按“ CtrlShiftC V ”复制粘贴 Windows下按“ Ctrl C V ”复制粘贴...
在资源有限中逆势突围:从抗战智谋到寒门高考的破局智慧
目录 引言 一、历史中的非对称作战:从李牧到八路军的智谋传承 李牧戍边:古代军事博弈中的资源重构 八路军的游击战:现代战争中的智慧延续 二、创业界的逆袭之道:小米与拼多多的资源重构 从MVP到杠杆解 社交裂变与资源错配 …...
Ubuntu 22.04 无法进入图形界面的解决方法
Ubuntu 22.04 无法进入图形界面,只能进入 tty,可能是由于图形界面相关的配置或驱动程序出现了问题。以下是一些常见的解决方法: 1. 检查图形界面服务状态 首先,检查图形界面服务(通常是 gdm 或 lightdm)的…...
Python中很常用的100个函数整理
Python 内置函数提供了强大的工具,涵盖数据处理、数学运算、迭代控制、类型转换等。本文总结了 100 个常用内置函数,并配备示例代码,提高编程效率。 1. abs() 取绝对值 print(abs(-10)) # 10 2. all() 判断所有元素是否为真 print(all([…...
javascript-es6 (六)
编程思想 面向过程 面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候再一个一个的依次 调用就可以了 就是按照我们分析好了的步骤,按照步骤解决问题 面向对象 面向对象是把事务分解成为一个个对象&…...
大模型微调技术基础(一)
文章目录 GPT与BERT的差异GPT(Decoder架构)优点缺点 BERT(Encoder架构)优点缺点 总结 LoRA低参数大模型与全参数小模型表现对比分析LoRA(Low-Rank Adaptation)技术详解1. LoRA 核心原理2. 应用场景3. 简单代…...
Spring AI 1.0.0 M6新特性MCP
Spring AI 1.0.0 M6新特性MCP 前言一、MCP是什么?(Model Context Protocol)二、它的发展历程三、核心架构四、MCP Java SDK的核心能力Java MCP实现遵循三层架构:MCP客户端MCP服务器总结MCP 的核心能力总结多种传输选项 搭建服务端…...
【时时三省】(C语言基础)赋值表达式和赋值语句和变量赋初值
山不在高,有仙则名。水不在深,有龙则灵。 ----CSDN 时时三省 赋值表达式和赋值语句 在C程序中,赋值语句是用得最多的语句。实际上,C语言的赋值语句属于表达式语句,由一个赋值表达式加一个分号组成。其他一些高级语言…...
Room数据库的使用
一、room的引用导入 1、在app的gradle中引入 plugins {//这个ksp 一定要对应相关的 kotlin 版本,不然会一直报错i的---id("com.google.devtools.ksp") version "1.9.0-1.0.13" apply false } 2、在model的gradle中引入 plugins {id("com.g…...
【性能测试入门_01性能测试jmeter基础实操场景详解】
一、应用项目如何部署在服务器上 可以将项目进行打jar包 双击install,控制台就会打印打包的过程 最终打的包,会存放在打印的那个路径下 这个jar包,就是开发人员开发好,直接可以部署的 可以通过命令,在终端直接启动这…...
SpringBoot加载配置文件的优先级
在 SpringBoot 应用中,配置文件的加载顺序(优先级)决定了不同来源的配置属性如何覆盖彼此,但是,在实践中,也会经常遇到。下面文章将分析 SpringBoot 配置文件加载的优先级,从高到低排列。 文章目…...
跨越时空的对话:图灵与GPT-4聊AI的前世今生
(背景:虚拟咖啡厅,图灵身着1950年代西装,端着一杯热茶,GPT-4以全息投影形态坐在对面) 图灵(喝了口茶):“听说你能写诗?我当年在布莱切利园破解Enigma时&…...
如何通过 Seatunnel 实现 MySQL 到 OceanBase的数据迁移同步
1. 准备传输工具 本方案采用 Apache Seatunnel(简称seatunnel)进行MySQL 到 OceanBase 的数据迁移和同步,出于对方案轻量性的考量,我们采用其内置的Zeta引擎来实现,包括全量同步、离线增量同步,以及CDC方案…...
C++20 新特性总结
简要总结 C20 引入了四项非常大的更新, 分别是: 概念(Concepts). 用来简化模板编程, 强化表达能力. 并且使得出错原因更容易查找.模块(Modules). 这是代码组织方面非常大的更新. 提供了新的方式来组织代码, 并且可以减少编译时间.范围库(Ranges and Views). 轻量级的, 非拥有…...
软件设计模式之简单工厂模式
目录 一.类图(手机生产) 二.代码实现 Iphone类: Vivo类: Mobile类: MobileFactory类: Client类: 一.类图(手机生产) 补充:MobileFactory也可以直接指向…...
内网激活JRebel插件(无网络环境)
1.官网下载安装包,JRebel and XRebel JRebel and XRebel - IntelliJ IDEs Plugin | Marketplace 2.以IInstall Plugin from Disk的方式读取 3.运行JrebelServer.jar 终端输入: java -jar JrebelServer.jar -p 8080 (默认8080端口)服务会自动打开浏览器至 http:/…...
LiveGBS流媒体平台GB/T28181常见问题-视频流安全控制HTTP接口鉴权勾选流地址鉴权后401Unauthorized如何播放调用接口流地址校验
LiveGBS流媒体平台GB/T28181常见问题频流安全控制HTTP接口鉴权勾选流地址鉴权后401Unauthorized如何播放调用接口流地址校验? 1、安全控制1.1、HTTP接口鉴权1.2、流地址鉴权 2、401 Unauthorized2.1、携带token调用接口2.1.1、获取鉴权token2.1.2、调用其它接口2.1.…...
Java 大视界 -- 区块链赋能 Java 大数据:数据可信与价值流转(84)
💖亲爱的朋友们,热烈欢迎来到 青云交的博客!能与诸位在此相逢,我倍感荣幸。在这飞速更迭的时代,我们都渴望一方心灵净土,而 我的博客 正是这样温暖的所在。这里为你呈上趣味与实用兼具的知识,也…...
接口自动化入门 —— Http的请求头,请求体,响应码解析!
在接口自动化测试中,HTTP请求头、请求体和响应码是核心组成部分。理解它们的作用、格式和解析方法对于进行有效的接口测试至关重要。以下是详细解析: 1. HTTP 请求头(Request Header) 1.1 作用 请求头是客户端向服务器发送的附加…...
upload-labs(1-20)详解(专业版)
目录 第1关 第2关 第3关 第4题 第5题 第6题 第7题 第8题 第9题 第10题 第11题 第12题 第13题 第1关 查看源码 在第一关是一个前端js的一个后缀识别:当不为jpg、png、gif时候出现弹窗 检查源码 将return checkFile() 改为 return ture 就可以将php顺利…...
Linux 生成静态库
文章目录 前提小知识生成和使用.a库操作步骤 在应用程序中,有一些公共的代码需要反复使用的,可以把这些代码制作成“库文件”;在链接的步骤中,可以让链接器在“库文件”提取到我们需要使用到的代码,复制到生成的可执行…...
ARMV8的64位指令
一、介绍 ARMv8 体系结构最大的改变是增加了一个新的 64 位的指令集,这是早前 ARM 指令集 的有益补充和增强。它可以处理 64 位宽的寄存器和数据并且使用 64 位的指针来访问内存。这 个新的指令集称为 A64 指令集,运行在 AArch64 状态。 ARMv8 兼容旧的…...
【git】 贮藏 stash
贮藏是我在sourcetree上看到的名词。之前只是浅浅的用来收藏一下修改的文件,没有完整的使用过。今天有幸使用了一次就来展开说说。 使用原因就不赘述了,错误的操作少提为好,操作步骤如下: 查看贮藏列表git stash list #输出&…...
ctf-web: php原生类利用 -- GHCTF Popppppp
源代码 <?php error_reporting(0); class CherryBlossom { public $fruit1; public $fruit2; public function __construct($a) {$this->fruit1 $a; } function __destruct() { echo $this->fruit1; } public function __toString() { $newFunc …...
PawSQL for TDSQL:腾讯云TDSQL数据库性能优化全攻略
TDSQL 作为腾讯云推出的分布式数据库,凭借其高扩展性、高可用性和高性能等优势,广泛应用于金融、互联网、政务等领域。随着业务的不断增长和数据量的爆炸式增长,如何优化 TDSQL 数据库的性能,成为众多企业和开发者面临的挑战。本文…...
202250311-WINDOWS本地4G显存Docker运行vLLM
前置: 需要去huggingface注册账号获取token:HUGGING_FACE_HUB_TOKEN 运行vLLM docker run --name LocalvLLM_qwen1.5B_Int4 --runtime nvidia --gpus all -v D:/vLLM/.cache/huggingface:/root/.cache/huggingface --env "HUGGING_FAC…...
Scala 中生成一个RDD的方法
在 Scala 中,生成 RDD(弹性分布式数据集)的主要方法是通过 SparkContext(或 SparkSession)提供的 API。以下是生成 RDD 的常见方法: 1. 从本地集合创建 RDD 使用 parallelize 方法将本地集合(如…...
