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

Sentinel学习

sentinel是阿里巴巴研发的一款微服务组件,主要为用户提供服务保护,包括限流熔断等措施

(一)主要功能

流量控制(限流):比如限制1s内有多少请求能到达服务器,防止大量请求打崩服务器

熔断降级:当下级服务响应慢或者不可用时,熔断服务,快速失败,保护上游服务

(二)使用方法

去Releases · alibaba/Sentinel · GitHub下载对应的jar包
在jar包所在的目录cmd运行命令

java -Dserver.port=8090 -Dcsp.sentinel.dashboard.server=localhost:8090 -Dproject.name=sentinel-dashboard -jar sentinel-dashboard-1.8.8.jar

然后通过8080端口即可访问sentinel的控制台 ,账号密码均为sentinel

然后去项目中添加依赖

<dependency><groupId>com.alibaba.csp</groupId><artifactId>sentinel-transport-simple-http</artifactId><version>x.y.z</version>
</dependency>

同时修改服务的application.yml

spring:cloud:sentinel:transport:dashboard: localhost:8090   # 指定 Sentinel Dashboard 地址port: 8719                  # 客户端监控端口,用于与 Sentinel Dashboard 通信

dashboard的地址必须和sentinel控制台的地址一致,连接控制台
port端口号是服务与sentinel的通信端口,是独立的,不能和运行服务的端口一样

在项目的代码中使用:

@SentinelResource注解

常用参数

value:指定资源名,在控制台中可看
blockHandler:触发限流规则时会调用哪个方法,一般会写一个兜底方法,方法参数要和设置了限流的方法一致,但可以加一个BlockException
fallback:触发异常时调用哪个兜底方法,和上面的很像,但是上面是用于触发限流后用的,这个是用于触发异常用的,方法参数可以加一个Throwable

(三)限流规则

限流主要是阻止大量请求同时打到服务器上

资源名 与@SentinelResource的value对应
针对来源 就是调用这个controller发送请求的来源,你要限流哪些来源的,默认全部
阈值类型:QPS每秒通过多少个(多少个就是单机阈值的数量),并发线程数通常配合线程池使用
是否集群:多服务器的情况下会用,也要设置一个阈值
比如,设置全局阈值12,比如进来100个请求,有三个服务器,它们总共只能处理12个请求
如果设置的单机均摊12,进来100个请求,就会每个服务器都能处理12个请求,总共36

继续看:

流控模式分为3种:直接、关联和链路

直接没什么好说的,就是对单一资源进行限流
关联就是a资源关联b资源,当b资源访问量大触发限流时,a也会被限流
链路就是当同一个方法会被多种渠道调用时,只对部分渠道进行限流

流控效果分三种:快速失败、warm up和排队等待

快速失败就是触发限流后,后面的请求全部丢弃,报错
warm up就是冷启动,需要设置启动时间n,前n秒内处理量大概为阈值的1/3,后面再逐步提高处理量达到阈值
排队等待就是触发限流后,后面的请求不会丢弃,而是排队等待前面的执行完后它再执行,需要设置排队时间,超过这个时间请求还未被处理的话,丢弃

ps:只有快速失败支持关联和链路,其它两种不支持

(四)熔断规则

当a服务调用b服务时,b服务可能会卡住执行很久,也可能会异常,这时a要及时熔断,切断与b的联系,保护自己

又有一个问题?怎么判断服务有问题去熔断呢?熔断之后怎么恢复连接呢?

答:判断熔断主要根据熔断策略,符合条件即熔断。恢复连接的话,当a、b服务间断开的时长达到熔断时长后,服务会切换到半开状态,a会向b发送一个或几个请求,如果这些请求正常执行,那就取消熔断恢复运行,如果这些请求有问题(满足熔断条件),就会继续保持熔断

熔断策略有三种:慢调用、异常比例和异常数

选择慢调用

最大RT:最大的响应时间,超过这个时间判定为慢调用
比例阈值:当n%的调用是慢调用时,触发熔断
熔断时长:熔断多久
最小请求数:要触发熔断起码要有多少个请求,低于这个数值不会熔断
统计时长:统计时长

选择异常比例

其他不变,没用最大RT,比例阈值改为当n%的调用是异常时触发熔断

选择异常数

其他不变,比例阈值改为异常数

(五)热点规则

就是可以对方法的具体参数进行限流
当用户调用这个方法,携带了3个参数,你可以设置热点来对具体的第几个参数进行限流

(六)总结

sentinel是服务保护的重要组件,起到限流、熔断等作用

首先下载sentinel的jar包,用命令运行,用浏览器打开sentinel的控制台

然后去项目中添加对应依赖,修改代码,添加@SentinelResource,并写对应的兜底方法

@RestController
public class UserController {@GetMapping("/user")@SentinelResource(value = "getUser",               // 资源名,用于控制台设置规则fallback = "fallbackMethod",    // 业务异常兜底方法blockHandler = "blockHandlerMethod" // 流控、熔断时的处理方法)public String getUser(@RequestParam(required = false) String name) {if ("error".equals(name)) {throw new RuntimeException("模拟业务异常");}return "用户:" + name;}// fallback 方法:处理业务异常(如运行时异常)public String fallbackMethod(String name, Throwable e) {return "fallback:业务处理异常,返回兜底用户";}// blockHandler 方法:处理被 Sentinel 限流、降级、熔断的情况public String blockHandlerMethod(String name, BlockException ex) {return "blockHandler:服务被限流或熔断,返回默认用户";}
}

其实代码部分很少,主要用控制台对限流规则、熔断规则进行配置即可

相关文章:

  • 《AI大模型应知应会100篇》第46篇:大模型推理优化技术:量化、剪枝与蒸馏
  • Qwen3小模型实测:从4B到30B,到底哪个能用MCP和Obsidian顺畅对话?
  • 数据结构:顺序栈的完整实现与应用
  • shell(7)
  • More Effective C++学习笔记
  • 高中数学联赛模拟试题精选学数学系列第3套几何题
  • 影刀RPA中新增自己的自定义指令
  • 基于51单片机和LCD1602、矩阵按键的小游戏《猜数字》
  • 健康养生新主张
  • 【AI大模型学习路线】第一阶段之大模型开发基础——第三章(大模型实操与API调用)单轮对话与多轮对话调用。
  • 计算机网络-同等学力计算机综合真题及答案
  • 1993年地级市民国铁路开通数据(地级市工具变量)
  • 自制猜数字游戏源码(手机端)
  • C++类_虚基类
  • 【AI提示词】冰山模型分析师
  • Spring 基于 XML 的自动装配:原理与实战详解
  • C++STL之vector
  • 【KWDB 创作者计划】使用Docker实现KWDB数据库的快速部署与配置
  • 【中间件】brpc_基础_用户态线程上下文
  • 理解数学概念——支集(支持)(support)
  • 申活观察|精致精准精细,城市“双面镜”照见怎样的海派活力
  • 月薪3万文科友好,“AI训练师”真有那么赚?
  • 空间方法:一周城市生活
  • A股2024年年报披露收官,四分之三公司盈利
  • 韩国前国务总理韩德洙正式宣布参加总统选举
  • 短剧迷|《权宠》一出,《名不虚传》