当前位置: 首页 > article >正文

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 控制台

  1. 下载 Sentinel Dashboard
    wget https://github.com/alibaba/Sentinel/releases/download/1.8.6/sentinel-dashboard-1.8.6.jar
    
  2. 启动控制台
    java -jar sentinel-dashboard-1.8.6.jar
    
  3. 访问 Sentinel 控制台
    1. URL: http://localhost:8080
    2. 默认账号:sentinel
    3. 默认密码:sentinel

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 支持基于:

  1. RT(响应时间):如果平均响应时间超过阈值,就会熔断。
  2. 异常比例:如果异常请求占比超过阈值,就会熔断。
  3. 异常数:一定时间内异常数超过阈值,就会熔断。

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
  • 限流方式:按参数
  • 参数1type=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 是阿里巴巴开源的一款 流量控制和熔断降级 框架&#xff0c;主要用于&#xff1a; 流量控制&#xff1a;限制 QPS&#xff0c;防止流量暴增导致系统崩溃熔断降级&#xff1a;当某个服务不可用时自动降级&#xff0c;避免故障扩散热点参数限流&…...

大数据技术在土地利用规划中的应用分析

大数据技术在土地利用规划中的应用分析 一、引言 土地利用规划是对一定区域内的土地开发、利用、整治和保护所作出的统筹安排与战略部署,对于实现土地资源的优化配置、保障社会经济的可持续发展具有关键意义。在当今数字化时代,大数据技术凭借其海量数据处理、高效信息挖掘等…...

MoonSharp 文档三

MoonSharp 文档一-CSDN博客 MoonSharp 文档二-CSDN博客 MoonSharp 文档四-CSDN博客 MoonSharp 文档五-CSDN博客 7.Proxy objects&#xff08;代理对象&#xff09; 如何封装你的实现&#xff0c;同时又为脚本提供一个有意义的对象模型 官方文档&#xff1a;MoonSharp 在实际…...

linux和windows之间的复制

第一步 sudo apt-get autoremove open-vm-tools第二步 sudo apt-get update第三步 sudo apt-get install open-vm-tools-desktop按y 第四步 重启虚拟机&#xff0c;终端下输入 rebootLinux下 按“ CtrlShiftC V ”复制粘贴 Windows下按“ Ctrl C V ”复制粘贴...

在资源有限中逆势突围:从抗战智谋到寒门高考的破局智慧

目录 引言 一、历史中的非对称作战&#xff1a;从李牧到八路军的智谋传承 李牧戍边&#xff1a;古代军事博弈中的资源重构 八路军的游击战&#xff1a;现代战争中的智慧延续 二、创业界的逆袭之道&#xff1a;小米与拼多多的资源重构 从MVP到杠杆解 社交裂变与资源错配 …...

Ubuntu 22.04 无法进入图形界面的解决方法

Ubuntu 22.04 无法进入图形界面&#xff0c;只能进入 tty&#xff0c;可能是由于图形界面相关的配置或驱动程序出现了问题。以下是一些常见的解决方法&#xff1a; 1. 检查图形界面服务状态 首先&#xff0c;检查图形界面服务&#xff08;通常是 gdm 或 lightdm&#xff09;的…...

Python中很常用的100个函数整理

Python 内置函数提供了强大的工具&#xff0c;涵盖数据处理、数学运算、迭代控制、类型转换等。本文总结了 100 个常用内置函数&#xff0c;并配备示例代码&#xff0c;提高编程效率。 1. abs() 取绝对值 print(abs(-10)) # 10 2. all() 判断所有元素是否为真 print(all([…...

javascript-es6 (六)

编程思想 面向过程 面向过程就是分析出解决问题所需要的步骤&#xff0c;然后用函数把这些步骤一步一步实现&#xff0c;使用的时候再一个一个的依次 调用就可以了 就是按照我们分析好了的步骤&#xff0c;按照步骤解决问题 面向对象 面向对象是把事务分解成为一个个对象&…...

大模型微调技术基础(一)

文章目录 GPT与BERT的差异GPT&#xff08;Decoder架构&#xff09;优点缺点 BERT&#xff08;Encoder架构&#xff09;优点缺点 总结 LoRA低参数大模型与全参数小模型表现对比分析LoRA&#xff08;Low-Rank Adaptation&#xff09;技术详解1. LoRA 核心原理2. 应用场景3. 简单代…...

Spring AI 1.0.0 M6新特性MCP

Spring AI 1.0.0 M6新特性MCP 前言一、MCP是什么&#xff1f;&#xff08;Model Context Protocol&#xff09;二、它的发展历程三、核心架构四、MCP Java SDK的核心能力Java MCP实现遵循三层架构&#xff1a;MCP客户端MCP服务器总结MCP 的核心能力总结多种传输选项 搭建服务端…...

【时时三省】(C语言基础)赋值表达式和赋值语句和变量赋初值

山不在高&#xff0c;有仙则名。水不在深&#xff0c;有龙则灵。 ----CSDN 时时三省 赋值表达式和赋值语句 在C程序中&#xff0c;赋值语句是用得最多的语句。实际上&#xff0c;C语言的赋值语句属于表达式语句&#xff0c;由一个赋值表达式加一个分号组成。其他一些高级语言…...

Room数据库的使用

一、room的引用导入 1、在app的gradle中引入 plugins {//这个ksp 一定要对应相关的 kotlin 版本&#xff0c;不然会一直报错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&#xff0c;控制台就会打印打包的过程 最终打的包&#xff0c;会存放在打印的那个路径下 这个jar包&#xff0c;就是开发人员开发好&#xff0c;直接可以部署的 可以通过命令&#xff0c;在终端直接启动这…...

SpringBoot加载配置文件的优先级

在 SpringBoot 应用中&#xff0c;配置文件的加载顺序&#xff08;优先级&#xff09;决定了不同来源的配置属性如何覆盖彼此&#xff0c;但是&#xff0c;在实践中&#xff0c;也会经常遇到。下面文章将分析 SpringBoot 配置文件加载的优先级&#xff0c;从高到低排列。 文章目…...

跨越时空的对话:图灵与GPT-4聊AI的前世今生

&#xff08;背景&#xff1a;虚拟咖啡厅&#xff0c;图灵身着1950年代西装&#xff0c;端着一杯热茶&#xff0c;GPT-4以全息投影形态坐在对面&#xff09; 图灵&#xff08;喝了口茶&#xff09;&#xff1a;“听说你能写诗&#xff1f;我当年在布莱切利园破解Enigma时&…...

如何通过 Seatunnel 实现 MySQL 到 OceanBase的数据迁移同步

1. 准备传输工具 本方案采用 Apache Seatunnel&#xff08;简称seatunnel&#xff09;进行MySQL 到 OceanBase 的数据迁移和同步&#xff0c;出于对方案轻量性的考量&#xff0c;我们采用其内置的Zeta引擎来实现&#xff0c;包括全量同步、离线增量同步&#xff0c;以及CDC方案…...

C++20 新特性总结

简要总结 C20 引入了四项非常大的更新, 分别是: 概念(Concepts). 用来简化模板编程, 强化表达能力. 并且使得出错原因更容易查找.模块(Modules). 这是代码组织方面非常大的更新. 提供了新的方式来组织代码, 并且可以减少编译时间.范围库(Ranges and Views). 轻量级的, 非拥有…...

软件设计模式之简单工厂模式

目录 一.类图&#xff08;手机生产&#xff09; 二.代码实现 Iphone类&#xff1a; Vivo类&#xff1a; Mobile类&#xff1a; MobileFactory类&#xff1a; Client类&#xff1a; 一.类图&#xff08;手机生产&#xff09; 补充&#xff1a;MobileFactory也可以直接指向…...

内网激活JRebel插件(无网络环境)

1.官网下载安装包,JRebel and XRebel JRebel and XRebel - IntelliJ IDEs Plugin | Marketplace 2.以IInstall Plugin from Disk的方式读取 3.运行JrebelServer.jar 终端输入&#xff1a; java -jar JrebelServer.jar -p 8080 (默认8080端口)服务会自动打开浏览器至 http:/…...

LiveGBS流媒体平台GB/T28181常见问题-视频流安全控制HTTP接口鉴权勾选流地址鉴权后401Unauthorized如何播放调用接口流地址校验

LiveGBS流媒体平台GB/T28181常见问题频流安全控制HTTP接口鉴权勾选流地址鉴权后401Unauthorized如何播放调用接口流地址校验&#xff1f; 1、安全控制1.1、HTTP接口鉴权1.2、流地址鉴权 2、401 Unauthorized2.1、携带token调用接口2.1.1、获取鉴权token2.1.2、调用其它接口2.1.…...

Java 大视界 -- 区块链赋能 Java 大数据:数据可信与价值流转(84)

&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎来到 青云交的博客&#xff01;能与诸位在此相逢&#xff0c;我倍感荣幸。在这飞速更迭的时代&#xff0c;我们都渴望一方心灵净土&#xff0c;而 我的博客 正是这样温暖的所在。这里为你呈上趣味与实用兼具的知识&#xff0c;也…...

接口自动化入门 —— Http的请求头,请求体,响应码解析!

在接口自动化测试中&#xff0c;HTTP请求头、请求体和响应码是核心组成部分。理解它们的作用、格式和解析方法对于进行有效的接口测试至关重要。以下是详细解析&#xff1a; 1. HTTP 请求头&#xff08;Request Header&#xff09; 1.1 作用 请求头是客户端向服务器发送的附加…...

upload-labs(1-20)详解(专业版)

目录 第1关 第2关 第3关 第4题 第5题 第6题 第7题 第8题 第9题 第10题 第11题 第12题 第13题 第1关 查看源码 在第一关是一个前端js的一个后缀识别&#xff1a;当不为jpg、png、gif时候出现弹窗 检查源码 将return checkFile() 改为 return ture 就可以将php顺利…...

Linux 生成静态库

文章目录 前提小知识生成和使用.a库操作步骤 在应用程序中&#xff0c;有一些公共的代码需要反复使用的&#xff0c;可以把这些代码制作成“库文件”&#xff1b;在链接的步骤中&#xff0c;可以让链接器在“库文件”提取到我们需要使用到的代码&#xff0c;复制到生成的可执行…...

ARMV8的64位指令

一、介绍 ARMv8 体系结构最大的改变是增加了一个新的 64 位的指令集&#xff0c;这是早前 ARM 指令集 的有益补充和增强。它可以处理 64 位宽的寄存器和数据并且使用 64 位的指针来访问内存。这 个新的指令集称为 A64 指令集&#xff0c;运行在 AArch64 状态。 ARMv8 兼容旧的…...

【git】 贮藏 stash

贮藏是我在sourcetree上看到的名词。之前只是浅浅的用来收藏一下修改的文件&#xff0c;没有完整的使用过。今天有幸使用了一次就来展开说说。 使用原因就不赘述了&#xff0c;错误的操作少提为好&#xff0c;操作步骤如下&#xff1a; 查看贮藏列表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 作为腾讯云推出的分布式数据库&#xff0c;凭借其高扩展性、高可用性和高性能等优势&#xff0c;广泛应用于金融、互联网、政务等领域。随着业务的不断增长和数据量的爆炸式增长&#xff0c;如何优化 TDSQL 数据库的性能&#xff0c;成为众多企业和开发者面临的挑战。本文…...

202250311-WINDOWS本地4G显存Docker运行vLLM

前置&#xff1a; 需要去huggingface注册账号获取token&#xff1a;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 中&#xff0c;生成 RDD&#xff08;弹性分布式数据集&#xff09;的主要方法是通过 SparkContext&#xff08;或 SparkSession&#xff09;提供的 API。以下是生成 RDD 的常见方法&#xff1a; 1. 从本地集合创建 RDD 使用 parallelize 方法将本地集合&#xff08;如…...