【微服务】服务保护(通过Sentinel解决雪崩问题)

news2024/9/28 1:16:31

Sentinel解决雪崩问题

  • 雪崩问题
    • 服务保护方案
      • 服务降级保护
    • 服务保护技术
      • Sentinel
      • Fallback
      • 服务熔断

雪崩问题

在微服务调用链中如果有一个服务的问题导致整条链上的服务都不可用,称为雪崩

  • 原因
  1. 微服务之间的相互调用,服务提供者出现故障
  2. 服务的消费者没有很好的处理异常出现问题
  3. 微服务集群级联出现故障

服务保护方案

服务降级保护

请求限流:限制访问接口的请求的并发量,避免服务因流量激增出现故障
通过限流器进行流量整形
在这里插入图片描述

线程隔离:也称为舱壁模式,模拟船舱隔板的防水原理,通过限定每个业务能使用的线程数量而将故障业务隔离,避免故障扩散
服务熔断:配合线程隔离进行,由断路器统计请求的异常比例或慢调用比例,如果超出阈值则会熔断该业务,则拦截该接口的请求,熔断期间,所有的请求快速失败,全都走fallback逻辑(让业务失败时不再抛出异常,而是走fallback逻辑)

服务保护技术

在这里插入图片描述
Sentinel适用于新版本的SpringCloud

Sentinel

Sentinel是阿里巴巴开源的一款微服务流量控制组件
地址:https://sentinelguard.io/zh-cn/index.html
下载:https://github.com/alibaba/Sentinel/releases
下载好之后将jar包的版本后缀删除:
在管理员模式下运行
java -Dserver.port=8090 -Dcsp.sentinel.dashboard.server=localhost:8090 -Dproject.name=sentinel-dashboard -jar sentinel-dashboard.jar启动

然后访问对应的地址就能够进入到Sentinel管理界面
在这里插入图片描述
默认的用户和密码都是sentinel
然后在对应的微服务项目中引入依赖

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

在配置文件中添加对应的配置信息即可

  cloud:
    sentinel:
      transport:
        dashboard: localhost:8090

然后启动服务即可在控制台中进行查看

  • 簇点链路

单击调用链路,是一次请求进入服务后经过的每一个被Sentinel监控的资源链,默认会监控SpringMVC中的每一个EndPoint(http接口),限流,熔断等都是针对簇点链路中的资源设置的,而资源名默认就是接口的请求路径

但是RESTful风格的api请求路径都是相同的,这会导致簇点资源名称重复,修改配置,把请求方式+请求路径作为簇点资源名称:

http-method-specify: true #开启请求方式前缀

然后可以在控制台中实现服务保护技术

线程熔断:需要在微服务中OpenFeign进行整合sentinel,需要在配置文件中进行配置

feign:
  sentinel:
    enabled: true   #开启Feign的sentinel整合

Fallback

FeignClient的Fallback有两种配置方式:
方式一:FallbackClass,无法对远程调用的异常做出处理
方式二: FallbackFactory,可以对远程调用的异常做出处理,通常是这种

通过方式二进行Fallback处理:

  1. 第一步,编写通过工厂类创建失败的UserClient获取
public class UserClientbackFactory implements FallbackFactory<UserClient>{
      @Override
      public UserClient create(Throwable throwable){
         return new UserClient(){
              @Override
              public User findById(Long id){
                //记录异常信息,可以返回空或抛出异常
                log,info("失败",throwable);
                return null;
              }
         }
      }
}

在正常情况下微服务通过提供的UserClient进行访问,当出现熔断的情况下,使用我们自定义的UserClient进行熔断后的Fallback逻辑处理
2. 将定义好的UserClient失败获取注册为一个Bean

@Bean
public UserClientFallbackFactory userclientfallback(){
    return new UserClientFallbackFactory();
}
  1. 在UserClient接口中使用UserClientFallbackFactory:
@FeignClient(value="userservice",fallbackFactory=UserClientFallbackFactory.class)
public interface UserClient{
  @GetMapper("/user/{id}")
  User findById(@PathVariable("id") Long id);
}

服务熔断

在这里插入图片描述
当线程超过阈值或者达到熔断策略就会引发熔断,熔断时间结束后,尝试开启一次请求,如果成果则关闭短路器,如果失败,则开启断路器进行进行熔断

  • 熔断策略
    在这里插入图片描述
    上述是按照慢调用比例判断,最小请求数5个,当5个请求中,出现3个以上(根据比例阈值)响应时间超过200ms就会触发熔断

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

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

相关文章

Unity 热更--AssetBundle学习笔记 1.0【AB包资源加载工具类的实现】

合集 - Unity学习笔记(13)1.Unity学习笔记–基础2023-11-012.Unity学习笔记–入门2023-10-293.Unity学习笔记–数据持久化之PlayerPrefs的使用2023-11-194.Unity学习笔记–数据持久化XML文件(1)2023-11-205.Unity学习笔记–数据持久化XML文件&#xff08;2&#xff09;2023-12-…

ADS基础教程8-仿真库加载

目录 一、系统库介绍二、厂商库1.模型下载1&#xff09;登录官网2&#xff09;选择所需模型3&#xff09;点击下载4&#xff09;指定保存路径 二.模型加载1&#xff09;设计套件选择2&#xff09;选择解压文件3&#xff09;解压文件成功4&#xff09;添加到当前workspace5&…

在STM32中用寄存器方式点亮流水灯

文章目录 实验资料一、对寄存器的理解1.通俗认识寄存器2.深入了解寄存器&#xff08;1&#xff09;端口配置低寄存器&#xff08;配置0到7引脚的寄存器&#xff09;&#xff08;2&#xff09;端口配置高寄存器&#xff08;配置8到15引脚&#xff09; 3.GPIO口的功能描述 二、配…

在线协作,开源的设计和原型创作平台:penpot

penpot&#xff1a;面向团队&#xff0c;设计自由- 精选真开源&#xff0c;释放新价值。 概览 Penpot 是一款专为跨职能团队量身定制的开源设计软件&#xff0c;与行业领先的 Figma 齐名&#xff0c;提供了一个强大而灵活的在线设计解决方案。其最大的亮点在于&#xff0c;用户…

五一假期零碎时间练习学习过的内容(商城版)

目录 1 总览1.1 技术架构1.2 其他1.2.1 数据库1.2.2 后端部分1.2.2.1 复习feign1.2.2.2 复习下网关网关的核心功能特性&#xff1a;网关路由的流程断言工厂过滤器工厂全局过滤器 过滤器执行顺序解决跨域问题 1.2.2.3 es部分复习 1.2.3 前端部分 2 day1 配置网关2.1 任务2.2 网关…

5.3 调制与解调

信号的调制与解调是通信系统中一对基本的概念&#xff0c;涉及将信息&#xff08;语音、视频、数据等&#xff09;在发送之前进行处理以便在传输介质&#xff08;如无线电波、电话线等&#xff09;上有效传输&#xff0c;以及在接收端恢复这些信息的过程。 一、调制&#xff0…

Java | Leetcode Java题解之第60题排列序列

题目&#xff1a; 题解&#xff1a; class Solution {public String getPermutation(int n, int k) {int[] factorial new int[n];factorial[0] 1;for (int i 1; i < n; i) {factorial[i] factorial[i - 1] * i;}--k;StringBuffer ans new StringBuffer();int[] valid…

虚拟机jvm下

jvm原理与实践 java程序的跨平台特性 jvm基本结构 JVM类加载流程和内存结构总览 类加载 加载阶段 类加载 验证阶段 类加载 准备阶段 类加载 解析阶段 类加载 初始化阶段 程序计数器 虚拟机栈&本地方法栈 栈帧操作 堆 方法区 永久代 元空间 垃圾回收 可触及性

Day12-JavaWeb开发-登录校验(概述/JWT令牌/Fitter/Interceptor)登录认证(会话技术/会话跟踪)

1. 基础登录功能 2. 登录校验-概述 3. 登录认证-登录校验-会话技术 3.1 会话技术 3.2 会话跟踪方案对比 4. 登录校验-JWT令牌 4.1 JWT令牌-介绍 4.2 JWT令牌-生成和校验 4.3 JWT令牌-登录后下发令牌 5. 登录校验-过滤器Fitter 5.1 Fitter-入门 5.2 Fitter-详解(执行流程) 5.3…

Windows php 安装 Memcached扩展、php缺失 Memcached扩展、Class ‘Memcached‘ not found

在Windows系统下如何安装 php Memcached 扩展 下载dll文件 pecl地址&#xff1a;https://pecl.php.net/package/memcached 根据版本进行选择 &#xff1a; 解压下载的文件后得到了这么样的文件结构&#xff1a; 配置 移动dll文件到相应文件位置 重点&#xff1a; libme…

cefsharp实现资源替换如网页背景、移除替换标签、html标识、执行javascript脚本学习笔记(含源码说明)

(一)实现测试(仅供学习参考) 1.1 目标系统页面(登录页)和登录后首页面中2处(一个替换一个移除) 1.2 实现后效果(使用cefsharp自定义浏览器实现以上功能) 1.3 登录后页面替换和移除 系统名称和一个功能菜单li (二)通过分析代码实现脚本编写 2.1 分开处理,设置了…

Swish和H-Swish激活函数:提升模型训练效率

文章目录 Swish激活函数H-Swish激活函数实现总结参考 在深度学习领域&#xff0c;激活函数是神经网络中的关键组成部分&#xff0c;它决定了网络的输出和性能。近年来&#xff0c;研究人员提出了许多新的激活函数&#xff0c;其中Swish激活函数因其独特的性能优势而备受关注。这…

Matlab模拟森林火灾传播

在这个博客中&#xff0c;我们将会介绍一个简单的模拟森林火灾传播的程序&#xff0c;该程序基于一个基本的规则&#xff0c;根据树木状态的不同&#xff0c;以一定的概率生长、燃烧或是灭火&#xff0c;来模拟森林中火灾的传播过程。 目录 一、模拟效果 二、背景介绍 三、模…

Leetcode—1396. 设计地铁系统【中等】

2024每日刷题&#xff08;127&#xff09; Leetcode—1396. 设计地铁系统 实现代码 class UndergroundSystem { public:typedef struct Checkin {string startStation;int time;} Checkin;typedef struct Checkout{int tripNum;int totalTime;} Checkout;UndergroundSystem()…

OneNote导出白色背景文件时将笔记墨迹转换颜色

今天用OneNote导出笔记时发现在文件上做的黑色墨迹笔记全部转成了白色。推测是因为onenote会根据背景色自动转换黑色和白色的墨迹&#xff0c;但是其他颜色好像导出的时候不会转换。 于是&#xff0c;我们首先要转换背景&#xff0c;将黑色背景转成白色背景&#xff0c; 然后将…

buu相册

010分析是一个rar文件&#xff0c;7z打开发现是一个apk文件 但没发现什么敏感信息 全局搜索mail 然后就是查看引用与出处 base解密完是一个邮箱&#xff0c;提交对了。

dynamic_cast 静态转换

dynamic_cast 静态转换 const_cast 常量转换 重新解释转换(reinterpret_cast) 最不安全

用LangChain打造一个可以管理日程的智能助手

众所周知&#xff0c;GPT可以认为是一个离线的软件的&#xff0c;对于一些实时性有要求的功能是完全不行&#xff0c;比如实时信息检索&#xff0c;再比如我们今天要实现个一个日程管理的功能&#xff0c;这个功能你纯依赖于ChatGPT或者其他大语言模型&#xff08;后文简称llm&…

C++ | Leetcode C++题解之第61题旋转链表

题目&#xff1a; 题解&#xff1a; class Solution { public:ListNode* rotateRight(ListNode* head, int k) {if (k 0 || head nullptr || head->next nullptr) {return head;}int n 1;ListNode* iter head;while (iter->next ! nullptr) {iter iter->next;n…

【备战软考(嵌入式系统设计师)】07 - 计算机网络模型

七层模型 计算机网络中比较常见的有OSI七层模型和TCP/IP四层模型。 软考中主要考七层模型&#xff0c;但是实际中使用的还是四层模型比较多&#xff0c;我们主要是为了考试&#xff0c;那就主要讲讲七层模型。不过实际上四层模型就是将七层模型压缩了三层&#xff0c;本质上是…