SpringCloud Alibaba Sentinel 流量控制之流控模式实践总结

官网文档:https://sentinelguard.io/zh-cn/docs/flow-control.html

wiki地址:https://github.com/alibaba/Sentinel/wiki/%E6%B5%81%E9%87%8F%E6%8E%A7%E5%88%B6

本文版本:spring-cloud-starter-alibaba:2.2.0.RELEASE

在这里插入图片描述
在这里插入图片描述

如下图所示,我们可以针对某个资源添加流控规则,流控模式有直接、关联和链路。

在这里插入图片描述

【1】直接

添加流控规则如下,阈值类型为QPS,单机阈值为1。表示1秒钟内查询1次就是OK,若超过次数1,就直接-快速失败,报默认错误。
在这里插入图片描述

浏览器频繁访问 :http://localhost:8401/testA ,将会抛出异常信息Blocked by Sentinel (flow limiting)。

在这里插入图片描述

需要说明的是,在未做持久化前,每次服务实例的重启都会清空流控规则。

【2】关联

当两个资源之间具有资源争抢或者依赖关系的时候,这两个资源便具有了关联。

比如对数据库同一个字段的读操作和写操作存在争抢,读的速度过高会影响写得速度,写的速度过高会影响读的速度。如果放任读写操作争抢资源,则争抢本身带来的开销会降低整体的吞吐量。

可使用关联限流来避免具有关联关系的资源之间过度的争抢。举例来说,read_db 和 write_db 这两个资源分别代表数据库读写,我们可以给 read_db 设置限流规则来达到写优先的目的:设置 FlowRule.strategy 为 RuleConstant.RELATE 同时设置 FlowRule.ref_identity 为 write_db。这样当写库操作过于频繁时,读数据的请求会被限流。

简单来说就是:当与A关联的资源B达到阀值后,就限流A自己。

如下,我们给资源B设置规则:QPS/1

在这里插入图片描述

我们给资源A修改规则:即只有当B触发限流时,A的QPS/1这个规则才生效

在这里插入图片描述

如下下图所示,如果B未触发限流,那么A的QPS/1是不生效的。
在这里插入图片描述

然后同时请求资源A、资源B,使B达到阈值,此时A也会返回错误信息。

在这里插入图片描述

【3】链路

在这里插入图片描述
简单来讲,资源的链路入口方将会受规则控制,其他的调用不关心。

添加pom文件

<dependency><groupId>com.alibaba.csp</groupId><artifactId>sentinel-web-servlet</artifactId>
</dependency>

添加配置类:

@Configuration
public class FilterContextConfig {@Beanpublic FilterRegistrationBean sentinelFilterRegistration() {FilterRegistrationBean registration = new FilterRegistrationBean();registration.setFilter(new CommonFilter());registration.addUrlPatterns("/*");// 入口资源关闭聚合registration.addInitParameter(CommonFilter.WEB_CONTEXT_UNIFY, "false");registration.setName("sentinelFilter");registration.setOrder(1);return registration;}
}

定义一个service资源:

@Service
public class JaneService {// 定义限流资源@SentinelResource("common")public String common(){return "common";}
}

定义controller:

@Autowired
JaneService janeService;@GetMapping("/testA")
public String testA(){janeService.common();return "testA";
}@GetMapping("/testB")
public String testB(){janeService.common();return "testB";
}

给common添加链路规则:
在这里插入图片描述
这样频繁请求testA将会报错,但是频繁请求testB正常,说明我们的链路控制生效。

在这里插入图片描述

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

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

相关文章

企业如何选择合适的CRM工具?除Salesforce之外的10大主流选择

对比salesforce&#xff0c;其他10款优秀CRM&#xff1a;纷享销客CRM、Zoho CRM、腾讯企点、销售易、企业微信 (WeCom)、Odoo CR、OroCRM、金蝶、用友CRM、EspoCRM 虽然Salesforce以其全面的功能和强大的市场占有率在海外收获了许多客户&#xff0c;但Salesforce在国内市场的接…

多环境镜像晋级/复用最佳实践

作者&#xff1a;木烟 本文主要介绍镜像构建部署场景&#xff0c;多环境镜像晋级/复用最佳实践&#xff0c;保证“所发即所测”。 场景介绍 应用研发场景有效地管理镜像产物是确保软件快速、安全、可靠部署的关键环节。通常一个应用研发需要经过测试、预发、生产各个阶段&am…

Windows下MySQL数据库定期备份SQL文件与删除历史备份文件.bat脚本

目录 一、功能需求 二、解决方案 (1)新建文件夹及批处理文件 (2)编写备份脚本 ①完整脚本 ②参数修改 (3)编写定期删除备份脚本 ①根据文件名识别日期进行删除 ② 根据文件的修改日期删除 (4)设置定时器 (5)常见报错与处理 一、功能需求 在Windows系统下…

C++使用Poco库指定网卡去接收组播数据

0x00 1、以下代码封装了一个UDP接收组播数据的类&#xff0c;第一个构造函数 Poco::Net::DatagramSocket 类可以实现UDP单播数据的接收、发送以及往组播发送数据&#xff0c;第二个构造函数使用Poco::Net::MulticastSocket类去接收组播数据&#xff0c;UdpUnit类中成员函数Rec…

minSdkVersion、targetSdkVersion、compileSdkVersion三者的作用解析

minSDK和targetSDK&#xff0c;这两者相当于一个区间。你能够用到targetSDK中最新的API和最酷的新功能&#xff0c;但又需要向后(向下)兼容到minSDK&#xff0c;保证这个区间内的设备都能够正常的执行你的APP。换句话说&#xff0c;想使用Android刚刚推出的新特性&#xff0c;但…

JAVA 注解搜索工具类与注解原理讲解(获取方法和类上所有的某个注解,父类继承的注解也支持获取)

文章目录 JAVA 注解搜索工具类与注解原理讲解&#xff08;获取方法和类上所有的某个注解&#xff0c;父类继承的注解也支持获取&#xff09;代码测试方法上加注解&#xff0c;类上不加类上加注解、方法上加注解 注解原理性能测试 JAVA 注解搜索工具类与注解原理讲解&#xff08…

音视频开发_SDL多线程

今天将向大家介绍一下SDL中的多线程的使用。通过下面对SDL 线程与锁相关的API介绍&#xff0c;你会发现&#xff0c;它与 Linux, Windows相关的API几乎是一模一样的。从这里可以推断出&#xff0c;其实SDL对于多线程的处理只是为大家提供了一套统一接口&#xff0c;并没有做其它…

汉化版PSAI全面测评,探索国产AI绘画软件的创新力量

引言 随着AI技术的飞速发展&#xff0c;图像处理和绘画领域迎来了新的变革。作为一名AIGC测评博主&#xff0c;今天我们测评的是一款国产AI绘画软件——StartAI&#xff0c;一句话总结&#xff1a;它不仅在技术上毫不逊色于国际大牌&#xff0c;更在用户体验和本地化服务上做到…

Python sorted()方法

sorted() 是Python中的一个内置函数&#xff0c;用于对可迭代对象进行排序。它返回一个新的已排序的列表&#xff0c;而不会修改原始的可迭代对象。sorted() 函数的基本语法如下&#xff1a; sorted(iterable, keyNone, reverseFalse)参数解释&#xff1a; iterable&#xff…

AI 克隆声音,只需 3 分钟(附最全教程)

作者&#xff1a;寒斜 继生成式文本大模型 Chatgpt&#xff0c;生成式图片 Stablediffusion 之后生成式语音 Text To Speech 在开源社区也出现了一匹黑马&#xff0c;就是 GPT-Sovits [ 1] 。 之所以说他是黑马&#xff0c;让人觉得惊艳&#xff0c;是因为在语音效果克隆上做…

github安全问题token和sshkeys

文章目录 sshkeys问题问题方法一:方法二:获取密钥添加密钥token问题问题:生成tokens设置tokenssshkeys问题 问题 当我们git clone代码时,会报如下错误,此时有2种解决方法。 git clone git@github.com:gjianw217/xboard-uboot.git Cloning into xboard-uboot... Permissio…

数据分析必备:一步步教你如何用matplotlib做数据可视化(6)

1、Matplotlib 网格 axes对象的grid()函数将图中网格的可见性设置为on或off。还可以显示网格的主要/次要(或两者)刻度。另外&#xff0c;可以在grid()函数中设置color&#xff0c;linestyle和linewidth属性。 参考以下示例代码 import matplotlib.pyplot as plt import numpy…

14K屏FPGA通过MIPI接口点亮

一、屏参数 屏分辨率为13320*5120&#xff0c;MIPI接口8 LANE。 二、驱动接口电路 屏偏置电压5.5V&#xff0c;逻辑供电1.8V。8 LANE MIPI&#xff0c;2 PORT。 三、MIPI DSI规范 DCS (Display Command Set)&#xff1a;DCS是一个标准化的命令集&#xff0c;用于命令模式的显…

微信公众号开发要点笔记

为了识别用户&#xff0c;每个用户针对每个公众号会产生一个安全的OpenID&#xff0c;如果需要在多公众号、移动应用之间做用户共通&#xff0c;则需前往微信开放平台&#xff0c;将这些公众号和应用绑定到一个开放平台账号下&#xff0c;绑定后&#xff0c;一个用户虽然对多个…

整理好了!2024年最常见 20 道设计模式面试题(五)

上一篇地址&#xff1a;整理好了&#xff01;2024年最常见 20 道设计模式面试题&#xff08;四&#xff09;-CSDN博客 九、什么是命令模式&#xff1f;它如何帮助实现解耦&#xff1f; 命令模式&#xff08;Command Pattern&#xff09;是一种行为设计模式&#xff0c;它将一…

奇怪的bug

奇怪的bug 合集 1.不可见字符集问题 起因是在自己做小项目的时候&#xff0c;通过lombok的data注解&#xff0c;默认生成实体类的get set方法 但是在某个方法中获取一个属性值的时候显示找不到该属性值的get方法&#xff0c;具体直接贴图 我以为是lombok的配置问题&#xff0c…

ubuntu设置静态ip地址

首先&#xff0c;查看ip地址可以使用&#xff1a; ifconfig 例如&#xff0c;出现如下结果&#xff1a; 然后&#xff0c;需要查看本地的gateway以及dns&#xff0c;可以使用&#xff1a; nmcli device show例如&#xff1a; 接下来说明一下如何设置静态ip&#xff1a;

揭秘后勤报修管理系统:目的明确,功能设计模块助您轻松管理

在数字化、信息化飞速发展的今天&#xff0c;企业后勤报修也迎来了前所未有的变革。传统的报修方式&#xff0c;如电话报修、纸质报修单等&#xff0c;已逐渐无法满足现代企事业单位对高效、便捷、精准报修服务的需求。因此&#xff0c;后勤报修管理系统应运而生&#xff0c;后…

鸣人的影分身(DP)

在火影忍者的世界里&#xff0c;令敌人捉摸不透是非常关键的。 我们的主角漩涡鸣人所拥有的一个招数——多重影分身之术——就是一个很好的例子。 影分身是由鸣人身体的查克拉能量制造的&#xff0c;使用的查克拉越多&#xff0c;制造出的影分身越强。 针对不同的作战情况&a…

C#友元函数与友元类

在C#中&#xff0c;并没有像C那样的友元函数和友元类的直接语法支持。C#中的访问控制是通过public、private、protected等访问修饰符来实现的&#xff0c;而不是通过友元的概念。 友元函数与友元类的概念 在C中&#xff0c;友元函数和友元类允许一个类或者函数访问另一个类的…