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-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",这会强制刷新页面并清除缓存。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

c语言:模拟实现qsort函数

qsort函数的功能&#xff1a; qsort相较于冒泡排序法&#xff0c;不仅效率更快&#xff0c;而且能够比较不同类型的元素&#xff0c;如&#xff1a;浮点数&#xff0c;结构体等等。这里我们来模拟下qsort是如何实现这一功能的&#xff0c;方便我们对指针数组有一个更深层次的理…

【APUE】补充 — 基于管道的线程池

目录 一、引言 二、代码实现 三、思考 一、引言 在线程章节的 3.2 部分&#xff0c;我们曾经提到过线程池的实现 在当时的代码中&#xff0c;我们仅仅用的一个 int 类型的变量来表示这个“池”&#xff0c;用来存放任务 显然这个池太小了&#xff0c;如果下游线程很多&am…

代码随想录 Day49 单调栈01 LeetCode LeetCodeT739每日温度 T496 下一个最大元素I

前言 折磨的死去活来的动态规划终于结束啦,今天秋秋给大家带来两题非常经典的单调栈问题,可能你不清楚单调栈是什么,可以用来解决什么问题,今天我们就来一步一步的逐渐了解单调栈,到能够灵活使用单调栈.注意以下讲解中&#xff0c;顺序的描述为 从栈头到栈底的顺序 什么时候用单…

3D建模基础教程:编辑样条线【子层级】

了解子层级编辑样条线 在3D建模中&#xff0c;样条线是创建各种形状和曲线的重要工具。而编辑样条线是3D建模过程中不可或缺的一部分。今天&#xff0c;我们将一起学习如何编辑样条线&#xff0c;以及了解其子层级的相关知识。 样条线的子层级介绍 样条线的子层级包括&#xff…

Java的IO流-缓冲流

字节缓冲流 package com.itheima.d2;import java.io.*;public class Test1 {public static void main(String[] args) {try (InputStream is new FileInputStream("IO/src/itheima01.txt");//1、定义一个字节缓冲输入流包装原始的字节输入流InputStream bis new Bu…

任你五花八门预训练方法,我自监督学习依然能打!

长时间没看论文&#xff0c;外面已经发展成这样了&#xff1f; 以下都是新paper&#xff0c;挑了几个感兴趣的&#xff0c;一起粗略看看吧~ Battle of the Backbones: A Large-Scale Comparison of Pretrained Models across Computer Vision Tasks GitHub | https://github.…

linux基本指令总结--文件和目录

前言&#xff1a; 想要学好Linux操作系统&#xff0c;理解并熟悉一些基本的指令是必要的&#xff0c;下面我将整理出关于文件和目录操作的一些基本指令和用法&#xff0c;我的linux环境部署在服务器端&#xff0c;使用xshell软件进行远程操作。 本章指令整合&#xff1a; ls查…

十个一手app拉新地推拉新推广接单平台,放单/接任务渠道

做过地推拉新的朋友一定都非常清楚&#xff0c;app拉新推广一手接单平台&#xff0c;和非一手接任务平台之间的收益差&#xff0c;可以用天壤之别来形容。那么一手app拉新渠道应该怎么找&#xff1f;下面这十个常见的地推拉新app接单平台&#xff0c;一定要收藏。 1. 聚量推客…

学习c#的第十四天

目录 C# 接口&#xff08;Interface&#xff09; 接口的特点 定义接口 接口继承 接口和抽象类的区别 C# 命名空间&#xff08;Namespace&#xff09; using 关键字 定义命名空间 嵌套命名空间 C# 接口&#xff08;Interface&#xff09; 接口定义了所有类继承接口时应…

036、目标检测-锚框

之——对边缘框的简化 目录 之——对边缘框的简化 杂谈 正文 1.锚框操作 2.IoU交并比 3.锚框标号 4.非极大值抑制 5.实现 拓展 杂谈 边缘框这样一个指定roi区域的操作对卷积神经网络实际上是很不友好的&#xff0c;这可能会对网络感受野提出一些特定的要求&#xff0…

HUAWEI华为笔记本MateBook X 2021款i5集显(EULD-WFH9,WXX9)原装出厂Windows11系统工厂模式包

下载链接&#xff1a;https://pan.baidu.com/s/1gQ_O203SSm83Nc-zDk1iNA?pwd4exz 提取码&#xff1a;4exz 系统带F10一键智能还原功能隐藏恢复分区、所有驱动、Office办公软件、华为电脑管家等预装程序 所需要工具&#xff1a;32G或以上的U盘 文件格式&#xff1a;zip …

智慧工地APP全套源码,智慧工地云平台

智慧工地平台 &#xff0c;智慧工地源码&#xff0c;智慧工地APP全套源码 智慧工地以施工现场风险预知和联动预控为目标&#xff0c;将智能AI、传感技术、人像识别、监控、虚拟现实、物联网、5G、大数据、互联网等新一代科技信息技术植入到建筑、机械、人员穿戴设施、场地进出关…

Linux下查看pytorch运行时真正调用的cuda版本

一般情况我们会安装使用多个cuda版本。而且pytorch在安装时也会自动安装一个对应的版本。 正确查看方式&#xff1a; 想要查看 Pytorch 实际使用的运行时的 cuda 目录&#xff0c;可以直接输出 cpp_extension.py 中的 CUDA_HOME 变量。 import torch import torch.utils imp…

Nginx反向代理和负载均衡

1.反向代理 反向代理&#xff08;Reverse Proxy&#xff09;方式是指以代理服务器来接受internet上的连接请求&#xff0c;然后将请求转发给内部网络上的服务器&#xff0c;并将从服务器上得到的结果返回给internet上请求连接的客户端&#xff0c;此时代理服务器对外就表现为一…

springboot+vue+element简单实现教学课程申报管理系统

目录 一、项目预览 二、项目效果图及说明 1.项目说明 1.登录 2.欢迎页 3.教师管理 4.课程申报 ​5.管理员管理 三、代码实现 1.后端项目结构图 2.数据库表脚本 3.路由配置 四、总结 一、项目预览 在线预览&#xff1a;点击访问其他项目访问&#xff1a;点击访问后端实…

Java学习之路 —— Java高级

文章目录 前言1. 单元测试2. 反射2.1 获取Class对象的三种方式2.2 获取类的构造器的方法2.3 获取类的成员变量2.4 获取类的成员方法2.5 反射的作用 3. 注解3.1 自定义注解3.2 注解的原理3.3 元注解3.4 注解的解析 4. 动态代理5. 总结 前言 终于走到新手村的末端了&#xff0c;…

青少年CTF-WEB-Flag在哪里?

题目环境&#xff1a;F12查看源代码得到flag&#xff1a;qsnctf{1167716c-54f0-47da-baed-49e3b08dfaeb} 此题主要考察F12查看源代码的使用

java.net.UnknownHostException: eureka

java.net.UnknownHostException: eureka 哦。HOST漏了 #linux /etc/hosts #windows C:\Windows\System32\drivers\etc\hosts 127.0.0.1 eureka7000 127.0.0.1 eureka7001 127.0.0.1 eureka7002

MATLAB画图分辨率、图像大小研究

MATLAB画图分辨率、图像大小研究 Figure属性中 InnerPosition Position OuterPosition区别画图与打印的分辨率和图像大小研究首先明确两个概念&#xff1a;MATLAB实操画图 Figure属性中 InnerPosition Position OuterPosition区别 在画图的时候&#xff0c;我们经常需要设置Fi…