Sentinel限流学习

Sentinel限流学习

    • 初识Sentinel
      • 运行sentinel
      • 雪崩问题
      • 服务保护技术对比
      • 微服务整合Sentinel
    • 限流规则
        • 簇点链路
      • 流控模式-关联
      • 流控模式-链路
      • 流控模式有哪些?
    • 流控效果
      • 流控效果-warm up
      • 流控效果-排队等待
    • 热点参数限流
    • 隔离和降级
      • Feign整合Sentinel
      • 线程隔离有两种方式实现:

初识Sentinel

运行sentinel

  1. 下载sentinel-dashboard-1.8.1.jar

  2. 进入下载目录使用启动命令:

  3. java -Dserver.port=8718 
    -Dcsp.sentinel.dashboard.server=localhost:8718 
    -Dproject.name=sentinel-dashboard 
    -Dcsp.sentinel.api.port=8719 
    -jar D:\sdks\sentinel-1.8.0\sentinel-dashboard-1.8.0.jar
    

    访问localhost:8719 默认用户名密码都是sentinel

    sentinel首页如下:

    在这里插入图片描述

雪崩问题

微服务调用链路中的某个服务故障,引起整个链路中的所有微服务都不可调用,这就是雪崩。

解决雪崩问题的常见方式有四种:

  • 超时处理:设定超时时间,请求超过一定时间没有相应就返回错误信息,不会无休止等待
  • 舱壁模式:限定每个业务能使用的线程数,避免耗尽整个tomcat的资源,因此也叫线程隔离
  • 熔断降级:由断路器统计业务执行的一场比例,如果超出阈值则会熔断该业务,拦截访问该业务的一切请求
  • 流量控制:限制业务访问的QPS,避免服务因流量的突增而故障。

服务保护技术对比

在这里插入图片描述

Sentinel官方地址:introduction | Sentinel (sentinelguard.io)

微服务整合Sentinel

1.引入sentinel依赖:

<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>

2.配置控制台地址:

spring:cloud:sentinel:transport:dashboard: localhost:8080

3.访问微服务任意端点,触发sentinel监控

在这里插入图片描述

限流规则

簇点链路

簇点链路就是项目内的调用链路,链路中被监控的每个接口就是一个资源,默认情况下sentinel会监控SpringMVC的每一个端点(Endpoint),因此SpringMVC的每一个端点(Endpoint)就是调用链路中的一个资源。

在这里插入图片描述

流控模式-关联

  • 关联模式:统计当前资源相关的另一个资源,触发阈值时,对当前资源限流
  • 使用场景:比如用户支付时需要修改订单状态,同时用户要查询订单。查询和修改操作会争抢数据库锁,产生竞争。业务需求是有限支付和更新订单的业务,因此当修改订单业务出发阈值时,需要对查询订单业务限流。

流控模式-链路

  • 只针对从指定链路访问到本资源的请求做统计,判断是否超过阈值

  • 使用场景:有查询订单和创建订单业务,两者都需要查询商品。查询订单流量大使查询商品到达阈值时势必会影响到创建订单业务,所以需要针对从查询订单进入到查询商品的请求统计,并设置限流。

ps:Sentinel默认只标记Controller中的方法为资源,如果要标记其他方法,需要利用@SentinelResource注解,示例:

@SentinelResource("goods")
public void queryGoods(){System.err.println("查询商品");
}

Sentinel默认会将Controller方法做context整合,导致链路模式的流控失效,需要修改application.xml,添加配置:

spring:cloud:sentinel:web-context-unify: false

在这里插入图片描述

流控模式有哪些?

  • 直接:对当前资源限流
  • 关联:高优先级资源触发阈值,对低优先级资源限流。
  • 链路:阈值统计时,只统计从指定资源进入当前资源的请求,是对请求来源的限流。

流控效果

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

  • 快速失败:达到阈值后,新的请求会被立即拒绝并抛出FlowException异常。是默认的处理方式。
  • warm up:预热模式,对超出阈值的请求同样是拒绝并抛出异常。但这种模式阈值会动态变化,从一个较小值逐渐增加到最大阈值。
  • 排队等待:让所有的请求按照先后次序排队执行,两个请求的间隔不能小于指定时长

流控效果-warm up

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

流控效果-排队等待

当请求超过QPS阈值时,快速失败和warm up 会拒绝新的请求并抛出异常。而排队等待则是让所有请求进入一个队列中,然后按照阈值允许的时间间隔依次执行。

后来的请求必须等待前面执行完成,如果请求预期的等待时间超出最大时长,则会被拒绝。

热点参数限流

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

在这里插入图片描述

对hot这个资源的0号参数(第一个参数)做统计,每1秒相同参数值的请求数不能超过5

隔离和降级

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

Feign整合Sentinel

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

  1. 修改OrderService的application.yml文件,开启Feign的Sentinel功能

  2. feign:sentinel:enabled: true # 开启feign的Sentinel功能
    
  3. 给FeignClient编写失败后的降级逻辑

    1. FallbackClass,无法对远程调用的异常做处理
    2. FallbackFactory,可以对远程调用的异常做处理

步骤一:定义类,实现FallbackFactory:

@slf4j
public class UserClientFallbackFactory implements FallbackFactory<UserClient>{@0verridepublic UserClient create(Throwable throwable) {return new UserClient() {@overridepublic User findById(Long id){log.error("查询用户异常",throwable);return new User();}}                          }
}

步骤二:在DefaultFeignConfiguration类中将UserClientFallbackFactory注册为一个Bean:

@Bean
public UserClientFallbackFactory userClientFallback(){return new UserClientFallbackFactory();
}

步骤三:在UserClient接口中使用UserClientFallbackFactory:

@FeignClient(value = "userservice" , fallbackFactory = userClientFallbackFactory.class)
public interface UserClient{@GetMapping("/user/{id}")User findById(@PathVariable("id") Long id);
}

Sentinel支持的雪崩解决方案:

  • 线程隔离(舱壁模式)
  • 降级熔断

Feign整合Sentinel的步骤:

  • 在application.yml中配置: feign.sentienl.enable=true
  • 给FeignClient编写FallbackFactory并注册为Bean
  • 将FallbackFactory配置到FeignClient

线程隔离有两种方式实现:

  • 线程池隔离
  • 信号量隔离(Sentinel默认采用)

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

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

相关文章

【论文复现|智能算法改进】基于多策略麻雀搜索算法的机器人路径规划

目录 1.算法原理2.改进点3.结果展示4.参考文献5.代码获取 1.算法原理 【智能算法】麻雀搜索算法&#xff08;SSA&#xff09;原理及实现 2.改进点 改进的无限折叠迭代混沌映射 无限折叠迭代映射(ICMIC) 常用于图像加密方向的研究, 基本思想是首先生成[0,1]之间的混沌序列, …

摸鱼大数据——Hive函数10-12

10、堆内存错误 报错&#xff1a; Error while processing statement: FAILED: Execution Error, return code -101 from org.apache.hadoop.hive.ql.exec.mr.MapRedTask. Java heap space 解决方案: 在node1上面操作即可 方式1: 找到/export/server/hive/conf/hive-env.sh,添…

CTF本地靶场搭建——静态flag题型的创建

静态flag题型的创建 首先这里要说的是静态flag和动态flag。 在CTF&#xff08;Capture The Flag&#xff09;比赛中&#xff0c;静态flag的使用通常与特定的赛制或题目类型关联&#xff0c;而不是直接与题型绑定。静态flag意味着这些flag是预先设定好的&#xff0c;不会随比…

LangChain进行文本摘要 总结

利用LangChain进行文本摘要的详细总结 LangChain是一个强大的工具&#xff0c;可以帮助您使用大型语言模型&#xff08;LLM&#xff09;来总结多个文档的内容。以下是一个详细指南&#xff0c;介绍如何使用LangChain进行文本摘要&#xff0c;包括使用文档加载器、三种常见的摘…

MySQL 导出导入的101个坑

最近接到一个业务自行运维的MySQL库迁移至标准化环境的需求&#xff0c;库不大&#xff0c;迁移方式也很简单&#xff0c;由开发用myqldump导出数据、DBA导入&#xff0c;但迁移过程坎坷十足&#xff0c;记录一下遇到的各项报错及后续迁移注意事项。 一、 概要 空间问题源与目…

排序进阶----快速排序

当我们写了插入和希尔排序后&#xff0c;我们就应该搞更难的了吧。大家看名字就知道我们这篇博客的内容了吧。而且从名字上来看。快速排序就很快吧。那么为什么这个排序怎么能叫快速排序啊。我们希尔排序不是很快嘛。那么我们的快速排序肯定是有特殊之处嘞。不然这就太自负了。…

autodl服务器中YOLOx训练自己数据集

目录 本篇文章主要讲解使用YOLOx训练自己数据集&#xff0c;其中包括数据集格式转换~ 目录 一、数据集处理二、环境配置三、配置文件修改四、开始训练五、开始验证 一、数据集处理 第一步&#xff1a;将yolo格式的数据集转换成VOC格式 转换脚本&#xff1a;txt_to_xml.py f…

[力扣题解] 222. 完全二叉树的节点个数

题目&#xff1a;222. 完全二叉树的节点个数 思路 随便一种遍历方式都行 代码 Method 1 : Me class Solution { public:int countNodes(TreeNode* root) {if(root NULL){return 0;}int result 0;queue<TreeNode*> que;que.push(root);while(!que.empty()){ resu…

Unity DOTS技术(二)ECS

文章目录 一.ECS简介二.基本操作实例三.实体查看组件四.位置实体修改五.旋转实体六.了解原有属性七.禁止自动创建八.动态实例化 一.ECS简介 ECS全称 (Entity Component System).即(E:实体 C:组件 S:系统). 实际上即是数据方法分离.数据放在组件里,具体实现放在系统里.组件挂载…

Debian系统磁盘挂载

服务器推荐&#xff1a;雨云 优惠码&#xff1a;zsj 用优惠码注册账户并绑定微信后可获取首月5折优惠券&#xff1b; 后续新购主机也可在积分商城中换取新购优惠券&#xff1b; 公测阶段的超大带宽服务器&#xff0c;由于是国内主机因此需要备案域名。 公测阶段价格尚未确定&am…

google的chromedriver最新版下载地址

Chrome for Testing availability (googlechromelabs.github.io) 复制对应的地址跳转进去即可下载&#xff0c;下载前先看下自己google浏览器版本&#xff0c;找到对应的版本号去下载&#xff0c;把解压缩的exe放到google浏览器目录下。

使用python统计word文档页数

使用python统计word文档页数 介绍效果代码 介绍 使用python统计word文档的页数 效果 代码 import os import comtypes.clientdef get_word_page_count(docx_path):try:# Initialize the COM objectword comtypes.client.CreateObject(Word.Application)word.Visible False…

嵌入式人工智能开发:基于TensorFlow Lite和Edge TPU的实时对象检测系统

文章目录 引言环境准备人工智能在嵌入式系统中的应用场景代码示例常见问题及解决方案结论 1. 引言 随着人工智能&#xff08;AI&#xff09;和物联网&#xff08;IoT&#xff09;技术的快速发展&#xff0c;嵌入式系统中集成AI技术已成为一种趋势。实时对象检测是AI在嵌入式…

【JavaScript】JS语法基础

逗号运算符 逗号运算符可以用于分隔多个子表达式&#xff0c;从左到右执行每个表达式&#xff0c;并返回最后一个子表达式的值作为整个表达式的结果 let x 1; x (x, x); console.log(x); // Expected output: 2x (2, 3); console.log(x); // Expected output: 3Function 对…

Outpainting Inpainting

文章目录 what is Inpainting&#xff08;补画&#xff09;?what is Outpainting&#xff08;扩画&#xff09;?The way to realize Outpainting summaryOthers what is Inpainting&#xff08;补画&#xff09;? 称为图像修复或图像填充&#xff0c;是一种技术&#xff0c;…

Nature Communications|柔性自驱动仿生眼(离子凝胶/仿生眼/柔性电子)

2024年4月10日,黄维(Wei Huang)院士、南京工业大学刘举庆(Juqing Liu)教授和刘正东(Zhengdong Liu)副教授课题组,在《Nature Communications》上发布了一篇题为“A bionic self-driven retinomorphic eye with ionogel photosynaptic retina”的论文,罗旭(Xu Luo)、陈晨(…

基于springboot的宠物领养系统源码数据库

基于springboot的宠物领养系统源码数据库 如今社会上各行各业&#xff0c;都在用属于自己专用的软件来进行工作&#xff0c;互联网发展到这个时候&#xff0c;人们已经发现离不开了互联网。互联网的发展&#xff0c;离不开一些新的技术&#xff0c;而新技术的产生往往是为了解决…

ESP-01S 使用 arduino 烧录程序

一、设置 arduino 编辑器 1、文件-首选项-附加开发版管理网址中添加 http://arduino.esp8266.com/stable/package_esp8266com_index.json 2、工具-开发板管理 搜索 8266 并下载 ) 3、工具-开发板 在 8266 里面选择 Generic ESP8266 Module 4、工具-端口 记得选择对应的端口 …

问题排查|记录一次基于mymuduo库开发的服务器错误排查(回响服务器无法正常工作)

问题背景&#xff1a; 服务器程序如下&#xff1a; #include <mymuduo/TcpServer.h> #include <mymuduo/Logger.h>#include <string> #include <functional>class EchoServer { public:EchoServer(EventLoop *loop,const InetAddress &addr, con…

【LeetCode 1】两数之和

1. 题目 两数之和 2. 分析 这道题有多种解法&#xff0c;逐个来看。 2.1 深搜版 首先可以用深搜来解&#xff0c;我们从数组集合中选取两个数&#xff0c;判断其和是不是target&#xff0c;如果是则满足要求&#xff0c;如果不是&#xff0c;继续选取。 2.2 循环版 深搜…