Sentinel 控制台学习

引言

上篇文章已经讲过 SpringCloud Sentinel集成到微服务项目中,接下来我们继续学习怎么使用sentinel控制台对微服务进行限流,熔断,降级等一系列操作。

控制台

在这里插入图片描述
接下来我们单独讲解每一个菜单按钮

实时监控

实时监控: 可以看到微服务中接口的调用情况。
在这里插入图片描述

簇点监控

簇点监控: 展示当前微服务中,所有可用的资源,可以对这些资源进行熔断、降级、流控的相关配置,默认是将controller控制层中的接口作为资源显示出来
在这里插入图片描述

流控规则

流控规则:对相关的资源设置流量控制规则,一般在高并发流量的场景里面,为了降低系统宕机情况,就会限制访问流量来提高系统的稳定性。

哪些场景中,需要使用流量控制呢???
秒杀、下单、订单回流、消息型场景、API网关限流等情况

在这里插入图片描述

QPS流控规则

QPS流控规则: 限制每秒钟访问的请求数量。
在这里插入图片描述
访问/demo01接口,当1秒钟超过2个请求时候,超过的请求将返回错误信息。
在这里插入图片描述
当然,也可以自己在代码中通过 @SentinelResource 注解,指定流控、降级之后的回调方法

并发线程数

并发线程数规则: 当请求达到设置的最大线程数时候,在这些线程处理响应结束之前,如果此时还有线程到达,那么这个线程就会被流控。
在这里插入图片描述
打开两个浏览器,同时访问 /demo03 接口(注意:这个接口中写了暂停3秒的逻辑),此时第二个访问的会出现流控。
在这里插入图片描述

直接流控模式

直接流控模式: 直接对添加流控的资源进行流量限制,默认就是采用这种限流模式

关联流控模式

关联流控模式:两个资源之间存在关联关系,假设A资源和B资源存在关联关系,对A资源进行流控规则,关联了B资源,那么此时如果A资源满足流控规则后,就会限流B资源,这就是关联流控模式。

  • 这里模拟一下【关联流控模式】,首先由两个资源:/demo04/demo05,给/demo04添加流控规则,并且关联 /demo05 资源。
  • 使用jemeter访问 /demo05 资源,访问的过程中,浏览器单独访问 /demo04 资源,此时 /demo04 资源会发生流控。
    在这里插入图片描述
    打开jemeter,模拟大量请求访问 /demo05 接口,之后浏览器访问 /demo04 接口,此时可以发现 /demo04 发生了流控。

注意:关联流控模式下,只有关联资源才会触发目标资源的流控规则。

链路流控模式

链路流控模式:根据接口的调用链路来实现流量控制,假设:A资源被B、C两个资源调用,也就是存在两个链路:B–>A、C–>A;那么就可以采用链路流控模式,对【B–>A】调用链路进行流控限制。

  • 这里采用 /demo06/demo07demo三个资源,其中 /demo06/demo07 都会调用demo资源。
  • 在sentinel控制台中,给【demo】资源添加流控规则,入口资源设置成 /demo06
  • 这个时候,就会对 /demo06进行限流控制
    -
    打开浏览器,多次刷新页面访问 /demo06 接口,此时会触发流控规则,而多次访问/demo07接口不会触发流控规则。
    在这里插入图片描述

注意:sentinel默认是不会维护调用链路的,需要我们自己在application.yml 配置文件中配置

spring:# 配置 sentinel 控制台cloud:sentinel:# 让 sentinel 维护调用链路树web-context-unify: false
快速失败(流控效果)

快速失败:当发生流控的时候,直接快速返回失败信息。

Warm Up(流控效果)

Warm Up是【预热流控】的一种机制,所谓的预热流控,是指:当大量请求到达时候,假设一开始只处理3个请求,其他请求全部失败,之后逐渐增加处理更多的请求,例如:3个、6个、10个依次递增。sentinel默认的冷加载因子是3,它会根据【threshold / 3】开始,经过预热之后,逐渐达到阈值threshold。
在这里插入图片描述
使用jemeter访问/demo02接口,查看监控图如下所示。
在这里插入图片描述

预热流控一般适用于积分流量场景下,什么是积分流量呢???
积分流量是指:在某一段时间内可能出现大量的请求,但是过了那段时间,请求有变得平稳了,这种场景下就适用于预热流控

排队等待(流控效果)

排队等待:请求在达到设定的阈值时候,多余的请求会在指定的时间里面排队等待被处理,如果在指定时间里面,还没有被执行,那就直接失败。
在这里插入图片描述
使用jemeter每隔5秒钟发起10个请求访问/demo02接口,运行结束之后,查看监控界面。
在这里插入图片描述
从上图中就可以看出,使用【排队等待】方式就已经能够很好的解决多余请求的处理问题,而不会出现快速失败的情况。为了验证排队等待的效果,你可以设置一个快速失败的方式,再次测试接口,查看监控界面。
在这里插入图片描述
从上图可以看到,快速失败方式下,会出现5个接口调用成功,5个接口调用失败,并且会有一个5秒钟的时间间隔(自己设置的时间间隔),排队等待就是利用这个时间间隔,处理处于等待中的请求,从而实现流控。

熔断规则

熔断降级规则有三种,分别是:慢调用比例异常比例异常数。当触发熔断之后,不会去调用微服务接口,是否直接返回快速失败。

慢调用比例

慢调用比例:请求的响应时长超过给定的RT,并且满足【最小请求数】中满调用的占比达到阈值,则触发熔断规则。
在这里插入图片描述
打开jemeter,访问 /demo03 接口,此时会出发熔断规则。
在这里插入图片描述

异常比例

异常比例:在指定的请求数量里面,出现异常的请求达到指定比例,则触发熔断规则。
在这里插入图片描述
接口 /exception 模拟抛出异常即可,然后使用jemeter调用测试。
在这里插入图片描述

异常数

异常数:在最小请求数里面,出现异常的次数满足阈值,则发生熔断。
在这里插入图片描述

热点规则

热点规则:是针对接口请求中的热点参数进行流量控制,什么是热点参数呢???比如:一个查询接口中,根据商品名称查询,有:【手机】、【电脑】,假设用户大部分都查询【手机】,所以【手机】就相当于是一个热点参数,那就可以对针对这个查询参数的接口,进行流量控制。注意:热点参数规则,必须是使用 @SentinelResource 注解定义的资源。

  • 编写测试方法。
@SentinelResource(value = "/api/sentinel/dashboard/parameter", blockHandler = "blockMethod")
@GetMapping("/parameter")
public String parameter(@RequestParam("id") String id, @RequestParam("name") String name) {System.out.println("parameter接口调用成功.id=" + id + ", name=" + name);return "parameter接口调用成功.id=" + id + ", name=" + name;
}public String blockMethod(String id, String name, BlockException e) {return "【" + name + "】触发热点参数流控规则";
}
  • 配置热点参数规则。
    在这里插入图片描述
  • 浏览器访问 localhost:8899/api/sentinel/dashboard/parameter?id=1&name=手机,多次刷新,此时就会触发热点参数流控规则。
    在这里插入图片描述
    以上就是热点参数规则的配置。

系统规则

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

Load 自适应(仅对 Linux/Unix-like 机器生效)

系统的 load1 作为启发指标,进行自适应系统保护。当系统 load1 超过设定的启发值,且系统当前的并发线程数超过估算的系统容量时才会触发系统保护(BBR 阶段)。系统容量由系统的 maxQps * minRt 估算得出。设定参考值一般是 CPU cores * 2.5;

CPU usage(1.5.0+ 版本)

当系统 CPU 使用率超过阈值即触发系统保护(取值范围 0.0-1.0),比较灵敏;

平均 RT

当单台机器上所有入口流量的平均 RT 达到阈值即触发系统保护,单位是毫秒;

并发线程数

当单台机器上所有入口流量的并发线程数达到阈值即触发系统保护;

入口 QPS

当单台机器上所有入口流量的 QPS 达到阈值即触发系统保护。

  • 配置系统规则 在这里插入图片描述
  • 使用jemeter压测
    在这里插入图片描述
  • 测试结果
    在这里插入图片描述

授权规则

很多时候,我们需要根据调用来源来判断该次请求是否允许放行,这时候可以使用 Sentinel 的来源访问控制(黑白名单控制)的功能。

来源访问控制根据资源的请求来源(origin)限制资源是否通过,若配置白名单则只有请求来源位于白名单内时才可通过;若配置黑名单则请求来源位于黑名单时不通过,其余的请求通过

来源访问控制规则(AuthorityRule)非常简单,主要有以下配置项:

  • resource:资源名,即限流规则的作用对象。
  • limitApp:对应的黑名单/白名单,不同 origin 用 , 分隔,如 appA,appB。
  • strategy:限制模式,AUTHORITY_WHITE 为白名单模式,AUTHORITY_BLACK 为黑名单模式,默认为白名单模式。
    配置授权规则:
    在这里插入图片描述
  • 代码编写
    实现com.alibaba.csp.sentinel.adapter.spring.webmvc.callback.RequestOriginParser接口,在parseOrigin方法中区分来源,并交给spring管理
    注意:如果引入CommonFilter,此处会多出一个
    在这里插入图片描述
import com.alibaba.csp.sentinel.adapter.spring.webmvc.callback.RequestOriginParser;
import org.springframework.stereotype.Component;import javax.servlet.http.HttpServletRequest;@Component
public class MyRequestOriginParser implements RequestOriginParser {/*** 通过request获取来源标识,交给授权规则进行匹配* @param request* @return*/@Overridepublic String parseOrigin(HttpServletRequest request) {// 标识字段名称可以自定义String origin = request.getParameter("serviceName");
//        if (StringUtil.isBlank(origin)){
//            throw new IllegalArgumentException("serviceName参数未指定");
//        }return origin;}
}
  • 测试:origin是order的请求不通过。
    在这里插入图片描述
    在这里插入图片描述

集群流控

集群流程官方文档
为什么要使用集群流控呢?假设我们希望给某个用户限制调用某个 API 的总 QPS 为 50,但机器数可能很多(比如有 100 台)。这时候我们很自然地就想到,找一个 server 来专门来统计总的调用量,其它的实例都与这台 server 通信来判断是否可以调用。这就是最基础的集群流控的方式。

另外集群流控还可以解决流量不均匀导致总体限流效果不佳的问题。假设集群中有 10 台机器,我们给每台机器设置单机限流阈值为 10 QPS,理想情况下整个集群的限流阈值就为 100 QPS。不过实际情况下流量到每台机器可能会不均匀,会导致总量没有到的情况下某些机器就开始限流。因此仅靠单机维度去限制的话会无法精确地限制总体流量。而集群流控可以精确地控制整个集群的调用总量,结合单机限流兜底,可以更好地发挥流量控制的效果

集群流控中共有两种身份:

  • Token Client:集群流控客户端,用于向所属 Token Server 通信请求token。集群限流服务端会返回给客户端结果,决定是否限流
  • Token Server:即集群流控服务端,处理来自 Token Client 的请求,根据配置的集群规则
    判断是否应该发放 token(是否允许通过)

Sentinel 集群流控支持限流规则和热点规则两种规则,并支持两种形式的阈值计算方式:

  • 集群总体模式即限制整个集群内的某个资源的总体 qps 不超过此阈值
  • 单机均摊模式单机均摊模式下配置的阈值等同于单机能够承受的限额,token server 会根据连接数来计算总的阈值(比如独立模式下有 3个 client 连接到了 token server,然后配的单机均摊阈值为 10,则计算出的集群总量就为30),按照计算出的总的阈值来进行限制。这种方式根据当前的连接数实时计算总的阈值,对于机器经常进行变更的环境非常适合
启动方式

Sentinel 集群限流服务端有两种启动方式:

  • 独立模式(Alone),即作为独立的 token server 进程启动,独立部署,隔离性好,但是需要额外的部署操作。独立模式适合作为 Global Rate Limiter 给集群提供流控服务
    在这里插入图片描述
  • 嵌入模式(Embedded),即作为内置的 token server 与服务在同一进程中启动。在此模式下,集群中各个实例都是对等的,token server 和 client 可以随时进行转变,因此无需单独部署,灵活性比较好。但是隔离性不佳,需要限制 token server 的总QPS,防止影响应用本身。嵌入模式适合某个应用集群内部的流控
    在这里插入图片描述
    云上版本 AHAS Sentinel 提供开箱即用的全自动托管集群流控能力,无需手动指定/分配 token server 以及管理连接状态,同时支持分钟小时级别流控、大流量低延时场景流控场景,同时支持 Istio/Envoy 场景的 Mesh 流控能力

扩展知识点

统一异常处理BlockException

自定义BlockException异常处理,可以针对不同的异常情况,响应不同的结果,当然你也可以不使用统一的异常处理,那就是需要在每一个方法中使用 @SentinelResource 注解定义异常处理方法。

package com.gitcode.demo.exception;
import com.alibaba.csp.sentinel.adapter.spring.webmvc.callback.BlockExceptionHandler;
import com.alibaba.csp.sentinel.slots.block.BlockException;
import com.alibaba.csp.sentinel.slots.block.authority.AuthorityException;
import com.alibaba.csp.sentinel.slots.block.degrade.DegradeException;
import com.alibaba.csp.sentinel.slots.block.flow.FlowException;
import com.alibaba.csp.sentinel.slots.block.flow.param.ParamFlowException;
import com.alibaba.csp.sentinel.slots.system.SystemBlockException;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.http.MediaType;
import org.springframework.stereotype.Component;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.nio.charset.StandardCharsets;/*** @version 1.0.0* @Date: 2023/4/25 20:32* @Copyright (C) ZhuYouBin* @Description: 统一异常处理【BlockException】*/
@Component
public class CustomBlockExceptionHandler implements BlockExceptionHandler {@Overridepublic void handle(HttpServletRequest request, HttpServletResponse response, BlockException e) throws Exception {// TODO 在这里就可以自定义返回响应数据String msg = "";if (e instanceof FlowException) {msg = "流控异常";} else if (e instanceof DegradeException) {msg = "服务降级异常";} else if (e instanceof ParamFlowException) {msg = "热点参数流控异常";} else if (e instanceof SystemBlockException) {msg = "触发系统保护规则异常";} else if (e instanceof AuthorityException) {msg = "授权规则不通过异常";}// 响应结果response.setStatus(500);response.setCharacterEncoding(StandardCharsets.UTF_8.toString());response.setContentType(MediaType.APPLICATION_JSON_VALUE);// 返回JSON数据new ObjectMapper().writeValue(response.getWriter(), msg);}}

到此,Sentinel控制台配置相关规则就介绍完啦。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/317679.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【项目构建】04:动态库与静态库制作

OVERVIEW 1.编译动态链接库(1)编译动态库(2)链接动态库(3)运行时使用动态库 2.编译静态链接库(1)编译静态库(2)链接静态库(3)运行时使…

免费的单片机物联网MQTT平台选择

目的是多设备接入中控,平台只做转发。 选择巴法云:巴法科技&巴法云-巴法设备云-巴法物联网云平台 clientId是私钥uid: 多设备 clientId 填同一个 uid 都是可以的。平台应该是加了后缀区分。 支持自定义topic,操作简单&#x…

2024.5.5 机器学习周报

引言 Abstract 文献阅读 1、题目 SuperGlue: Learning Feature Matching with Graph Neural Networks 2、引言 本文介绍了SuperGlue,这是一种神经网络,它通过联合寻找对应关系并拒绝不匹配的点来匹配两组局部特征。通过求解一个可微的最优运输问题…

TikTok引流中海外云手机的实用功能分享

在当下,TikTok已成为全球范围内最受欢迎的社交媒体平台之一,拥有着庞大的用户群体和潜在的商业机会。为了在TikTok上实现更好的引流效果,利用海外云手机成为了一个明智的选择。接下来,我们将深入探讨海外云手机的功能以及它如何助…

跳出框架:Facebook的创新策略与社交影响

1. 引言 在数字化时代,社交媒体如同一面镜子,反映出我们社会的多元性和变革。Facebook,作为这面镜子中最明亮的一个,不仅改变了人们的日常生活,更深刻地塑造了社交、文化和经济的面貌。本文将深入探讨Facebook的创新策…

Maven3.9.6下载安装教程

(/≧▽≦)/~┴┴ 嗨~我叫小奥 ✨✨✨ 👀👀👀 个人博客:小奥的博客 👍👍👍:个人CSDN ⭐️⭐️⭐️:Github传送门 🍹 本人24应届生一枚,技术和水平有…

BST二叉搜索树

概念 二叉搜索树(Binary Search Tree,简称BST),又称为二叉排序树或二叉查找树,是一种特殊的二叉树数据结构。它具有以下基本性质: 节点的值的有序性:对于BST中的任意一个节点,其左…

交通 | 电动汽车车辆路径问题及FRVCP包的调用以及代码案例

编者按: 电动汽车的应用给车辆路线问题带来了更多的挑战,如何为给定路线行驶的电动汽车设计充电决策是一个需要解决的难题,本文介绍了开源python包frvcpy使用精确式算法对该问题求解。 文献解读:Aurelien Froger, Jorge E Mendo…

H.265 与 H.264 的主要区别

H.265 与 H.264 的主要区别 H.265 与 H.264 的主要区别各模块技术差异汇总宏块划分帧内预测模式帧间预测模式去块滤波ALF自适应环路滤波采样点自适应偏移(Sample Adaptive Offset)滤波并行化设计TileEntropy sliceDependent SliceWPP(Wavefro…

红米A2/A2+/POCO C51手机秒解BL+快速获取root权限+解谷歌锁刷机救砖教程

红米A2/A2/POCO C51手机是目前小米公司针对于国外用户的1个独立的品牌,或者和国内的红米手机都非常相似,几款手机由于硬件非常接近,我们这里将其放在一起和大家介绍而从他们的代号中我们可以得知,目前A2/POCO的代号为water&#x…

Text-to-SQL小白入门(12)Awesome-Text2SQL开源项目star破1000

项目介绍 项目地址 23年9月份刚开源这个项目,大半年过去了,star数终于破1000啦,决定在知乎更新一下内容,看看内容变化,知乎有上当时项目介绍的链接:追光者:Text-to-SQL小白入门(六&…

水稻病害检测(YOLO数据集,多分类,稻瘟病、纹枯病、褐斑病、枯心病、霜霉病、水稻细菌性条纹斑病、稻苞虫)

是自己利用LabelImg工具进行手工标注,数据集制作不易,请尊重版权(稻瘟病、纹枯病、褐斑病、枯心病、霜霉病、水稻细菌性条纹斑病、稻苞虫) 如果需要yolv8检测模型和数据集放在一起的压缩包,可以关注:最新最…

汽车车灯的材料是什么?汽车车灯的灯罩如果破损破裂破洞了要怎么修复?

汽车车灯的材料主要包括灯罩和灯底座两部分,它们所使用的材料各不相同。 车灯罩的材料主要是透明且具有良好耐热性和耐紫外线性能的塑料。其中,聚碳酸酯(PC)是一种常用的材料,它具有高抗冲击性、耐化学品腐蚀和优良的…

【C++庖丁解牛】C++11---lambda表达式 | 包装器

🍁你好,我是 RO-BERRY 📗 致力于C、C、数据结构、TCP/IP、数据库等等一系列知识 🎄感谢你的陪伴与支持 ,故事既有了开头,就要画上一个完美的句号,让我们一起加油 目录 1. lambda表达式1.1 C98中…

数字旅游打造个性化旅行体验,科技让旅行更精彩:借助数字技术,旅行者可以定制专属旅行计划,享受个性化的旅行体验

目录 一、引言 二、数字旅游的兴起与发展 三、数字技术助力个性化旅行体验 1、智能推荐系统:精准匹配旅行者需求 2、定制化旅行计划:满足个性化需求 3、实时互动与分享:增强旅行体验 四、科技提升旅行便捷性与安全性 1、移动支付与电…

28.Gateway-网关过滤器

GatewayFilter是网关中提供的一种过滤器,可以多进入网关的请求和微服务返回的响应做处理。 GatewayFilter(当前路由过滤器,DefaultFilter) spring中提供了31种不同的路由过滤器工厂。 filters针对部分路由的过滤器。 default-filters针对所有路由的默认…

重定义大语言模型的记忆能力:对抗性压缩如何挑战现有测量法

DeepVisionary 每日深度学习前沿科技推送&顶会论文分享,与你一起了解前沿深度学习信息! Rethinking LLM Memorization through the Lens of Adversarial Compression 引言:探索大型语言模型的记忆能力 在当今信息时代,大型…

Pyspark+关联规则 Kaggle购物篮分析案例

数据集地址:Market Basket Analysis | Kaggle 我的NoteBook地址:pyspark Market Basket Analysis | Kaggle 零售商期望能够利用过去的零售数据在自己的行业中进行探索,并为客户提供有关商品集的建议,这样就能提高客户参与度、改…

50. 【Android教程】xml 数据解析

xml 是一种标记扩展语言(Extension Mark-up Language),学到这里大家对 xml 语言一定不陌生,但是它在 Android 中的运用其实只是冰山一角。抛开 Android,XML 也被广泛运用于各种数据结构中。在运用 xml 编写 Android 布…