三十八、流控效果、热点数据限流、熔断降级、push到配置中心nacos

news2024/11/19 22:40:11

1、流控效果

流控效果是指请求达到流控阈值时应该采取的措施,包括三种:

快速失败:达到阈值后,新的请求会被立即拒绝并抛出FlowException异常。是默认的处理方式。

warm up:预热模式,对超出阈值的请求同样是拒绝并抛出异常。但这种模式阈值会动态变化,从一个较小值逐渐增加到最大阈值。

排队等待:让所有的请求按照先后次序排队执行,两个请求的间隔不能小于指定时长

1.1流控效果-warm up

warm up也叫预热模式,是应对服务冷启动的一种方案。请求阈值初始值是 threshold / coldFactor,持续指定时长后,逐渐提高到threshold值。而coldFactor的默认值是3.

例如,我设置QPSthreshold10,预热时间为5秒,那么初始阈值就是 10 / 3 ,也就是3,然后在5秒后逐渐增长到10

需求:给/order/getInfo 这个资源设置限流,最大QPS10,利用warm up效果,预热时长为5秒。

 

预热模式 

1.2流控效果-排队等待

当请求超过QPS阈值时,快速失败和warm up 会拒绝新的请求并抛出异常。而排队等待则是让所有请求进入一个队列中,然后按照阈值允许的时间间隔依次执行。后来的请求必须等待前面执行完成,如果请求预期的等待时间超出最大时长,则会被拒绝。

在某一时刻,服务很忙,而其他时刻,服务很闲。

例如:QPS = 5,意味着每200ms处理一个队列中的请求;timeout = 2000,意味着预期等待超过2000ms的请求会被拒绝并抛出异常。

需求:给/order/{orderId}这个资源设置限流,最大QPS10,利用排队的流控效果,超时时长设置为5s

一开始超出阈值,会在队列里,排队等待

总结

流控效果有哪些?

快速失败:QPS超过阈值时,拒绝新的请求

warm up QPS超过阈值时,拒绝新的请求;QPS阈值是逐渐提升的,可以避免冷启动时高并发导致服务宕机。

排队等待:请求会进入队列,按照阈值允许的时间间隔依次执行请求;如果请求预期等待时长大于超时时间,直接拒绝

2、热点参数限流

之前的限流是统计访问某个资源的所有请求,判断是否超过QPS阈值。而热点参数限流是分别统计参数值相同的请求,判断是否超过QPS阈值。

代表的含义是:对hot这个资源的0号参数(第一个参数)做统计,每1相同参数值的请求数不能超过5个。

在热点参数限流的高级选项中,可以对部分参数设置例外配置:

结合上一个配置,这里的含义是对0号的long类型参数限流,每1秒相同参数的QPS不能超过5,有两个例外:

    如果参数值是100,则每1秒允许的QPS10

    如果参数值是101,则每1秒允许的QPS15

需求:给/order/{orderId}这个资源添加热点参数限流,规则如下:

默认的热点参数规则是每 1 秒请求量不超过 2
102 这个参数设置例外:每 1 秒请求量不超过 4

        给103这个参数设置例外:每1秒请求量不超过10

 controller中的接口默认无效,使用SentinelResouce注解的资源有效

    @GetMapping("{id}")
    @SentinelResource("hot")
    public String hello(@PathVariable Integer id){
        return "hello====="+id;
    }

3、隔离和降级 

 虽然限流可以尽量避免因高并发而引起的服务故障,但服务还会因为其它原因而故障。而要将这些故障控制在一定范围,避免雪崩,就要靠线程隔离(舱壁模式)和熔断降级手段了。

不管是线程隔离还是熔断降级,都是对客户端(调用方)的保护。

3.1Feign整合Sentinel 

SpringCloud中,微服务调用都是通过Feign来实现的,因此做客户端保护必须整合FeignSentinel

3.2 开启FeignSentinel功能

开启feign整合sentinel功能

#开启feign整合sentinel的功能
feign.sentinel.enabled=true

3.3  ProductFeignFactory

创建feign接口的降级类  兜底类

package com.aaa.order.feign.factory;

import com.aaa.order.feign.ProductFeign;
import com.aaa.pojo.Product;
import feign.hystrix.FallbackFactory;

/**
 * @program: parent
 * @author: Jmy
 * @create: 2023-05-18 21:55
 * 兜底方法 熔断降级
 **/

@Component
public class ProductFeignFactory implements FallbackFactory<ProductFeign> {
    @Override
    public ProductFeign create(Throwable throwable) {
        //匿名实现类
        return new ProductFeign() {
            @Override
            public Product getById(Integer pid) {
                Product product = new Product();
                product.setPid(-1);
                product.setPname("商品服务出现故障");
                return product;
            }
        };
    }
}

在@FeignClient(fallbackFactory = ProductFeignFactory.class)

package com.aaa.order.feign;

import com.aaa.order.feign.factory.ProductFeignFactory;
import com.aaa.pojo.Product;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;

/**
 * @program: parent
 * @author: Jmy
 * @create: 2023-05-14 14:18
 **/

//@FeignClient(value="服务提供者的名字")
@FeignClient(value = "qy163-product",fallbackFactory = ProductFeignFactory.class)
public interface ProductFeign {

    //抽象方法一定要和服务提供者的接口方法一模一样
    @GetMapping("/product/getById/{pid}")
    public Product getById(@PathVariable Integer pid);
}

有异常,降级处理

给productController加一个异常,重启服务

浏览器访问

4、熔断降级

熔断降级是解决雪崩问题的重要手段。其思路是由断路器统计服务调用的异常比例、慢请求比例,如果超出阈值则会熔断该服务。即拦截访问该服务的一切请求;而当服务恢复时,断路器会放行访问该服务的请求。

4.1熔断策略-慢调用

断路器熔断策略有三种:慢调用、异常比例、异常数

慢调用:业务的响应时长(RT)大于指定时长的请求认定为慢调用请求。在指定时间内,如果请求数量超过设定的最小数量,慢调用比例大于设定的阈值,则触发熔断。例如:

解读RT超过500ms的调用是慢调用,统计最近10000ms内的请求,如果请求量超过10次,并且慢调用比例不低于0.5,则触发熔断,熔断时长为5秒。然后进入half-open状态,放行一次请求做测试。

4.2熔断策略-慢调用

需求:给 ProductFeign的查询商品接口设置降级规则,慢调用的RT阈值为50ms,统计时间为1秒,最小请求数量为5,失败阈值比例为0.4,熔断时长为5

提示:为了触发慢调用规则,我们需要修改UserService中的业务,增加业务耗时:

浏览器访问

10秒后断路器进入半开状态,打开一个实验

在这期间访问其他id也会降级处理

5、push到配置中心nacos

sentinel 的持久化,我们希望这样:

  • 可以在 sentinel 控制台中编辑 限流配置,并且同步到 nacos 做持久化

  • 在 nacos 中修改了限流配置,也可以同步到 sentinel 控制台

要实现上述第一个功能需要对 sentinel 控制台的源码有所了解,并加依改造。

但 GitHub 上已经有人改造好了,做了个加强版 控制台。

https://github.com/CHENZHENNAME/sentinel-dashboard-nacos

打开上述网址 下载到本地

5.1sentinel持久化的安装

(1)解压

(2)打开根目录下的 pom.xml ,修改 sentinel 的版本  

ctrl+s保存

(3)进入项目根目录,cmd,执行命令 mvn clean package  

 

打包后生产在target目录下

(4)执行命令,启动控制台:

java -Dserver.port=8070 -Dnacos.serverAddr=localhost:8848  -jar sentinel-dashboard.jar

# -Dserver.port 控制台端口号
# -Dnacos.serverAddr: nacos 地址
# -Dnacos.namespace: 你项目所在的 nacos 命名空间  如果命名空间就是public可以省略该参数

放在sentinel界面

谷歌浏览器出不来,换成了edge浏览器

5.2微服务客户端接入sentinel控制面板

(1)依赖

        <dependency>
            <groupId>com.alibaba.csp</groupId>
            <artifactId>sentinel-datasource-nacos</artifactId>
            <version>1.8.1</version>
        </dependency>

(2)修改配置文件

spring.cloud.sentinel.transport.dashboard=localhost:8070
spring.cloud.sentinel.datasource.ds1-flow.nacos.server-addr=localhost:8848
spring.cloud.sentinel.datasource.ds1-flow.nacos.data-id=${spring.application.name}-flow-rules
# 还可以是 degrade authority param-flow
spring.cloud.sentinel.datasource.ds1-flow.nacos.rule-type=flow
spring.cloud.sentinel.datasource.ds1-flow.nacos.data-type=json
spring.cloud.sentinel.datasource.ds1-flow.nacos.group-id=SENTINEL_GROUP

(3)启动微服务

浏览器访问  http://localhost:8090/order/getInfo  最开始什么都没有,然后访问你自己的项目的任意一个要限流的接口,则 左侧会出现对于的 服务名称

点击 簇点链路,新增 一个流控规则:

当你在 sentinel 控制台中,无论增加规则,还是修改规则,都会同步到 nacos;相反,修改 nacos 中 配置文件的限流规则,也会同步到 sentinel 。

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

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

相关文章

OpenAI的巨额捐款背后,马斯克到底捐了多少?

来源&#xff1a;Techcrunch 作者&#xff1a;Mark Harris 编译&#xff1a;巴比特 自 2018 年 2 月退出 OpenAI 董事会以来&#xff0c;埃隆马斯克&#xff08;Elon Musk&#xff09;一直对 OpenAI 深感失望&#xff0c;这已不是什么秘密&#xff0c;最终他在一封公开信中呼吁…

每日涨停个股增量加入股票池,持续跟踪走势!股票量化分析工具QTYX-V2.6.5

功能概述 目前A股市场的股票每天是有限制最大涨幅的&#xff0c;也就是涨停的概念。比如主板个股最大涨幅是10%&#xff0c;创业板个股最大涨幅是20%等。 对于个股而言并不是随随便便就能被推到涨停板的。或是因为股票发生了重大的利好&#xff08;资产重组、政策利好、业绩暴增…

【Linux】——常见指令及权限理解

文章目录 1. 前言2. 用户管理3. 常见基本指令3.1 ls指令3.2 pwd指令3.3 cd指令3.4 touch指令3.5 mkdir指令3.6 rmdir指令和rm指令3.7 man指令3.8 cp指令3.9 mv指令3.10 cat指令3.11 more指令3.12 less指令3.13 head指令3.14 tail指令3.15 时间相关的指令3.16 cal指令3.17 find指…

价格战一触即发!阿里云、腾讯云、移动云“先降为敬”

‍数据智能产业创新服务媒体 ——聚焦数智 改变商业 5月16日&#xff0c;中国第三大云计算厂商腾讯云&#xff0c;宣布对多款核心云产品降价&#xff1b;随后&#xff0c;移动云也宣布了对多款云产品降价。如今&#xff0c;已有三家云厂商对产品进行降价。开第一枪的便是市场份…

MoJo:比Python快35000倍的全新编程语言!

大家注意&#xff1a;因为微信最近又改了推送机制&#xff0c;经常有小伙伴说错过了之前被删的文章&#xff0c;比如前阵子冒着风险写的爬虫&#xff0c;再比如一些限时福利&#xff0c;错过了就是错过了。 所以建议大家加个星标&#xff0c;就能第一时间收到推送。&#x1f44…

炼丹师,这是你的梦中情炉吗?

一, 炼丹之痛 无论是学术研究还是工业落地&#xff0c;pytorch几乎都是目前炼丹的首选框架。 pytorch的胜出不仅在于其简洁一致的api设计&#xff0c;更在于其生态中丰富和强大的模型库。 但是我们会发现不同的pytorch模型库提供的训练和验证代码非常不一样。 torchvision官方…

社区供稿 | 中文 LangChain 项目的实现开源工作

Chinese-LangChain 是 yanqiangmiffy 同学的开源项目https://hf.co/spaces/ChallengeHub/Chinese-LangChainhttps://github.com/yanqiangmiffy/Chinese-LangChain 中文 langchain 项目&#xff0c;基于 ChatGLM-6b langchain 实现本地化知识库检索与智能答案生成。 LangChain …

YOLOv5+姿态估计HRnet与SimDR检测视频中的人体关键点

一、前言 由于工程项目中需要对视频中的person进行关键点检测&#xff0c;我测试各个算法后&#xff0c;并没有采用比较应用化成熟的Openpose&#xff0c;决定采用检测精度更高的HRnet系列。但是由于官方给的算法只能测试数据集&#xff0c;需要自己根据算法模型编写实例化代码…

[网络安全]XSS之Cookie外带攻击姿势及例题详析

[网络安全]XSS之Cookie外带攻击姿势及例题详析 概念姿势及Payload启动HTTP协议 method1启动HTTP协议 method2 例题详析Payload1Payload2window.open 总结 本文仅分享XSS攻击知识&#xff0c;不承担任何法律责任。 本文涉及的软件等请读者自行安装&#xff0c;本文不再赘述。 概…

Node.js 学习系列(五)—— 文件系统

Node.js 提供一组类似 UNIX&#xff08;POSIX&#xff09; 标准的文件操作API。 Node 导入文件系统模块 (fs) 语法如下所示&#xff1a; var fs require("fs")异步和同步 Node.js 文件系统&#xff08;fs 模块&#xff09;模块中的方法均有异步和同步版本。 读取文…

异常体系与项目实践

程序式阴影&#xff1a;为什么不报错&#xff1f; 一、简介 在程序开发的过程中&#xff0c;异常处理从来都是一个复杂的维度&#xff0c;无论是新手还是经验老到的选手&#xff0c;在编码时都会面对各种异常情况&#xff1b; 程序中的异常可以反映系统的缺陷和待优化的点&am…

【STM32】基础知识 第十四课 看门狗 IWDG 深入理解与应用

【STM32】基础知识 第十四课 看门狗 IWDG 深入理解与应用 概述什么是独立看门狗 (IWDG)独立看门狗工作原理键寄存器状态寄存器 (IWDG_SR)寄存器配置操作步骤 案例总结 概述 STM32 系列单片机具有强大的内置功能, 其中之一就是独立看门口 (IWDG). 看门狗定时器是一种重要的硬件…

webpack Plugin Loader

本文作者为 360 奇舞团前端开发工程师 webpack是Javascript工具链的关键部分。webpack是个用于现代JavaScript应用程序的静态模块打包工具。它不仅可以支持ESM和CommonJS模块化编程&#xff0c;而且还可以支持或扩展支持许多不同的静态资源&#xff0c;例如&#xff1a;Files,I…

我将开始更新 强化学习

你好&#xff0c;我是zhenguo&#xff08;郭震&#xff09; 很久没有更新文章&#xff0c;从现在开始我将逐步恢复更新。在接下来的日子&#xff0c;我将系统更新强化学习文章&#xff0c;在期间&#xff0c;也会插播一些读博做科研的一些日常总结。如果你感兴趣&#xff0c;欢…

【观察】华为:持续创新,场景聚焦,推动数据中心实现可持续发展

毫无疑问&#xff0c;在数字经济时代&#xff0c;数据被纳入“新型生产要素”&#xff0c;而数据中心作为承载数据价值的关键&#xff0c;不仅是国民经济发展的重要基础设施&#xff0c;更成为了科技创新和技术应用的实体。也正因此&#xff0c;过去十几年数据中心产业实现了快…

最新开源!更擅长推理的LLaMA大模型,支持中文

©PaperWeekly 原创 作者 | 李忠利 研究方向 | 自然语言处理 跟大家介绍一下自己最近训练的 LLaMA 模型——BiLLa: A Bilingual LLaMA with Enhanced Reasoning Ability. Github 地址&#xff1a; https://github.com/Neutralzz/BiLLa HuggingFace 模型&#xff1a; ht…

【Python】数据分析与可视化实践:收支日统计数据可视化的实现

Python数据分析与可视化实践&#xff1a;收支日统计数据可视化的实现 Author&#xff1a;萌狼蓝天 Date&#xff1a;2023-5-7 数据读入与基本处理 上图是原始数据的一部分&#xff0c;存放于excel中&#xff0c;首先使用pd读入数据。读入数据后&#xff0c;删除不是收入&#x…

chatgpt赋能Python-python3_8_3怎么用

Python 3.8.3&#xff1a;简介与使用 Python是一种高级编程语言&#xff0c;拥有许多库和框架&#xff0c;是Web开发、数据分析、机器学习、人工智能等领域的首选语言之一。而Python 3.8.3是Python的最新版本&#xff0c;在新功能、稳定性、安全性等方面都有很大提升。 Pytho…

Midjourney 创建私人画图机器人,共享账号如何设置独立绘画服务器

本教程收集于:AIGC从入门到精通教程 Midjourney 创建私人画图机器人,共享账号如何设置独立绘画服务器 你是不是遇到以下问题: 1.Midjourney会员怎么自建绘图服务器,不受其他人的打扰? 2.Midjourney会员共享账号如何自建服务器,供其他人使用? 3.在官方服务器作图,频…

gRPC-go参数功能介绍总结目录(专栏)

本篇文章是gRPC-go框架的参数功能介绍总结 本篇文章的目的: 查看快速方便查询gRPC-go都有哪些参数可用!可以快速的查询到相关案例!gRPC-go版本是v1.30.0 可以从下面的地址下载gRPC-go版本 链接: https://pan.baidu.com/s/1za02qnUII78n-XhlrLf7RA 密码: 3tok 1、grpc-go客…