当前位置: 首页 > news >正文

51.Sentinel微服务保护

目录

(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-rulesgroupId: SENTINEL_GROUPrule-type: flow # 还可以是:degrade、authority、param-flowdegrade:nacos:server-addr: localhost:8848 # nacos地址dataId: orderservice-degrade-rulesgroupId: SENTINEL_GROUPrule-type: degrade # 还可以是:degrade、authority、param-flowxxx:nacos:server-addr: localhost:8848 # nacos地址dataId: orderservice-xxx-rulesgroupId: SENTINEL_GROUPrule-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",这会强制刷新页面并清除缓存。

相关文章:

51.Sentinel微服务保护

目录 &#xff08;1&#xff09;初识Sentinel。 &#xff08;1.1&#xff09;雪崩问题及解决方案。 &#xff08;1.1.1&#xff09;雪崩问题。 &#xff08;1.1.2&#xff09;解决雪崩问题的四种方式。 &#xff08;1.1.3&#xff09;总结。 &#xff08;1.2&#xff09;…...

【Java 进阶篇】Ajax 实现——JQuery 实现方式 `ajax()`

嗨&#xff0c;亲爱的读者们&#xff01;欢迎来到这篇关于使用 jQuery 中的 ajax() 方法进行 Ajax 请求的博客。在前端开发中&#xff0c;jQuery 提供了简便而强大的工具&#xff0c;其中 ajax() 方法为我们处理异步请求提供了便捷的解决方案。无需手动创建 XMLHttpRequest 对象…...

I.MX6ULL开发笔记(一)——环境搭建、镜像烧录、网络连接

本系列为使用野火IMX6ULL开发的学习笔记&#xff0c;使用的开发板为如下&#xff1a; 具有的硬件资源有如下&#xff1a; 文章目录 一、环境搭建Win11安装WSL安装串口驱动安装串口工具安装Ubuntu与windows文件互传 二、镜像烧录修改串口终端登录前信息 三、fire-config工具配…...

Javaweb之Ajax的详细解析

1.1 Ajax介绍 1.1.1 Ajax概述 我们前端页面中的数据&#xff0c;如下图所示的表格中的学生信息&#xff0c;应该来自于后台&#xff0c;那么我们的后台和前端是互不影响的2个程序&#xff0c;那么我们前端应该如何从后台获取数据呢&#xff1f;因为是2个程序&#xff0c;所以…...

java基于RestTemplate的微服务发起http请求

实现的效果...

django理解02 前后端分离中的问题

前后端分离相对于传统方式的问题 前后端数据交换的问题跨域问题 页面js往自身程序&#xff08;django服务&#xff09;发送请求&#xff0c;这是浏览器默认接受响应 而请求其它地方是浏览器认为存在潜在危险。自动隔离请求&#xff01;&#xff01;&#xff01; 跨域问题的解决…...

设计模式-迭代器模式-笔记

动机&#xff08;Motivaton&#xff09; 在软件构建过程中&#xff0c;集合对象内部结构常常变化各异。但对于这些集合对象&#xff0c;我们呢希望在不暴露其内部结构的同时&#xff0c;可以让外部客户代码透明地访问其中包含的元素&#xff1b;同时这种“透明遍历”也为“同一…...

【数据结构】C语言实现队列

目录 前言 1. 队列 1.1 队列的概念 1.2 队列的结构 2. 队列的实现 2.1 队列的定义 2.2 队列的初始化 2.3 入队 2.4 出队 2.5 获取队头元素 2.6 获取队尾元素 2.7 判断空队列 2.8 队列的销毁 3. 队列完整源码 Queue.h Queue.c &#x1f388;个人主页&#xff1a…...

牛客——OR36 链表的回文结构(C语言,配图,快慢指针)

目录 思路一&#xff1a;链表翻转 思路二&#xff1a;快慢指针&#xff0c;分别从头和尾间开始比较 本题是没有对C的支持的&#xff0c;但因为CPP支持C&#xff0c;所以这里就用C写了&#xff0c;可以面向更多用户 链表的回文结构_牛客题霸_牛客网 (nowcoder.com) 思路一&am…...

Docker build 技巧 —— 筑梦之路

实现目标 更快的构建速度 更小的Docker镜像大小 更少的Docker镜像层 充分利用镜像缓存 增加Dockerfile可读性 让Docker容器使用起来更简单 如何实现 编写.dockerignore文件 容器只运行单个应用 将多个RUN指令合并为一个 基础镜像的标签不要用latest 每个RUN指令后删除…...

2 Redis的高级数据结构

1、Bitmaps 首先&#xff0c;最经典的应用场景就是用户日活的统计&#xff0c;比如说签到等。 字段串&#xff1a;“dbydc”&#xff0c;根据对应的ASCII表&#xff0c;最后可以得到对应的二进制&#xff0c;如图所示 一个字符占8位&#xff08;bit&#xff09;&#xff0c;…...

Hive默认分割符、存储格式与数据压缩

目录 1、Hive默认分割符2、Hive存储格式3、Hive数据压缩 1、Hive默认分割符 Hive创建表时指定的行受限&#xff08;ROW FORMAT&#xff09;配置标准HQL为&#xff1a; ... ROW FORMAT DELIMITED FIELDS TERMINATED BY \u0001 COLLECTION ITEMS TERMINATED BY , MAP KEYS TERMI…...

update_engine-FilesystemVerifierAction和PostinstallRunnerAction

在介绍完了DownloadAction之后&#xff0c;还剩下FilesystemVerifierAction和PostinstallRunnerAction&#xff0c;下面开始对其进行分析。 FilesystemVerifierAction 在数据下载完成后&#xff0c;在DownloadAction中会切换到FilesystemVerifierAction void DownloadAction:…...

深度学习乳腺癌分类 计算机竞赛

文章目录 1 前言2 前言3 数据集3.1 良性样本3.2 病变样本 4 开发环境5 代码实现5.1 实现流程5.2 部分代码实现5.2.1 导入库5.2.2 图像加载5.2.3 标记5.2.4 分组5.2.5 构建模型训练 6 分析指标6.1 精度&#xff0c;召回率和F1度量6.2 混淆矩阵 7 结果和结论8 最后 1 前言 &…...

【Python百宝箱】掌握Python Web开发三剑客:Flask、Django、FastAPI一网打尽

前言 在当今互联网时代&#xff0c;Web应用的开发变得愈发重要和复杂。选择一个合适的Web框架&#xff0c;掌握安全性与认证、数据库与ORM库、前端框架与交互、测试与调试工具等关键知识点&#xff0c;是每个Web开发者都必须面对的挑战。本文将带你深入了解三个流行的Python W…...

【人工智能时代的刑法体系与责任主体概述】

第一节&#xff1a;引言 随着科技的快速发展&#xff0c;人工智能 (Artificial Intelligence, AI) 正日益成为我们生活中不可或缺的一部分。从自动驾驶汽车到语音助手&#xff0c;从智能家居到金融机器人&#xff0c;AI 的广泛应用正不断改变着我们的生活方式和社会结构。然而…...

透视maven打包编译正常,intellj idea编译失败问题的本质

前言 maven多模块类型的项目&#xff0c;在Java的中大型应用中非常常见&#xff0c; 在 module 很多的情况&#xff0c;经常会出现各种各样的编辑依赖错误问题&#xff0c;今天记录一种比较常见的 case &#xff1a; A 子模块依赖 B 子模块&#xff0c;在 Terminal 上终端上 …...

npm报错

npm报错 npm ERR! Fix the upstream dependency conflict, or retry npm ERR! this command with --force or --legacy-peer-deps npm ERR! to accept an incorrect (and potentially broken) dependency resolution. npm ERR! npm ERR! npm ERR! For a full report s…...

【FFmpeg实战】ffmpeg播放器-音视频解码流程

音视频介绍 音视频解码流程 FFmpeg解码的数据结构说明 AVFormatContext&#xff1a;封装格式上下文结构体,全局结构体,保存了视频文件封装格式相关信息AVInputFormat&#xff1a;每种封装格式&#xff0c;对应一个该结构体AVStream[0]&#xff1a;视频文件中每个视频&#xff…...

基于SSM的高校毕业选题管理系统设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用JSP技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…...

一个简单的Oracle Redaction实验

本实验包含了&#xff1a; 简单的Oracle Redaction演示针对指定用户的Redaction 实验环境 假设有一个19c多租户数据库&#xff0c;PDB名为orclpdb1。 我们将在orclpdb1中建立2个用户&#xff1a; redact_user: redact管理员schema_user: schema用户 基础实验 首先进入数…...

getchar函数的功能有哪些

getchar函数是C语言标准库中的一个函数&#xff0c;主要用于从标准输入&#xff08;通常是键盘&#xff09;获取一个字符。它的功能包括&#xff1a; 从标准输入获取一个字符&#xff1a;getchar函数会等待用户输入一个字符&#xff0c;然后将其返回给程序。可以通过控制台输入…...

信息机房监控系统(动环辅助监控系统)

信息机房监控系统是一个综合性的系统&#xff0c;用于对机房的所有设备及其环境进行集中监控和管理。这种系统主要针对机房的各个子系统进行监控&#xff0c;包括动力系统、环境系统、消防系统、保安系统、网络系统等。 依托电易云-智慧电力物联网&#xff0c;以下是信息机房监…...

最强英文开源模型Llama2架构与技术细节探秘

prerequisite: 最强英文开源模型LLaMA架构探秘&#xff0c;从原理到源码 Llama2 Meta AI于2023年7月19日宣布开源LLaMA模型的二代版本Llama2&#xff0c;并在原来基础上允许免费用于研究和商用。 作为LLaMA的延续和升级&#xff0c;Llama2的训练数据扩充了40%&#xff0c;达到…...

编程刷题网站以及实用型网站推荐

1、牛客网在线编程 牛客网在线编程https://www.nowcoder.com/exam/oj?page1&tab%E8%AF%AD%E6%B3%95%E7%AF%87&topicId220 2、力扣 力扣https://leetcode.cn/problemset/all/ 3、练码 练码https://www.lintcode.com/ 4、PTA | 程序设计类实验辅助教学平台 PTA | 程…...

基于STC12C5A60S2系列1T 8051单片机的SPI总线器件数模芯片TLC5615实现数模转换应用

基于STC12C5A60S2系列1T 8051单片的SPI总线器件数模芯片TLC5615实现数模转换应用 STC12C5A60S2系列1T 8051单片机管脚图STC12C5A60S2系列1T 8051单片机I/O口各种不同工作模式及配置STC12C5A60S2系列1T 8051单片机I/O口各种不同工作模式介绍SPI总线器件数模芯片TLC5615介绍通过按…...

【并发编程】Synchronized的使用

&#x1f4eb;作者简介&#xff1a;小明java问道之路&#xff0c;2022年度博客之星全国TOP3&#xff0c;专注于后端、中间件、计算机底层、架构设计演进与稳定性建设优化&#xff0c;文章内容兼具广度、深度、大厂技术方案&#xff0c;对待技术喜欢推理加验证&#xff0c;就职于…...

【Python】Python基础

文章目录 一、字面值常量和表达式二、变量2.1 定义变量2.2 变量的命名规则2.3 变量的类型2.4 不同类型大小2.5 动态类型 三、注释四、输入与输出五、运算符5.1 算术运算符5.2 关系运算符5.3 逻辑运算符5.4 赋值运算符 一、字面值常量和表达式 print(1 2 * 3) # 7 print(1 2 …...

gitlab环境准备

1.准备环境 gitlab只支持linux系统&#xff0c;本人在虚拟机下使用Ubuntu作为操作系统&#xff0c;gitlab镜像要使用和操作系统版本对应的版本&#xff0c;(ubuntu18.04,gitlab-ce_13.2.3-ce.0_amd64 .deb) book100ask:/$ lsb_release -a No LSB modules are available. Dist…...

Apache Doris (五十四): Doris Join类型 - Bucket Shuffle Join

🏡 个人主页:IT贫道_大数据OLAP体系技术栈,Apache Doris,Clickhouse 技术-CSDN博客 🚩 私聊博主:加入大数据技术讨论群聊,获取更多大数据资料。 🔔 博主个人B栈地址:豹哥教你大数据的个人空间-豹哥教你大数据个人主页-哔哩哔哩视频 目录...