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

一、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、测试结果

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

每10分钟一更新的实时卫星影像

我们为大家分享了一个可以查看下载高时效卫星影像的方法。 这里再为大家推荐一个可以查看近乎实时的卫星影像的网站&#xff0c;卫星影像每10分钟更新一次。 实时卫星影像 打开网站&#xff08;zoom.earth&#xff09;&#xff0c;可以查看实时卫星影像画面&#xff0c;在左…

[C#]C# OpenVINO部署yolov8图像分类模型

【官方框架地址】 https://github.com/ultralytics/ultralytics.git 【算法介绍】 YOLOv8 抛弃了前几代模型的 Anchor-Base。 YOLO 是一种基于图像全局信息进行预测的目标检测系统。自 2015 年 Joseph Redmon、Ali Farhadi 等人提出初代模型以来&#xff0c;领域内的研究者们…

2024年天津体育学院专升本专业考试考生入场及考前须知

天津体育学院2024年高职升本科招生专业考试考生考前须知 一、考生入场及考试要求 1.考生于1月6日笔试考试当天&#xff0c;根据考试时间提前30分钟到达天津体育学院新校区东门&#xff0c;凭专业考试准考证、有效身份证原件&#xff0c;经查验合格后方可允许进入学校。 2.笔…

python语言在web上的应用:如何节省服务器资源?

背景介绍​ 在web开发中的应用广泛​ 在web开发中的应用广泛。随着互联网的发展&#xff0c;web应用越来越普遍&#xff0c;而Python作为一种简洁、高效的编程语言&#xff0c;被广泛应用于web开发领域。Python提供了丰富的库和框架&#xff0c;如Django、Flask等&#xff0c…

软件验收测试计划、验收测试报告案例模板参考

1. 概述 1.1. 编写目的 1.2. 测试背景 1.3. 测试依据 1.4. 测试对象 1.5. 测试资源 2. 测试方式与环境 2.1. 测试方式 2.2. 测试环境 3. 测试结果 3.1. 功能适合性和准确性 3.1.1. 总体统计 3.1.2. 详细结果 3.2. 安全性 3.3. 可靠性和性能 4. 总体分析 5. 测试…

数字逻辑电路入门:从晶体管到逻辑门

数字逻辑电路入门&#xff1a;从晶体管到逻辑门 这是数字逻辑电路中最基础的部分。但是并非那么容易理解。 1、晶体管 mosfet&#xff1a;场效应晶体管&#xff0c;是电压控制元件。cmos&#xff1a;是指由mos管构成的门级电路通常是互补的。BJT&#xff1a;一种三极管&…

视频智能分析/云存储平台EasyCVR接入海康SDK,通道名称未自动更新该如何解决?

视频监控GB28181平台EasyCVR能在复杂的网络环境中&#xff0c;将分散的各类视频资源进行统一汇聚、整合、集中管理&#xff0c;在视频监控播放上&#xff0c;TSINGSEE青犀视频安防监控汇聚平台可支持1、4、9、16个画面窗口播放&#xff0c;可同时播放多路视频流&#xff0c;也能…

c++-智能指针

1、概念 堆内存的对象需要手动使用delete销毁&#xff0c;如果忘记使用delete销毁就会造成内存泄漏。 所以C在ISO 98标注中引入了智能指针的概念&#xff0c;并在C11 中趋于完善。 使用智能指针可以让堆内存对象具有栈内存对象的特性。原理时给需要自动回收的堆内存对象套上一层…

C++-异常处理

1、概念 异常时程序在执行期间产生的问题。C异常是指在程序运行时发生的特殊情况。比如string::at函数下标越界等。 异常提供了一种转移程序控制权的方式。 一旦程序出现异常没有经过处理&#xff0c;就会造成程序运行崩溃。 处理异常的方式有&#xff1a;抛出异常&#xff08;…

选择排序!!!基础排序详解 C语言版

目录 1.什么是选择排序 2.选择排序源代码 3.优化代码 1.什么是选择排序 这是一个选择排序的流程图&#xff0c;其实很简单&#xff0c;就是每次挑选数字中最小的作为第一个 &#xff0c;直到整个数据有序就结束了 顾名思义&#xff0c;选择&#xff0c;那就是选取&#xff0c…

css的一些属性

我们在写项目的时候&#xff0c;会遇到多种多样的样式&#xff0c;大部分都是由css来实现的&#xff0c;css可以让我们的页面更美观&#xff0c;css通常是配合HTML使用&#xff0c;代码较为简单! 下面我就给大家举几个较为常用的一些css属性。 1.CSS中怎样让元素圆角化&#…

【Axure高保真原型】树形表格_多选效果

今天和大家分享树形表格_多选效果的原型模板&#xff0c;点击树的箭头可以展开或者收起子节点&#xff0c;点击多选按钮可以选中或取消选择该行以及子级行内容&#xff0c;同时反选父级行内容&#xff0c;父级行内容能根据子级选中的数量自动反选&#xff0c;包括全选、半选和未…

听GPT 讲Rust源代码--compiler(24)

File: rust/compiler/rustc_target/src/spec/armv7_unknown_linux_uclibceabi.rs 该文件的作用是定义了ARMv7架构使用uClibc-eabi工具链时的目标环境配置。 在Rust中&#xff0c;针对不同的目标平台&#xff0c;需要提供对应的配置文件以确保正确地编译和链接代码。这些配置文件…

小红书投放策略分析,如何打造个性化内容?

作为一个发展多年的成熟内容平台&#xff0c;小红书不同于其他平台&#xff0c;其用户数与影响力&#xff0c;一直处于不断增长中。因而作为品牌方&#xff0c;想要充分得到平台的流量红利&#xff0c;就必须学会制定小红书投放策略。今天&#xff0c;我们和大家分享下小红书投…

PyQT5实现图像处理应用(含Windows7下完整打包方案)

目录 1、任务概述2、环境安装2.1 创建虚拟环境2.2 安装依赖库 3、程序开发3.1 框架搭建3.2 读取图像3.3 图像处理 4、打包部署5、小结 1、任务概述 本篇博文将通过PyQT5来实现一个简单的图像处理应用&#xff0c;并完成打包部署。 本文开发平台&#xff1a;Windows10 64位系统…

Python PDF处理模块pypdf库详解

概要 PDF&#xff08;Portable Document Format&#xff09;是一种常见的文档格式&#xff0c;广泛用于存储和共享文本和图像数据。在 Python 中&#xff0c;有许多库可以用于处理 PDF 文件&#xff0c;其中之一就是 PyPDF。PyPDF 是一个功能强大的库&#xff0c;它允许你读取…

Linux入门攻坚——11、Linux网络属性配置相关知识1

网络基础知识&#xff1a; 局域网&#xff1a;以太网&#xff0c;令牌环网&#xff0c; Ethernet&#xff1a;CSMA/CD 冲突域 广播域 MAC&#xff1a;Media Access Control&#xff0c;共48bit&#xff0c;前24bit需要机构分配&#xff0c;后24bit自己…

指针

1、基本用法 2、概念 在C语言中&#xff0c;内存单元的地址称为指针&#xff0c;专门用来存放地址的变量&#xff0c;有时对地址&#xff0c;指针和指针变量不区分&#xff0c;统称指针。&#xff08;地址指针&#xff09;

UV胶水与聚氯乙烯PVC材料的塑料粘接,效果如何?

UV胶水可以与聚氯乙烯PVC很好地粘接。 PVC是一种常见的塑料材料&#xff0c;UV胶水通常对PVC具有良好的粘接性能。UV胶水可以在紫外线照射下迅速固化&#xff0c;形成坚固的粘接&#xff0c;因此通常被用于PVC制品的粘接和修复。 UV胶水与PVC粘接的优点&#xff1a; 1. 快速固…

C++ UTF-8与GBK字符的转换 —基于Windows (MultiByteToWideChar WideCharToMultiByte)

1、UTF-8 和 GBK 的区别 GBK&#xff1a;通常简称 GB &#xff08;“国标”汉语拼音首字母&#xff09;&#xff0c;GBK 包含全部中文字符。 UTF-8 &#xff1a;是一种国际化的编码方式&#xff0c;包含了世界上大部分的语种文字&#xff08;简体中文字、繁体中文字、英文、…