系列十一、(三)Sentinel控制台

news2024/7/6 18:58:58

一、Sentinel控制台

二、实时监控

2.1、概述

        实时监控,顾名思义是用来实时监控的,具体监控的是接口请求通过的QPS和拒绝的QPS,默认情况下没有访问记录,所以看不到任何记录,需要访问接口才会有记录。另外需要注意,当A时间段方案/a接口很频繁,实时监控页面会看到如下的数据,如果这个时间段有多个接口请求的话,会依次列出所有访问的接口。当过了一段时间没有任何访问的话,该接口对应的访问记录也不会再这里继续显示。

2.2、概览 

三、簇点链路

3.1、概述

        簇点链路是用来显示微服务中哪些接口可以用来监控。比如order-service-sentinel服务里面有两个接口,/sentinel/order/placingOrder和/sentinel/order/getOrderDetail/1,某一时间段只调用了/sentinel/order/placingOrder接口,则簇点链路页面将只会看到/sentinel/order/placingOrder的信息,/sentinel/order/getOrderDetail/1对应的信息是看不到的,反言之,簇点链路中显示的是微服务中哪些接口曾经被访问过,如果该服务中的接口都没有被访问过,则不会显示该服务下的任何接口。 

四、流控规则

4.1、概览

4.2、实战(QPS + 直接 + 快速失败)

4.2.1、配置

4.2.2、代码

@SentinelResource(value = "flow",blockHandler = "flowBlockHandler")
@GetMapping("/flow")
public String flow() {
    return "flow success!(*^▽^*)";
}
public String flowBlockHandler(BlockException e) {
    log.error("出错了,error:{}",e.getMessage());
    e.printStackTrace();
    return "flow blocked!(灬ꈍ ꈍ灬)";
}

 4.2.3、测试效果

        当QPS小于等于2时,正常访问,当QPS大于2时,被流控!

4.2.4、原理

4.2.5、注意事项

        如果使用的是@SentinelResource注解进行的流控,上述配置没问题。但是如果采用了统一日常处理,流控规则要配置在 /sentinel/order/flow 上

4.3、实战(并发线程数 + 直接)

4.3.1、配置

4.3.2、代码

@SentinelResource(value = "flowThread",blockHandler = "flowThreadBlockHandler")
@GetMapping("/flowThread")
public String flowThread() {
    // 线程休眠(单位:秒)
    try { TimeUnit.SECONDS.sleep(5); } catch (Exception e) {e.printStackTrace();}
    return "flowThread success!(*^▽^*)";
}
public String flowThreadBlockHandler(BlockException e) {
    log.error("出错了,error:{}",e.getMessage());
    e.printStackTrace();
    return "flowThread blocked!(灬ꈍ ꈍ灬)";
}

4.3.3、测试结果

        根据上面的配置可以清晰的知道,资源处理需要的时间是5s,配置的阈值类型为线程数,其值为2,也就意味着在资源处理的时间段内最多允许2个线程进来,其他的线程在这5s内再进来将会被限流。测试结果如下:

4.3.4、原理

4.4、实战(QPS + 关联 + 快速失败)

4.4.1、概述

        为了方便大家伙的理解,我这边举个例子:小明追女神小芳,小芳有一个闺蜜秀芹,某一天秀芹被渣男伤害了(秀芹告诉小芳,天底下没有一个好男人,分了吧!),然后小芳和小明分手了,小明追的是小芳,但是却因为秀芹被渣男的伤害,导致自己莫名躺枪,不得不和女神Say Good Bye!

4.4.2、配置

4.4.3、代码

@GetMapping("/xiaoFang")
public String xiaoFang() {
    return "小明追小芳success!(*^▽^*)";
}
@GetMapping("/xiuQin")
public String xiuQin() {
    return "秀芹被渣男伤害了!(灬ꈍ ꈍ灬)";
}

4.4.4、测试

        为了测试效果,我这边借用了Apache Jmeter压测工具进行测试,如果不知道Jmeter如何使用的,请参考【系列二十七、Apache Jmeter使用】,这里不再赘述!

Jmeter配置:

4.4.5、结果分析

        由于资源/sentinel/order/xiaoFang配置的流控规则是关联模式,关联的资源为 /sentinel/order/xiuQin,当/sentinel/order/xiuQin出事儿时,资源/sentinel/order/xiaoFang也将受牵连。

4.5、实战(QPS + 链路 + 快速失败)

4.5.1、概述

        链路的官方语言解释有点儿晦涩难懂,为了方便大家伙儿的理解,我这边还是举个例子,让大家伙儿在轻松愉快中理解链路是个什么玩意儿,例如当前controller层中有如下两个方法,即:/sentinel/order/test1和/sentinel/order/test2,这俩方法都调用了OrderService#listAllUser方法,那么这里就涉及到了3个资源,这3个资源可以构成一颗树,其中listAllUser为根节点,

/sentinel/order/test1和/sentinel/order/test2为这颗树的子节点,我现在有个需求,针对/sentinel/order/test1请求,不流控,随便访问都OK;对/sentinel/order/test2进行限流,QPS为2,当超过2时就限流,针对这种多个方法调用同一个资源,只想对某些方法进行限流的场景就可以使用链路模式。

4.5.2、配置

4.5.3、代码

@GetMapping("/test1")
public String test1() {
    return orderService.listAllOrder();
}
@GetMapping("/test2")
public String test2() {
    return orderService.listAllOrder();
}

@Service
public class OrderService {

    /**
     * @return
     */
    @SentinelResource(value = "listAllOrder")
    public String listAllOrder() {
        return "查询所有订单success!(*^▽^*)";
    }

}

spring.cloud.sentinel.web-context-unify=false # 默认将调用链路收敛了

4.5.4、测试

/sentinel/order/test1随便访问都OK

/sentinel/order/test2 QPS大于2时,报如下错误:

4.6、实战(QPS + 直接 + Warm Up)

4.6.1、概述

        所谓Warm Up是指某一时刻,例如双11秒杀,一瞬间涌入了大量的请求,这个时候服务器可能一下子扛不住那么大的压力,可以将请求一点一点的放进来,最终达到最高阈值。结合下面的配置可以这样理解:某一时刻来了15个请求来访问/sentinel/order/flow接口,但是服务器扛不住这么大的压力,于是设置了Warm Up的流控效果,这样既可以避免一瞬间将服务器打垮,又可以慢慢处理用户的请求,好比跑步热身的过程,第一公里配速8,第二公里配速7.5,第三公里配速630...,第十公里630。Warm Up还有一个默认的效果,即:第一秒处理3个请求,之后的每一秒都当前请求的基础上 + threshold/codeFactor,其中codeFactor的默认值为3

4.6.2、配置

4.6.3、代码

@SentinelResource(value = "flow",blockHandler = "flowBlockHandler")
@GetMapping("/flow")
public String flow() {
    return "flow success!(*^▽^*)";
}
public String flowBlockHandler(BlockException e) {
    log.error("出错了,error:{}",e.getMessage());
    e.printStackTrace();
    return "flow blocked!(灬ꈍ ꈍ灬)";
}

4.6.4、测试结果

4.7、实战(QPS + 直接 + 排队等待)

4.7.1、概述

        排队等待模式主要用于处理间隔性突发的流量,例如:消息队列。想像一下这样的场景,在某一秒有大量的请求过来,而接下来的一段时间服务器则处于空闲状态,我们希望希望能够在接下来的空闲时间里逐步处理请求,而不是第一秒直接拒绝多余的请求。生活中的案例:海底捞休息区排队等待,而不是餐桌满了之后直接将用餐的客人拒绝掉(老板打死你)

4.7.2、配置

4.7.3、代码

@SentinelResource(value = "flow",blockHandler = "flowBlockHandler")
@GetMapping("/flow")
public String flow() {
    return "flow success!(*^▽^*)";
}
public String flowBlockHandler(BlockException e) {
    log.error("出错了,error:{}",e.getMessage());
    e.printStackTrace();
    return "flow blocked!(灬ꈍ ꈍ灬)";
}

4.7.4、测试步骤

4.7.5、测试结果

五、熔断规则

5.1、概览

5.2、实战(慢调用比例)

5.2.1、概述

       慢调用比例是指客户端针对某个资源发起的一些列请求中,服务端响应时长大于自己所能忍受的最大时长的比例。例如客户端想访问资源 /sentinel/order/fusing,能接受的超时比例为0.1,即如果用户发起10个请求,这10个请求中,如果有一个响应时长大于客户端忍受的时长(RT对应的值,单位:毫秒),那么就会触发熔断。

5.2.2、配置

5.2.3、代码 

@GetMapping("/fusing")
public String fusing() {
    // 线程休眠(单位:秒)
    try { TimeUnit.SECONDS.sleep(2); } catch (Exception e) {e.printStackTrace();}
    log.info("fusing success!(*^▽^*)");
    return "fusing success!(*^▽^*)";
}

5.2.4、测试步骤

5.2.5、测试结果

5.3、实战(异常比例)

5.3.1、概述

        熔断规则的异常比例,顾名思义是指客户端发送的一系列请求中,异常比例达到多少是将会触发服务熔断。熔断期间,服务将不可用

5.3.2、配置

5.3.3、代码

@GetMapping("/fusingError")
public String fusingError() {
    int number = new Random().nextInt(10);
    log.info("number:{}", number);
    if (number < 5) {
        int i = 10 / 0;
    }
    return "(*^▽^*)";
}

5.3.4、测试结果

5.4、实战(异常数)

5.4.1、概述

        熔断规则的异常数,顾名思义是指,发送N个请求,当有M个是异常时,将会触发熔断。

5.4.2、配置

5.4.3、代码

@GetMapping("/fusingError")
public String fusingError() {
    int number = new Random().nextInt(10);
    log.info("number:{}", number);
    if (number < 5) {
        int i = 10 / 0;
    }
    return "(*^▽^*)";
}

5.4.4、测试结果

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[4K80 AI ISP IPC芯片]

4K80 AI ISP IPC芯片 Hi3403V100是一颗面向监控市场推出的专业 Ultra-HD Smart IP Camera SOC&#xff0c;该芯片最高支持四路sensor输入&#xff0c;支持最高4K60的ISP图像处理能力&#xff0c;支持3F WDR加粗样式、多级降噪、六轴防抖、硬件拼接等多种图像增强和处理算法&am…

easyrecovery16 (硬盘数据恢复软件)免费版

EasyRecovery是由球著名数据厂商Kroll Ontrack出品的一款便捷实用&#xff0c;功能强大的硬盘数据恢复软件。它能够全面恢复删除丢失数据&#xff0c;支持包括文档、表格、图片、音视频等各种文件类型。支持恢复不同存储介质数据&#xff1a;硬盘、光盘、U盘/移动硬盘、数码相机…

Vue3-35-路由-路由守卫的简单认识

什么是路由守卫 路由守卫&#xff0c;就是在 路由跳转 的过程中&#xff0c; 可以进行一些拦截&#xff0c;做一些逻辑判断&#xff0c; 控制该路由是否可以正常跳转的函数。常用的路由守卫有三个 &#xff1a; beforeEach() : 前置守卫&#xff0c;在路由 跳转前 就会被拦截&…

C++学习笔记——类作用域和抽象数据类型

目录 一、C类作用域 类内作用域 类外作用域 二、类作用域案列详细的解释说明 三、抽象数据类型 四、总结 类作用域 抽象数据类型&#xff08;ADT&#xff09; 五、图书馆管理系统 一、C类作用域 在C中&#xff0c;类作用域是指类定义中声明的标识符&#xff08;成员变…

【SpringCloud】之远程消费(进阶使用)

&#x1f389;&#x1f389;欢迎来到我的CSDN主页&#xff01;&#x1f389;&#x1f389; &#x1f3c5;我是君易--鑨&#xff0c;一个在CSDN分享笔记的博主。&#x1f4da;&#x1f4da; &#x1f31f;推荐给大家我的博客专栏《SpringCloud开发之远程消费》。&#x1f3af;&a…

Linux第12步_磁盘重新分区

解决“挂载后的U盘出现中文乱码”后&#xff0c;我们接着学习“磁盘重新分区”&#xff0c;熟悉fdisk命令。 1、删除磁盘的分区 输入“cd /回车”&#xff0c;进入根目录 输入“ls /dev/sd*回车”&#xff0c;显示dev以sd所有文件。 输入“sudo fdisk /dev/sdb1回车” 输入…

瑜亮之争有结果了,6GHz(6425-7125MHz)全部或部分频段划分用于IMT系统

文章目录 6GHz&#xff08;6425-7125MHz&#xff09;全部或部分频段划分用于IMT系统Wi-Fi 7 使用的频段Wi-Fi 7 与IMT使用的频段存在重叠频谱分配有讲究6GHz频段未来如何利用如何看待6GHz频段划入IMT关于Wi-Fi 7 与IMT关于Wi-Fi 7(IEEE 802.11be EHT)关于IMT(International Mob…

从零开始的OpenGL光栅化渲染器构建1

前言 参照Learnopengl&#xff0c;我开始回顾OpenGL中的内容&#xff0c;最终目标是构建一个玩具级的光栅化渲染器&#xff0c;最好还能和之前做的光线追踪渲染器相结合&#xff0c;希望能够有所收获吧~ 包管理 之前我用CMake配置过OpenGL的环境&#xff0c;这样做出来的项目…

Vue3 + Vite + TypeScript + Element-Plus:从零到一构建企业级后台管理系统(前后端开源)

vue3-element-admin 是基于 vue-element-admin 升级的 Vue3 Element Plus 版本的后台管理前端解决方案&#xff0c;技术栈为 Vue3 Vite4 TypeScript Element Plus Pinia Vue Router 等当前主流框架。 相较于其他管理前端框架&#xff0c;vue3-element-admin 的优势在于一…

Python 面向对象之多态和鸭子类型

Python 面向对象之多态和鸭子类型 【一】多态 【1】概念 多态是面向对象的三大特征之一多态&#xff1a;允许不同的对象对同一操作做出不同的反应多态可以提高代码的灵活性&#xff0c;可扩展性&#xff0c;简化代码逻辑 【2】代码解释 在植物大战僵尸中&#xff0c;有寒冰…

vite4项目中,vant兼容750适配

一般非vite项目&#xff0c;使用postcss-px-to-viewport。在设计稿为750时候&#xff0c;可使用以下配置兼容vant。 在vite4项目中&#xff0c;以上配置不行。需要调整下&#xff0c;使用postcss-px-to-viewport-8-plugin&#xff0c;并修改viewportWidth&#xff0c;具体如下…

2 @RequestMapping 注解

1. RequestMapping 概念 SpringMVC 使用RequestMapping 注解为控制器指定可以处理哪些 URL 请求在控制器的类定义及方法定义处都可标注 RequestMapping 标记在类上&#xff1a;提供初步的请求映射信息。相对于 WEB 应用的根目录标记在方法上&#xff1a;提供进一步的细分映射信…

大创项目推荐 深度学习图像风格迁移 - opencv python

文章目录 0 前言1 VGG网络2 风格迁移3 内容损失4 风格损失5 主代码实现6 迁移模型实现7 效果展示8 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 深度学习图像风格迁移 - opencv python 该项目较为新颖&#xff0c;适合作为竞赛课题…

遇见狂神说 Spring学习笔记(完整笔记+代码)

简介 Spring是一个开源的免费的框架&#xff08;容器&#xff09;Spring是一个轻量级的、非入侵式的框架控制反转(IOC&#xff09;&#xff0c;面向切面编程 (AOP)支持事务的处理&#xff0c;支持对框架进行整合 Spring就是一个轻量级的控制反转&#xff08;IOC&#xff09;和…

视频智能分析支持摄像头异常位移检测,监测摄像机异常位移变化,保障监控状态

我们经常在生产场景中会遇到摄像头经过风吹日晒&#xff0c;或者异常的触碰&#xff0c;导致了角度或者位置的变化&#xff0c;这种情况下&#xff0c;如果不及时做出调整&#xff0c;会导致原本的监控条件被破坏&#xff0c;发生事件需要追溯的时候&#xff0c;查不到对应位置…

01-线程池项目背景:C++的数据库操作

从0开始学习C与数据库的联动 1.原始方式-使用MySQL Connector/C 提供的API查询 1.1 数据库预操作 我的本地电脑上有mysql数据库&#xff0c;里面预先创建了一个database名叫chat&#xff0c;用户名root&#xff0c;密码password。 1.2 Visual Studio预操作 在Windows上使用…

Linux与C/C++服务器开发:深入探索网络编程与实用技术(文末送书)

&#x1f3a5; 屿小夏 &#xff1a; 个人主页 &#x1f525;个人专栏 &#xff1a; 书籍推荐 &#x1f304; 莫道桑榆晚&#xff0c;为霞尚满天&#xff01; 文章目录 &#x1f4d1;前言一. 构建高性能Linux C/C服务器1.1 优化服务器性能1.2 处理并发和并行性1.3 高效管理内存1…

dnSpy调试工具二次开发1-新增菜单

测试环境&#xff1a; window 10 visual studio 2019 版本号&#xff1a;16.11.15 .net framework 4.8 开发者工具包 下载 .NET Framework 4.8 | 免费官方下载 .net 5开发者工具包 下载 .NET 5.0 (Linux、macOS 和 Windows) 利用git拉取代码(源码地址&#xff1a;Gi…

TypeError: loaderUtils.getOptions is not a function

webpack 版本&#xff1a;^5.89.0 但是直接 pnpm add loader-utils 安装的版本比较新&#xff0c;会报错&#xff1a;TypeError: loaderUtils.getOptions is not a function。 解决方案&#xff1a;将低 loader-utils 版本&#xff0c;我这里使用 ^2.0.0 就不会再报这个错误了 …

Pandas DataFrame中将True/False映射到1/0

在本文中&#xff0c;我们将看到如何在Pandas DataFrame中将True/False映射到1/0。True/False到1/0的转换在执行计算时至关重要&#xff0c;并且可以轻松分析数据。 1. replace方法 在这个例子中&#xff0c;我们使用Pandas replace()方法将True/False映射到1/0。在这里&…