系列十一、(三)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、测试结果

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

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

相关文章

YOLOv8改进 | 损失篇 | VarifocalLoss密集目标检测专用损失函数 (VFLoss,原论文一比一复现)

一、本文介绍 本文给大家带来的是损失函数改进VFLoss损失函数,VFL是一种为密集目标检测器训练预测IoU-aware Classification Scores(IACS)的损失函数,我经过官方的版本将其集成在我们的YOLOv8的损失函数使用上,其中有很多使用的小细节(否则按照官方的版本使用根本拟合不了…

selenium元素单击不稳定解决方法

selenium自动化测试过程中&#xff0c;经常会发现某一元素单击&#xff0c;很不稳定&#xff0c;有时候执行了点击没有反映。 以下总结两种解决方法&#xff1a;都是通过js注入的方式去点击。 1.F12查一看&#xff0c;要点击的按钮&#xff0c;或连接&#xff0c;有没有οncl…

原生微信小程序AR(扫描指定图片显示glb模型)

效果 ar案例视频 准备&#xff1a;需要准备要扫描的图片地址和扫描成功后显示的模型 1.在components创建组件 index.js文件代码 Component({properties: {title: {type: String,value: ,},intro: {type: String,value: ,},hint: {type: String,value: ,},code: {type: String…

二叉树层次建树

#include <stdio.h> #include <stdlib.h>typedef char BiElemType; typedef struct BiTNode {BiElemType data;struct BiTNode *lChild;struct BiTNode *rChild;//左右节点 } BiTNode, *BiTree; //辅助队列 typedef struct tag {BiTree p;//树的某一个节点&#xf…

Python基础知识总结2——python中的字符串

python字符串 字符串基本特点空字符串和len()函数转义字符字符串拼接字符串复制不换行打印从控制台读取字符串replace() 实现字符串替换str()实现数字转型字符串使用[]提取字符字符串切片slice操作split()分割和join()合并字符串驻留机制和字符串比较字符串比较和同一性成员操作…

如何使用 Python 解决网络抓取中的 reCAPTCHA 问题

在网络抓取的领域&#xff0c;开发人员经常面临 reCAPTCHA 的障碍。为了区分人类和自动化机器人&#xff0c;reCAPTCHA 可能会成为那些试图从网站提取数据的人的沉痛阻碍。然而&#xff0c;借助 Python 和像 Capsolver 这样的工具&#xff0c;可以绕过 reCAPTCHA 并继续抓取有价…

shell 获取主机IP 脚本中使用IP 打印出来IP

目录 查看ip查看网关只查看ens33过滤ip拿到网卡名字对内容进行切片获取第一网卡IP &#xff08;head -1 表示第一个网卡&#xff09;脚本中打印IP 查看ip ip a 查看网关 ip r只查看ens33 ip a show dev ens33过滤ip ip a | grep -oE [0-9]\.[0-9]\.[0-9]\.[0-9] 拿到网卡名…

SQL的联合主键

在SQL中&#xff0c;联合主键是指由多个列组成的主键。联合主键的作用是确保每一行数据的唯一性&#xff0c;即组合列的值必须唯一。可以使用以下语法定义联合主键&#xff1a; CREATE TABLE 表名 (列1 数据类型,列2 数据类型,列3 数据类型,...PRIMARY KEY (列1, 列2, 列3, ..…

扩展 apiserver 连接认证 ip, apiserver证书更新

本文来自我的博客地址 文章目录 问题场景:问题分析:问题解决:查看 apiserver 证书支持的 ip 或 host使用 openssl 生成证书:再次查看 apiserver 证书支持的 ip 或 host 再次尝试将 master 加点加入参考 问题场景: k8s 1.28.1 集群后期新增 vip apiserver 证书不支持 vip 引入…

图像分割实战-系列教程11:U2NET显著性检测实战3

&#x1f341;&#x1f341;&#x1f341;图像分割实战-系列教程 总目录 有任何问题欢迎在下面留言 本篇文章的代码运行界面均在Pycharm中进行 本篇文章配套的代码资源已经上传 U2NET显著性检测实战1 U2NET显著性检测实战2 U2NET显著性检测实战3 6、上采样操作与REBNCONV def…

JS/JQ实现小程序/H5验证码页面

话不多说&#xff0c;先上效果图 核心代码 1、html/css关键代码 <div class"obtain-verification-code"><div class"obtain-verification-code-input-content"><input id"input-0" class"verification-code-input" m…

Spring Data Jpa 使用EntityManager执行SQL操作数据

使用EntityManager执行原生SQL语句可以通过createNativeQuery方法实现。以下是一个简单的例子&#xff0c;演示如何使用EntityManager执行SQL语句进行数据库操作。 import javax.persistence.EntityManager; import javax.persistence.PersistenceContext; import javax.trans…

Java学习笔记(四)——正则表达式

文章目录 正则表达式基本规则字符类(只匹配一个字符)预定义字符(只匹配一个字符)数量词练习正则表达式插件 爬虫利用正则表达式获取想要的内容爬取网络信息练习有条件的爬取贪婪爬取非贪婪爬取正则表达式在字符串中的使用 分组捕获分组正则表达式外部使用非捕获分组正则表达式忽…

MobaXterm SSH 免密登录配置

文章目录 1.简介2.SSH 免密登录配置第一步&#xff1a;点击 Session第二步&#xff1a;选择 SSH第三步&#xff1a;输入服务器地址与用户名第四步&#xff1a;设置会话名称第五步&#xff1a;点击 OK 并输入密码 3.密码管理4.小结参考文献 1.简介 MobaXterm 是一个功能强大的终…

智能座舱的下一个价值“爆点”——让“光”更智能

汽车智能化快速升级&#xff0c;智能座舱作为人机交互的主要窗口&#xff0c;交互模态、用户体验也呈现多维度升级。 例如&#xff0c;今年下半年上市的多款高端智能车型纷纷基于高性能座舱硬件平台&#xff0c;集成了AR-HUD、DMS/OMS等高阶功能&#xff0c;同时结合超大屏/多…

Transformer 的双向编码器表示 (BERT)

一、说明 本文介绍语言句法中&#xff0c;最可能的单词填空在self-attention的表现形式&#xff0c;以及内部原理的介绍。 二、关于本文概述 在我之前的博客中&#xff0c;我们研究了关于生成式预训练 Transformer 的完整概述&#xff0c;关于生成式预训练 Transformer (GPT) 的…

VMware ESXI 8 安装ipmitool 调整戴尔服务器风扇转速

本文内容适合ESXI 8版本安装ipmitool &#xff0c;进行管理&#xff0c;已知的是8.0以上版本无法安装社区的vib.所以需要自己编译文件&#xff0c;7.0及之前的版本可以安装vib版本的ipmtools。 一、编译好的适用于esxi8的ipmitool下载 ipmitool下载 二、安装ipmitool 1、开…

基于spark的Hive2Pg数据同步组件

一、背景 Hive中的数据需要同步到pg供在线使用&#xff0c;通常sqoop具有数据同步的功能&#xff0c;但是sqoop具有一定的问题&#xff0c;比如对数据的切分碰到数据字段存在异常的情况下&#xff0c;数据字段的空值率高、数据字段重复太多&#xff0c;影响sqoop的分区策略&…

软件工程:数据流图相关知识和多实例分析

目录 一、数据流图相关知识 1. 基本介绍 2. 常用符号 3. 附加符号 二、数据流图实例分析 1. 活期存取款业务处理系统 2. 工资计算系统 3. 商业自动化系统 4. 学校人事管理系统 5. 教材征订系统 6. 高考录取统分子系统 7. 订货系统 8. 培训中心管理系统 9. 考务处…

​已解决java.lang.ArrayIndexOutOfBoundsException异常的正确解决方法,亲测有效!!!​

已解决java.lang.ArrayIndexOutOfBoundsException异常的正确解决方法&#xff0c;亲测有效&#xff01;&#xff01;&#xff01; 目录 报错问题 解决思路 解决方法 总结 Q1 - 报错问题 java.long.ArrayIndexOutOfBoundsException 是Java中的一个运行时异常​&#xff0c…