51.Sentinel微服务保护

news2024/11/24 11:08:17

目录

(1)初识Sentinel。

(1.1)雪崩问题及解决方案。

(1.1.1)雪崩问题。

(1.1.2)解决雪崩问题的四种方式。

(1.1.3)总结。

(1.2)服务保护技术对比。

(1.3)Sentinel介绍和安装。

(1.4)微服务整合Sentinel。

(2)流量控制。

(2.1)简单流控。

(2.2)流控模式(直接、关联、链路)。

(2.3)流控效果(快速失败、warm up、排队等待)。

(2.4)热点参数限流。 

(3)线程隔离、熔断降级。

​编辑 (3.1)FeignClient整合Sentinel。

(3.2)线程隔离(舱壁模式)(线程池隔离、信号量隔离)。

(3.3)熔断降级(慢调用、异常比例、异常数)。

​编辑

(4)授权规则。

(4.1) 授权规则。

(4.2)自定义异常结果。

(4.3)总结。

(5) 系统规则。

(6)规则持久化。

(6.1)规则管理模式。

(6.2)实现push模式。

(7)浏览器清除缓存的技巧。


(1)初识Sentinel。

(1.1)雪崩问题及解决方案。

(1.1.1)雪崩问题。

雪崩:一个微服务A依赖(即发送请求,等回应)于另一个微服务B,如果B出现故障,没有回应,则A的这条访问就不会结束(请求不释放),等到微服务A的请求资源都用完后,A也废了(所有访问资源都被占用了)。然后一些微服务依赖服务A的,也得不到A的回应,也跟着废了。这就是雪崩,因为一个微服务出现故障,导致凡是依赖于它的微服务也出现故障。

(1.1.2)解决雪崩问题的四种方式。

提示:前三种是处理出现故障的微服务避免故障传递从而导致雪崩,第四种是预防雪崩,就是还没发生故障的。

(1.1.3)总结。

(1.2)服务保护技术对比。

(1.3)Sentinel介绍和安装。

开启的效果如下(部分截图): 


(1.4)微服务整合Sentinel。

提示:整合好之后,启动项目后,需要访问过服务器之后,在sentinel里面才能看到显示 。

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


(2)流量控制。

(2.1)简单流控。

每一个端点(Endpoint):可以理解成controller中的每个方法。

QPS 是 "Queries Per Second"(每秒查询数)的缩写:即每秒的请求量。

并发量:表示系统在同一时刻需要处理的请求总数。

提示:被请求过的方法才会被监控到,想要监控它,先请求它。


请求效果如下:每秒访问10次,5次成功,5次失败。 

(2.2)流控模式(直接、关联、链路)。

链路:就是对请求来源进行限流。(例如:有ABC三个资源,A和B都要访问C,在统计资源C的时候,只统计某个入口资源,如A或B,如果超过阈值,则限流C)

特别说明:

 如果不关闭这个,则所有controller中的方法访问service服务层的该监控方法时,都认为是同一个来源,所以就起不到链路的作用。(需要要配这个参数,不然链路模式不起作用)


以下是关联模式达到阈值后的限流:

(2.3)流控效果(快速失败、warm up、排队等待)。

warm up也叫预热模式:作用就是给刚启动的服务器一些缓冲的时间,让服务器刚开始时处理的请求少一些,然后慢慢增加到正常数量。(初始化QPS是3,然后慢慢增加,达到预热时间后,QPS就变成设置值的QPS了)

排队等待:如果设置的超时时间是5秒,而每秒只能处理10个,那么队列只能放50个。(例如,空闲服务器突然1秒内有60个请求,处理10个,50个放进队列,都能处理完。若是1秒内61,那么有一个不能进入队列,直接返回异常。) (计算失败的请求数量:就是当多出来的超过队列最大容量时,则后面每秒只能进入每秒处理的请求个数,多出来的都会返回异常,例如:超时是5秒,每秒出来1个请求,我每秒请求2次,则第五秒正好队列排满,之后每秒只能进队列1个(每秒处理的个数),多出来的1个请求只能返回异常)。

(2.4)热点参数限流。 

热点参数限流对默认的SpringMVC资源无效:解决方法就是给springmvc的方法加上@SentinelResource("hot")注解,里面的hot是给这个资源起的名称。



(3)线程隔离、熔断降级。

线程隔离:就是给每个业务分配一定数量的线程, 即便某业务调用的服务器垮了,也能处理其他业务。

熔断降级:就是按访问的成功与失败的比例,如果失败比例过大,则禁止访问该业务。


 (3.1)FeignClient整合Sentinel。

我这里出现一个异常:

Caused by: java.lang.IllegalStateException: Incompatible fallbackFactory instance. Fallback/fallbackFactory of type class cn.itcast.feign.clients.fallback.UserClientFallbackFactory is not assignable to interface org.springframework.cloud.openfeign.FallbackFactory for feign client userservice

 解决办法:因为是版本不兼容,换个版本就行。

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

本来成功运行了,但是今天早上重新开启服务的时候有报错了:

解决方法是:把Hoxton.SR10换成Hoxton.SR8就可以成功启动服务器了

<!--        <spring-cloud.version>Hoxton.SR10</spring-cloud.version>-->
        <spring-cloud.version>Hoxton.SR8</spring-cloud.version>

(3.2)线程隔离(舱壁模式)(线程池隔离、信号量隔离)。

(3.3)熔断降级(慢调用、异常比例、异常数)。

(4)授权规则。

(4.1) 授权规则。

授权规则:可以做身份验证,网关也可以身份验证,但是万一泄露了微服务的地址,那么别人可以绕过网关,直接访问微服务,该授权规则就是拦截不是从网关过来的请求。

解析:下方的流控应用填写的名称是实现的RequestOriginParser接口的parseOrigin方法的返回值(当然也可以写其他,可操作空间挺大的),当返回值与流控应用的值一样时,则允许访问,否则拒绝访问。


(4.2)自定义异常结果。

FallbackFactory接口和BlockExceptionHandler接口是的区别:

  1. FallbackFactory接口:FallbackFactory接口通常用于实现服务降级的逻辑。当原始服务不可用时,fallback对象会代替原始服务进行处理,并返回预先定义的默认响应或错误信息。(用于远程调用feign,当feign出现异常或熔断隔离,就会调用这个接口的实现

  2. BlockExceptionHandler接口:BlockExceptionHandler接口通常用于处理限流和熔断的异常情况。BlockExceptionHandler接口允许自定义异常处理逻辑,在请求被限流或触发熔断时,可以定义如何处理这些异常情况。(只要不是远程调用,请求被sentinel限流授权等操作,就会调用该实现


(4.3)总结。

(5) 系统规则。

只对linux系统有用,对sentinel应用的主机进行保护措施。 

(6)规则持久化。

(6.1)规则管理模式。

(6.2)实现push模式。

注意:如果没变化的话,要清除缓存。

方法:开发者模式下,右键点击浏览器刷新按钮(位于地址栏旁边),选择"清除缓存并强制重新加载"选项。 

# 这里除了配置了flow还配了degrade,如果还要配其他的,就按照这个格式(把xxx换成需要配置的类型,有三个xxx)
spring:
  cloud:
    sentinel:
      datasource:
        flow:
          nacos:
            server-addr: localhost:8848 # nacos地址
            dataId: orderservice-flow-rules
            groupId: SENTINEL_GROUP
            rule-type: flow # 还可以是:degrade、authority、param-flow
        degrade:
          nacos:
            server-addr: localhost:8848 # nacos地址
              dataId: orderservice-degrade-rules
              groupId: SENTINEL_GROUP
              rule-type: degrade # 还可以是:degrade、authority、param-flow
        xxx:
          nacos:
            server-addr: localhost:8848 # nacos地址
              dataId: orderservice-xxx-rules
              groupId: SENTINEL_GROUP
              rule-type: xxx # 还可以是:degrade、authority、param-flow

sentinel的效果如下:只配置了持久化的流控规则。

 添加持久化的流控规则后,去nacos控制台看配置列表:多出了一个配置文件。

(7)浏览器清除缓存的技巧。

总结:开发者模式下,右键点击浏览器刷新按钮(位于地址栏旁边),选择"清除缓存并强制重新加载"选项。

Google Chrome浏览器:

  1. 在Chrome浏览器中,按下快捷键"Ctrl + Shift + I"(Windows)或"Cmd + Option + I"(Mac)打开开发者工具。
  2. 在开发者工具中,右键点击浏览器刷新按钮(位于地址栏旁边),选择"清除缓存并强制重新加载"选项。
  3. 或者,按下快捷键"Ctrl + F5"或"Shift + F5",这会强制刷新页面并清除缓存。

Mozilla Firefox浏览器:

  1. 在Firefox浏览器中,按下快捷键"Ctrl + Shift + I"(Windows)或"Cmd + Option + I"(Mac)打开开发者工具。
  2. 在开发者工具中,右键点击浏览器刷新按钮(位于地址栏旁边),选择"清除缓存和硬重载"选项。
  3. 或者,按下快捷键"Ctrl + F5"或"Shift + F5",这会强制刷新页面并清除缓存。

Microsoft Edge浏览器:

  1. 在Edge浏览器中,按下快捷键"Ctrl + Shift + I"(Windows)或"Cmd + Option + I"(Mac)打开开发者工具。
  2. 在开发者工具中,右键点击浏览器刷新按钮(位于地址栏旁边),选择"清除浏览器缓存"选项。
  3. 或者,按下快捷键"Ctrl + F5"或"Shift + F5",这会强制刷新页面并清除缓存。

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

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

相关文章

【LeetCode刷题-滑动窗口】--345.反转字符串中的元音字母

345.反转字符串中的元音字母 class Solution {public String reverseVowels(String s) {int len s.length();if(len < 2){return s;}char[] charArray s.toCharArray();int left 0,right len - 1;while(true){while(left < len && checkVowels(charArray[lef…

C语言实现冒泡排序(超详细)

排序算法 - 冒泡排序 什么是冒泡排序&#xff1f;冒泡排序有啥用呢&#xff1f;冒泡排序的实现代码讲解冒泡排序的总结 什么是冒泡排序&#xff1f; 冒泡排序是一种简单的排序算法&#xff0c;它重复地遍历要排序的列表&#xff0c;一次比较两个元素&#xff0c;如果它们的顺序…

【Linux】第十七站:进程创建与进程终止

文章目录 一、进程创建1.fork函数2.写时拷贝3.批量化创建多个进程 二、进程终止1.进程退出场景2.进程退出的方法&#xff08;1&#xff09;exit和return&#xff08;2&#xff09;_exit和exit 一、进程创建 1.fork函数 在linux中fork函数时非常重要的函数&#xff0c;它从已存…

【总结】坐标变换和过渡矩阵(易忘记)

xCy&#xff0c;此为x到y的坐标变换。 [β1,β2,…,βn] [α1,α2,…αn]C&#xff0c;此为基α到基β的过渡矩阵。 这个概念经常忘记。。。alpha到beta看来就是alpha后面加一个过渡矩阵了&#xff0c;很直观。坐标变换就是根据过渡矩阵和基本形式推一推得到吧&#xff0c;记…

若依前后端分离版,快速上手

哈喽~大家好&#xff0c;这篇来看看若依前后端分离版&#xff0c;快速上手&#xff08;肝了挺久的&#xff09;。 &#x1f947;个人主页&#xff1a;个人主页​​​​​ &#x1f948; 系列专栏&#xff1a;【Springboot和Vue全栈开发】…

LeetCode算法题解(动态规划)|LeetCoed62. 不同路径、LeetCode63. 不同路径 II

一、LeetCoed62. 不同路径 题目链接&#xff1a;62. 不同路径 题目描述&#xff1a; 一个机器人位于一个 m x n 网格的左上角 &#xff08;起始点在下图中标记为 “Start” &#xff09;。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角&#xff08;在下…

harmonyOS鸿蒙开发工具下载安装以及使用流程

注册账号 进入鸿蒙官方网站&#xff1a;https://www.harmonyos.com/ 推荐使用手机号注册 进行实名认证 下载开发环境 华为集成开发环境IDE DevEco Device Tool下载 | HarmonyOS设备开发 下载开发工具 HUAWEI DevEco Studio和SDK下载和升级 | HarmonyOS开发者 安装 无脑下一…

java源码-工程讲解

1、 工程目录 源码工程目录讲解部分&#xff0c;讲解过程会让大家对后端源码工程有一个大致的了解&#xff0c;能让大家在此改造&#xff0c;就可以衍生出一些新的功能&#xff0c;需要对java技术深入了解&#xff0c;需要看后续java技术讲解部分 整个架构是一个spring-boot…

python学习:break用法详解

嗨喽&#xff0c;大家好呀~这里是爱看美女的茜茜呐 在执行while循环或者for循环时&#xff0c;只要循环条件满足&#xff0c;程序会一直执行循环体。 但在某些场景&#xff0c;我们希望在循环结束前就强制结束循环。 Python中有两种强制结束循环的方法&#xff1a; continue语…

fopen/fwrite/fread 对UNICODE字符写入的总结

windows对fopen函数进行了升级&#xff0c;可以支持指定文件的编码格式&#xff08;ccs参数指定&#xff09;。 例如&#xff1a; FILE *fp fopen("newfile.txt", "rt, ccsUTF-8"); 当以 ccs 模式打开文件时&#xff0c;进行读写操作的数据应为 UTF-16…

订阅号和服务号有什么区别

服务号和订阅号有什么区别&#xff1f;服务号转为订阅号有哪些作用&#xff1f;我们都知道&#xff0c;服务号一个月只能发4次文章&#xff0c;但是订阅号每天都能发文章。不过在接收消息这一方面&#xff0c;服务号群发的消息有消息提醒&#xff0c;并显示在对话框&#xff1b…

ARDUINO UNO 12颗LED超酷流水灯效果

效果代码&#xff1a; #define t 30 #define t1 20 #define t2 100 #define t3 50 void setup() { // set up pins 2 to 13 as outputs for (int i 2; i < 13; i) { pinMode(i, OUTPUT); } } /Effect 1 void loop() { effect_1(); effect_1(); effect_…

视频剪辑技巧:轻松搞定视频随机合并,一篇文章告知所有秘诀

在视频制作的过程中&#xff0c;视频随机合并是一种创新的剪辑手法&#xff0c;它打破了传统的线性剪辑模式&#xff0c;使得视频剪辑更加灵活和有趣。通过将不同的视频片段随机组合在一起&#xff0c;我们可以创造出独特的视觉效果和情感氛围。这种剪辑方式让观众在观看视频时…

Redis 9 数据库

4 设置键的生存时间或过期时间 通过EXPIRE命令或者PEXPIRE命令&#xff0c;客户端可以以秒或者毫秒精度为数据库中的某个键设置生存时间&#xff08;TimeToLive&#xff0c;TTL&#xff09;&#xff0c;在经过指定的秒数或者毫秒数之后&#xff0c;服务器就会自动删除生存时间…

腾讯云服务器新用户优惠怎么领?附腾讯云新用户优惠领取链接

大家好&#xff0c;今天我们来聊聊腾讯云服务器的优惠活动&#xff01;如果你是腾讯云的新用户&#xff0c;那么你一定不能错过这个机会&#xff01; 首先&#xff0c;新用户可以领取双十一9999代金券&#xff0c;这可是一大笔钱啊&#xff01;而且&#xff0c;你还可以另外再…

sort()方法详解

作用 对数组进行排序&#xff0c;默认情况下&#xff0c;将元素转换为字符串&#xff0c;然后按照它们的UTF-16码值升序排序。 语法 sort() 元素是字符串时 默认排序时根据字典顺序进行排序的 元素是字母字符串时&#xff0c;按照字母进行升序&#xff0c; const stringAr…

Spring学习③__Bean管理

目录 IOC接口ApplicationContext 详解IOC操作Bean管理基于xml方式基于xml方式创建对象基于xml方式注入属性使用set方法进行注入通过有参数的构造进行注入p 名称空间注入&#xff08;了解&#xff09; 基于xml方式注入其他类型属性xml 注入数组类型属性 IOC接口 IOC思想基于IOC…

LM(大模型)应用开发利器之LangChain,带你走进AI世界

原文&#xff1a;LLM&#xff08;大模型&#xff09;应用开发利器之LangChain&#xff0c;带你走进AI世界 - 简书 LangChain组件图 LangChain 是什么 首先 LangChain 是一个框架&#xff0c;这个框架是用来让开发者进行 LLMs &#xff08;大语言模型&#xff09;应用开发的。…

【操作系统】磁盘物理地址怎么表示

常见主存物理地址是一串01串&#xff0c;那磁盘物理地址呢&#xff1f; 磁盘物理地址由以下组成&#xff1a; 柱面号磁头号扇区号 重点知识点辨析&#xff1a; 磁盘物理地址的翻译是由磁盘驱动程序进行的&#xff0c;目的是将逻辑上的蔟号转化为上述的物理地址 408真题溯源…

现在的各类解释非常混乱,到底什么是智慧城市?

智慧城市&#xff0c;简单来说&#xff0c;就是运用先进的信息和通信技术&#xff0c;让城市管理更加智能、高效&#xff0c;让市民的生活更加便捷、舒适。 在我们日常生活中&#xff0c;智慧城市带来的改变无处不在。 想象一下&#xff0c;当你早上醒来&#xff0c;你的手机已…