微服务雪崩问题解决 Sentinel

news2024/12/23 20:26:48

雪崩问题以及解决方案
限流设置
达到阈值的效果
隔离和降级
熔断
授权规则
设置规则持久化

雪崩问题以及解决方案

  • 雪崩
  • 微服务调用链路中的某个服务出现故障,引起链路上其他服务都不可用,这就是雪崩
  • 解决方案
  • 超时处理,设定超时时间,请求超过设定时间,就返回错误信息
  • 舱壁模式,设定每个业务使用的线程数,避免消耗服务器的全部资源,也叫线程隔离
  • 熔断降级,由断路器统计业务执行的异常比例,如果超出阈值则会熔断该业务,拦截访问该业务的一切请求
  • 预防方案
  • 流量控制,限制业务的访问量,避免服务因流量突增,出现故障

Sentinel

  • 步骤
  • 依赖
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
        </dependency>
  • 配置Sentinel 信息
    在这里插入图片描述
  • 这样就可以监控到服务
    在这里插入图片描述

设置限流

限流

  • 直接:对当前资源限流
    在这里插入图片描述

  • 关联模式:关联另一个请求,如果这个请求超过了阈值,关联者就会被限流

  • 两个资源有竞争关系,一个优先级高,一个优先级低
    在这里插入图片描述

  • 链路模式

  • 只统计从指定资源进入当前资源的请求,对请求来源进行限流
    在这里插入图片描述

达到阈值的效果

在这里插入图片描述

  • 快速失败:QPS超过阈值,拒绝新的请求
  • warm up :QPS超过阈值时,拒绝新的请求,QPS的阈值是逐渐提高的
  • 排队等待:请求进入队列,按## 照阈值时间依次执行,如果预期等待时间大于超时时间,直接拒绝

参数限流

在这里插入图片描述

隔离和降级

  • 线程隔离 保护调用者
    1. application.yml中配置
      在这里插入图片描述
  • 2.编写异常处理并配置bean
    在这里插入图片描述
  • 3.接口上声明
    在这里插入图片描述

线程池隔离

设定每个业务使用的线程数,避免消耗服务器的全部资源,也叫线程隔离
在这里插入图片描述
在这里插入图片描述

熔断

.服务熔断交由状态机实现
请求进入closed,当请求到达阈值时,进入open,快速失败请求,熔断时间结束后,进入half-opne
尝试一次请求,查看请求是否正确,正确关闭路云强,错误打开断路器

  • 慢调用:每次请求时间多次超过比例阈值,触发熔断
    在这里插入图片描述
  • 异常比例:出现异常的比例超出阈值时,操作失败
    在这里插入图片描述

授权规则: 对授权者的规则做判断

授权规则就是对请求来源的判断,通过来源名称,判断是否可以访问

  1. 网关定义请求头
  2. 服务修改请求头信息
  3. 配置授权的白名单/黑名单
    在这里插入图片描述

全局异常的错误提示

import com.alibaba.csp.sentinel.adapter.spring.webmvc.callback.BlockExceptionHandler;
import com.alibaba.csp.sentinel.slots.block.BlockException;
import com.alibaba.csp.sentinel.slots.block.authority.AuthorityException;
import com.alibaba.csp.sentinel.slots.block.degrade.DegradeException;
import com.alibaba.csp.sentinel.slots.block.flow.FlowException;
import com.alibaba.csp.sentinel.slots.block.flow.param.ParamFlowException;
import org.springframework.stereotype.Component;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@Component
public class SentinelExceptionHandler implements BlockExceptionHandler {
    @Override
    public void handle(HttpServletRequest request, HttpServletResponse response, BlockException e) throws Exception {
        String msg = "未知异常";
        int status = 429;

        if (e instanceof FlowException) {
            msg = "请求被限流了";
        } else if (e instanceof ParamFlowException) {
            msg = "请求被热点参数限流";
        } else if (e instanceof DegradeException) {
            msg = "请求被降级了";
        } else if (e instanceof AuthorityException) {
            msg = "没有权限访问";
            status = 401;
        }

        response.setContentType("application/json;charset=utf-8");
        response.setStatus(status);
        response.getWriter().println("{\"msg\": " + msg + ", \"status\": " + status + "}");
    }
}

规则持久化

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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

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

相关文章

【软件工程期末复习内容】

前言 时不可以苟遇&#xff0c;道不可以虚行。 一、软件工程的概念 软件是计算机系统运行的 指令、数据 和 相关文档 的集合&#xff0c;即软件等于程序、数据、加上文档。程序&#xff1a;是事先按照预定功能性能等要求设计和编写的指令序列&#xff1b;数据&#xff1a;是使…

Python编程 while循环

作者简介&#xff1a;一名在校计算机学生、每天分享Python的学习经验、和学习笔记。 座右铭&#xff1a;低头赶路&#xff0c;敬事如仪 个人主页&#xff1a;网络豆的主页​​​​​​ 目录 前言 一.循环控制 1.循环控制介绍 2.while循环表达式 3.while循环表达式 4.b…

Python实现ALO蚁狮优化算法优化支持向量机回归模型(SVR算法)项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档视频讲解&#xff09;&#xff0c;如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 蚁狮优化(Ant Lion Optimizer&#xff0c;ALO)算法是Mirjalili于2015提出的一种新型元启发式群智能算法…

47-linux-vim-安装以及权限等-缺少

47-linux-vim-安装以及权限等&#xff1a; vi编辑器简介 vim是一个全屏幕纯文本编辑器&#xff0c;是vi编辑器的增强版&#xff0c;我们主要讲解的是vim编辑器。可以利用别名让输入vi命令的时候&#xff0c;实际上执行vim编辑器&#xff0c;例如: [rootlocalhost ~]# alias v…

HTTP协议介绍

了解HTTP HTTP是什么呢&#xff1f;它是超文本传输协议&#xff0c;HTTP是缩写&#xff0c;它的全英文名是HyperText Transfer Protocol。 那么什么是超文本呢&#xff1f; 超文本指的是HTML&#xff0c;css&#xff0c;JavaScript和图片等&#xff0c;HTTP的出现是为了接收和…

一位全栈工程师转岗项目经理的初体验与总结

从上周开始&#xff0c;公司这边把我从全栈工程师的岗位调到了项目经理的岗位&#xff0c;开始尝试管理岗位&#xff0c;感觉换了一个岗位像是换了一份工作一样&#xff0c;又在次充满了干劲。开始新的项目&#xff0c;招纳新的项目成员&#xff0c;虽然都是在做软件开发的事情…

【手把手】分布式定时任务调度解析之Quartz

1、任务调度背景 在业务系统中有很多这样的场景&#xff1a; 1、账单日或者还款日上午 10 点&#xff0c;给每个信用卡客户发送账单通知&#xff0c;还款通知。如何判断客户的账单日、还款日&#xff0c;完成通知的发送&#xff1f; 2、银行业务系统&#xff0c;夜间要完成跑批…

CCF CSP认证——201312

文章目录201312-1 出现次数最多的数201312-2 ISBN号码201312-3 最大的矩形201312-4 有趣的数201312-5 I’m stuck!201312-1 出现次数最多的数 题目链接 数据量较小&#xff0c;且数据范围也比较小。可以直接暴力&#xff0c;通过设置数组记录下标数据出现的次数&#xff0c;最…

C/C++关键字

C/C关键字【1】extern "C"【2】asm【3】关键字auto【4】break语句【5】catch 语句【6】关键字class【7】关键字const【8】#if【9】#pragma once【10】#pragma pack(1)【11】#pragma pack(4)【12】explicit【】 continue语句【13】关键字enum【14】friend【15】goto语…

【springboot进阶】基于starter项目构建(二)构建starter项目-web

目录 一、创建 web-spring-boot-starter 项目 二、添加 pom 文件依赖 三、构建配置 1. rest模板配置 RestTemplateConfig 2. 统一异常处理 BackendGlobalExceptionHandler 3. 统一返回数据结构 4. jwt鉴权处理 5. 请求日志切面处理 WebLogAspect 6. 邮件配置 BackendM…

mysql数据同步到elasticsearch数据解决方案

mysql数据同步到elasticsearch数据解决方案 问题场景 1.分库分表后多关联或者多条件查找效率低下&#xff0c;例如2b场景的查询&#xff0c;导出等需要多条件查询&#xff0c;继续用分库分表话效率低下。 2.数据量太多需要转移非关系型数据库elasticsearch存储 3.其他数据转…

AI 实战篇 |基于 AI开放平台实现 【植物识别】 功能,成为行走的百科全书

&#x1f3ac; 博客主页&#xff1a;https://xiaoy.blog.csdn.net &#x1f3a5; 本文由 呆呆敲代码的小Y 原创&#xff0c;首发于 CSDN&#x1f649; &#x1f384; 学习专栏推荐&#xff1a;Unity系统学习专栏 &#x1f332; 游戏制作专栏推荐&#xff1a;游戏制作 &…

代码随想录刷题记录day40 爬楼梯+零钱兑换+完全平方数·

代码随想录刷题记录day40 爬楼梯零钱兑换完全平方数 参考&#xff1a;代码随想录 70. 爬楼梯 思想 当作完全背包问题&#xff0c;物品是1&#xff0c;2&#xff0c;可以无限次取用&#xff0c;背包的容量是n 1.dp[j]表示容量为j的背包&#xff0c;装满有dp[j]次 2.dp[j]dp…

【图像处理】opencv | 图像的二值化操作| cv2.threshold() | cv2.adaptiveThreshold()

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录前言一、cv2.threshold()阈值操作函数1.1、初见1.2、阈值不同时的效果二、cv2.adaptiveThreshold()自适应阈值操作函数2.1、初见2.2、固定blocksize,改变C值大小的实…

104-127-linux-vim-shell基础

104-linux-shell: 1.shell基础 分类&#xff1a;linux使用Bash&#xff0c;可通过vi /etc/shells查看linux支持的shell类型。 1、echo [rootlocalhost ~]#echo [选项] [输出内容] 选项:-e:支持反斜线控制的字符转换&#xff08;具体百度吧)-n:取消输出后行末的换行符号&…

Python实现ALO蚁狮优化算法优化支持向量机分类模型(SVC算法)项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档视频讲解&#xff09;&#xff0c;如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 蚁狮优化(Ant Lion Optimizer&#xff0c;ALO)算法是Mirjalili于2015提出的一种新型元启发式群智能算法…

185.基于Django的富文本编辑器安装与使用

1.DjangoUeditor 1.1 概述 富文本编辑器&#xff0c;在web开发中必不可少&#xff0c;但是django没有自带富文本编辑器&#xff0c;因此我们需要使用第三方库&#xff0c;这里使用DjangoUeditor DjangoUditor是百度开源的在线HTML编辑器&#xff0c;功能非常强大&#xff0c;像…

VUEElement简单介绍。

目录 一、VUE 1、基本介绍 2、Vue 指令 3、生命周期 二、Element 1、基本介绍 2、Element 布局 一、VUE 1、基本介绍 ▶ 概述 Vue 是一套前端框架&#xff0c;免除原生JavaScript中的DOM操作&#xff0c;简化书写。 我们之前也学习过后端的框架 Mybatis &#xff0c;My…

Linux下C/C++实现类似netstat命令(列出TCP和UDP连接)

网络连接一般包括最基本的五元组信息(源地址、目标地址、源端口、目标端口、协议号)再加上所属进程信息pid, exe, cmdline等。其中这两项数据大多可直接读取linux /proc目录下的网络状态连接文件/proc/net/tcp、/proc/net/udp), 进程状态目录(/proc/pid/xx)。 Linux 下的/proc…

Java基于JSP的报刊订阅管理系统

随着人类的发展&#xff0c;人们对信息的获取方式也越来越多&#xff0c;虽然很多时候人们习惯了通过手机来获取各类信息&#xff0c;但是手机也逐渐的成为了危害人类健康的杀手之一&#xff0c;为了能够让大家回归到健康的生活中来&#xff0c;我开发了本系统&#xff0c;旨在…