Sentinel最全笔记,详细使用步骤教程清单

news/2024/10/20 17:19:52/

一、Sentinel的基本功能

1、流量控制

        流量控制在网络传输中是一个常用的概念,它用于调整网络包的发送数据。然而,从系统稳定性角度考虑,在处理请求的速度上,也有非常多的讲究。任意时间到来的请求往往是随机不可控的,而系统的处理能力是有限的。我们需要根据系统的处理能力对流量进行控制。Sentinel 作为一个调配器,可以根据需要把随机的请求调整成合适的形状,如下图所示:

 流量控制有以下几个角度:

  • 资源的调用关系,例如资源的调用链路,资源和资源之间的关系;
  • 运行指标,例如 QPS、线程池、系统负载等;
  • 控制的效果,例如直接限流、冷启动、排队等。

2、熔断降级

        除了流量控制以外,及时对调用链路中的不稳定因素进行熔断也是 Sentinel 的使命之一。由于调用关系的复杂性,如果调用链路中的某个资源出现了不稳定,可能会导致请求发生堆积,进而导致级联错误。

Sentinel 和 Hystrix 的原则是一致的: 当检测到调用链路中某个资源出现不稳定的表现,例如请求响应时间长或异常比例升高的时候,则对这个资源的调用进行限制,让请求快速失败,避免影响到其它的资源而导致级联故障。

 二、Sentinel的基本使用

直接使用

引入坐标

<!--sentinel-->
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-sentinel</artifactId><version>2.2.5.RELEASE</version>
</dependency>

对于要进行控制的资料做Sentinel的标记

@SentinelResource 用于定义资源,并提供可选的异常处理和 fallback 配置项。 @SentinelResource 注解包含以下属性:

 代码示例:

/***** 司机信息*/
@SentinelResource(value = "info",blockHandler = "blockExHandler")
@RequestMapping(value = "/info/{id}")
public Driver info(@PathVariable(value = "id")String id) throws BlockException {log.info("当前服务占用的端口为:{}",port);Driver driver = driverService.findById(id);if (driver==null) {//throw new RuntimeException("司机id="+id+"不存在");throw new SystemBlockException("info", "司机id="+id+"不存在",null); // 抛出BlockException}return driver;
}/*** info资源出现BlockException后的降级处理*/
public Driver blockExHandler(String id,BlockException e) {Driver driver = new Driver();driver.setId(id);driver.setName("系统繁忙,稍后再试");return driver;
}

集成OpenFeign

创建FallBack的处理类,需要实现对应的Feign接口

@Component
public class DriverFeignFallback implements DriverFeign {/*** status()降级处理方法*/@Overridepublic Driver status(String id, Integer status) {Driver driver = new Driver();driver.setId(id);driver.setStatus(status);driver.setName("系统比较繁忙,请您稍后再试!");return driver;}
}

在DriverFeign接口上添加fallback属性指定降级处理的类,代码如下:

@FeignClient(name = "hailtaxi-driver",fallback = DriverFeignFallback.class)
public interface DriverFeign {@PutMapping(value = "/driver/status/{id}/{status}")Driver status(@PathVariable(value = "id")String id, @PathVariable(value = "status")Integer status);
}

此刻就已经成功集成OpenFeign

但是有个问题,fallback拿不到报错信息,于是就有了fallbackFactory

创建fallbackFactory,这样可以拿到throwable中的报错信息了

@Component
public class DriverFeignFallbackFactory implements FallbackFactory<DriverFeign> {@Overridepublic DriverFeign create(Throwable throwable) {return new DriverFeign() {/*** status()降级处理方法*/@Overridepublic Driver status(String id, Integer status) {Driver driver = new Driver();driver.setId(id);driver.setStatus(status);driver.setName("系统比较繁忙,请您稍后再试!");return driver;}};}
}

在DriverFeign接口上添加fallbackFactory属性指定讲解处理的类,代码如下:

@FeignClient(name = "hailtaxi-driver",fallback = DriverFeignFallbackFactory.class)
public interface DriverFeign {@PutMapping(value = "/driver/status/{id}/{status}")Driver status(@PathVariable(value = "id")String id, @PathVariable(value = "status")Integer status);
}

集成Gateway

TODO(在赶稿了)

三、Sentinel的规则

1、流量控制规则

流量控制基本概念:流量过大,超过阈值,就走fallback的函数了

 我们可以在【流控规则】页面中新增,点击【流控规则】进入页面新增页面,如下图:

 资源名:要和@SentinelResource中的value保持一致

2、熔断降级规则

熔断降级基本概念:监控一些请求的异常情况(是否报错)或完成调用的时间,当在单位时间内达到阈值即触发降级

 我们可以选择降级规则>新增降级规则,如下图:

 降级规则的熔断策略有3种,分别是慢调用比例、异常比例、异常数,和程序中是一样的。

3、系统保护规则

        Sentinel 系统自适应限流从整体维度对应用入口流量进行控制,结合应用的 Load、CPU 使用率、总体平均 RT、入口 QPS 和并发线程数等几个维度的监控指标,通过自适应的流控策略,让系统的入口流量和系统的负载达到一个平衡,让系统尽可能跑在最大吞吐量的同时保证系统整体的稳定性。

这是对系统的整体指标做监控,超过一些阈值就对所有请求限流降级

4、访问控制规则

        很多时候,我们需要根据调用方来限制资源是否通过,这时候可以使用 Sentinel 的访问控制(黑白名单)的功能。黑白名单根据资源的请求来源(origin)限制资源是否通过,若配置白名单则只有请求来源位于白名单内时才可通过;若配置黑名单则请求来源位于黑名单时不通过,其余的请求通过。

5、热点规则

热点参数限流会统计传入参数中的热点参数,并根据配置的限流阈值与模式,对包含热点参数的资源调用进行限流。热点参数限流可以看做是一种特殊的流量控制,仅对包含热点参数的资源调用生效。

比如某个参数,city=“北京”,当监控到这个参数被访问的次数高于阈值,则对这个资源进行控制

要使用热点参数限流功能,需要引入以下依赖

<!--热点参数限流-->
<dependency><groupId>com.alibaba.csp</groupId><artifactId>sentinel-parameter-flow-control</artifactId><version>1.8.1</version>
</dependency>


http://www.ppmy.cn/news/1538474.html

相关文章

计算机视觉学习笔记--高斯金字塔,DoG金字塔和拉普拉斯金字塔附带代码

尺度空间和图像金字塔 尺度并非指图像的大小&#xff0c;而是指图像的模糊程度&#xff0c;从近距离到远距离图像越来越模糊的过程&#xff0c;也是图像的尺度越来越大的过程。尺度空间是图像在不同尺度下的连续表示。其中最常见的是使用高斯核对图像进行卷积。随着高斯滤波核…

【QT Quick】C++交互:暴露 C++ 对象到 QML

【QT Quick】C交互&#xff1a;暴露 C 对象到 QML 在 Qt Quick 开发中&#xff0c;使用 Context Property 将 C 对象暴露给 QML 是一种直观有效的方式。这种方法允许我们直接在 QML 中访问 C 对象的属性和方法&#xff0c;而无需使用信号和槽。这篇文章将详细展开如何通过 Con…

Excel重新踩坑1:加密保护工作簿、编辑保护工作簿、编辑保护工作表、允许编辑区域;填充柄;同时编辑多个单元格为同一个值

0、工作簿和工作表的概念&#xff1a; 一个Excel文件就是一个工作簿&#xff0c;工作簿当中有很多工作表&#xff0c;每个工作表中有很多单元格构成。 1、加密保护工作簿&#xff1a;全部保护起来 给工作簿设置密码&#xff0c;需要密码才能打开工作簿&#xff0c;看到其中的…

力扣面试150 最大正方形 二维DP 记忆化搜索 DFS

Problem: 221. 最大正方形 &#x1f468;‍&#x1f3eb; 参考题解 class Solution {public int maximalSquare(char[][] matrix) {// base condition: 如果矩阵为空&#xff0c;直接返回面积为 0if (matrix null || matrix.length < 1 || matrix[0].length < 1) {re…

阿里云的Qwen2.5-Coder 和 Qwen2.5-Math专有模型怎么样?

阿里云发布Qwen2.5 系列模型&#xff0c;最新发布的 Qwen2.5 系列中包括普通的大语言模型 (LLM) 以及针对编程和数学的专用模型&#xff1a;Qwen2.5-Coder 和 Qwen2.5-Math。 包括&#xff1a; Qwen2.5: 0.5B、1.5B、3B、7B、14B、32B 和 72BQwen2.5-Coder: 1.5B、7B 和 32B&…

【云从】三、计算机网络基础

文章目录 1、网络2、网络通信2.1 IP地址2.2 子网掩码2.3 网关2.4 私有地址和公有地址2.5 NAT网络地址转换 3、网络架构及设备 1、网络 网络&#xff0c;即通过通信线路&#xff08;如光纤、网线&#xff09;和通信设备&#xff08;如路由器、光猫&#xff09;&#xff0c;将各…

Python大数据学习之Hadoop学习——day08_hive函数

一.hive查询 语法结构&#xff1a; SELECT [ALL | DISTINCT] 字段名&#xff0c;字段名,... FROM 表名 [inner | left outer | right outer | full outer | left semi join 表名 on 关联条件] [where 非聚合条件] [GROUP BY 分组字段名] [HAVING 聚合条件] [ORDER BY 排序字段…

【前端】 常用的版本控制符号汇总

前端的版本控制符主要用于管理前端项目中依赖包的版本。它们通常在package.json文件中定义&#xff0c;帮助开发者指定所需的库和框架的版本范围。以下是一些关键概念&#xff1a; 版本控制符号详解&#xff1a; 1. 依赖管理 在前端开发中&#xff0c;依赖管理工具&#xff…