什么是服务雪崩解决思路

news2024/11/22 13:37:04

文章目录

  • 1、雪崩问题
  • 2、雪崩问题的四种解决思路
  • 3、服务保护技术选型对比

1、雪崩问题

假设有一个微服务A,它调用了服务B、服务D,而某时刻服务D挂掉:

在这里插入图片描述

服务A要等待服务D的结果,而服务D已经不能正常响应了,此时服务A内部阻塞,不会释放tomcat的连接(此时服务A依赖于服务B的业务还是不受影响)。但随着这种服务A—服务D的请求越来越多,而tomcat的连接数有限,tomcat资源就会耗尽:

在这里插入图片描述

此时,再有请求进到服务A,哪怕是不需要访问服务D的请求,服务A也没资源处理了。即某个服务故障,最终导致了依赖它的某个服务也故障了。把这一点放大:

在这里插入图片描述
如果后面的服务,和资源耗尽不可用的服务有依赖关系,则后面的服务也会渐渐变得不可用,从而引起整个链路中的所有微服务都不可用:

在这里插入图片描述

微服务调用链路中的某个服务故障,引起整个链路中的所有微服务都不可用,这就是雪崩。

2、雪崩问题的四种解决思路

超时处理:设定超时时间,请求超过一定时间没有响应就返回错误信息,不会无休止等待

在这里插入图片描述
这只能缓解雪崩问题,而不能彻底根除,因为比如设置等待1s就释放1个连接,但一秒钟之内进来了2个请求,终有一天,服务A的资源也可能被耗尽。

舱壁模式:限定每个业务能使用的线程数,避免耗尽整个tomcat的资源,因此也叫线程隔离

在这里插入图片描述
如上图,舱壁用木板隔开,哪怕触礁了,也只是被撞破的那一小块进水。对应到程序中,就是将可用线程数分割,服务A调用服务B,最多占用10个线程,服务A调用服务C最多10个线程:

在这里插入图片描述
现在哪怕服务A到C出问题了,能占用的tomcat资源也是有限的,不至于所有资源被耗尽(不至于整条船全进水了)。如此就解决了雪崩问题,但造成了一点资源浪费,明知A到C不通了,但还是在消耗资源去请求。

熔断降级:由断路器统计业务执行的异常比例,如果超出阈值则会熔断该业务,拦截访问该业务的一切请求。

在这里插入图片描述

比如到服务A–服务D的这个请求,访问了三次,两次失败,即66%异常,阈值如果设为50%,则此时发生熔断,后续再有这个请求过来直接拦截,快速失败,立刻释放资源,从而解决雪崩问题。

流量控制:限制业务访问的QPS,避免服务因流量的突增而故障

在这里插入图片描述

以上三种是出现雪崩后的解决方案,流量控制则是预防雪崩,防止服务发生故障。服务不故障,也就不传递给依赖它的服务,也就没有雪崩问题了。当然了,流量控制只是预防了因高并发引起的服务故障。服务故障的原因可不止高并发一种。


小结:

在这里插入图片描述

3、服务保护技术选型对比

在这里插入图片描述

  • 熔断降级策略中,sentinel既可以根据异常比例,也可以根据响应慢的比例
  • 在限流和流量整形方面,也优于Hystrix
  • Sentinel有控制台,即可视化操作界面
  • 最后,Hystrix官方已经不再维护

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

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

相关文章

基于linux下的高并发服务器开发(第一章)- Makefile(3)1.12

04 / 变量 修改:上一小节的makefile内容 (1)将如下的 app:sub.o add.o mult.o div.o main.ogcc sub.o add.o div.o main.o 改成 srcsub.o add.o mult.o div.o main.otargetapp$(target):$(src)$(CC) $(src) -o $(target) 截图&#xff1a…

vue中使用Pinia和Vuex详解

最具有争议的Pinia和Vuex那个更好? 我们使用Vue2的时候,Vuex作为一个状态管理工具在组件中使用方便了很多。Vue3推出后,虽然相对于Vue2很多东西都变了,但是核心的东西还是没有变的,比如说状态管理、路由等等。实际上&a…

怎么修复vcruntime140_1.dll缺失,vcruntime140_1.dll丢失的解决方案

vcruntime140_1.dll是什么? vcruntime140_1.dll是Windows操作系统中的一个动态链接库文件,它属于Microsoft Visual C Redistributable的一部分。这个文件包含了一些在运行使用了C语言编写的程序时所需的函数和资源。当系统无法找到或加载vcruntime140_1…

视频号自曝核心算法,流量获取攻略解析

我是卢松松,点点上面的头像,欢迎关注我哦! 近日,视频号爆出了一项重要消息:微信视频号竟然自爆了自己的核心算法逻辑。 这在一般平台是比较罕见的。因为一旦自曝了算法,就会有人根据这个算法去作弊&…

【已解决】Flask项目报错TypeError: tuple indices must be integers or slices, not str

文章目录 问题情境报错及分析报错代码分析 解决方案必要的解决方法可能有用的解决方法 问题情境 本解决方案适用情境:在本地可以正常运行的flask项目,放到云服务器报错TypeError: tuple indices must be integers or slices, not str,即代码…

有哪些记事本app可以用来整理个人笔记?

我总是在思考一个问题,为什么现在越来越多的人选择使用记事本app?它们相比传统笔记本,又有什么吸引人的地方呢?这其实并不难理解。因为,记事本app不仅可以让我们及时记录重要信息,还能对这些信息进行系统、…

【C++技能树】String类解析与模拟实现

Halo,这里是Ppeua。平时主要更新C语言,C,数据结构算法…感兴趣就关注我bua! 终于放假啦,停更了一个月的博客也要重新拾起来了。近一个月都没怎么好好写代码,现在好多都看不懂了。在接下的时间里&#xff0…

京东内部 Spring Boot 全解笔记,精髓!

在使用传统的 Spring 去做 Java EE(Java Enterprise Edition)开发中,大量的 XML 文件存在于项目之中,导致 JavaEE 项目变得慢慢笨重起来,,繁琐的配置和整合第三方框架的配置,导致了开发和部署效…

Deepin/UOS 装机 手动安装 分区 注意事项

以下3个分区必须 efi 分区 boot 分区 / (根) 分区 我们下期见,拜拜!

kaggle学习笔记-情感和地理空间分析

背景 秘鲁食品评论中的情绪和地理空间分析 自然语言处理 (NLP) 是人工智能的一个分支,致力于让计算机能够像人类一样理解文本和口语单词。 另一方面,地理空间分析是对图像、GPS、卫星摄影和历史数据的收集、显示和操作,这些数据以地理坐标明…

TensorFlow模块简介

TensorFLow框架内构建了很多高层次的API,可以显著减少编写程序的代码量,其中包含众多网络结构相关函数和数据载入、数据处理的方法。 tf.data.Dataset tf.data.Dataset是TensorFlow内置的数据输入模块,提供了专门用于数据输入的多种方法&am…

Android Vector(矢量图)介绍

Android Vector(矢量图)介绍 1、vector的宽高属性 <vector xmlns:android"http://schemas.android.com/apk/res/android"android:width"24dp"android:height"24dp"android:viewportWidth"24"android:viewportHeight"24"…

控制台警告:alue of key ‘route.角色管理‘ is not a string!

控制台警告&#xff1a;Value of key route.角色管理 is not a string! 具体情况如下图所示&#xff1a; 解决办法&#xff1a; 先找到要修改的配置文件&#xff0c;先在src文件下&#xff0c;locale文件中找index.js。 如果src下没有locale文件可以找lang文件下的index.js文…

DAY46:动态规划(八)01背包应用2:一和零(二维容量01背包)

文章目录 474.一和零思路为什么不是多重背包而是01背包与之前01背包问题的区别 DP数组的含义递推公式&#xff08;也是求最大值&#xff09;初始化遍历顺序完整版总结 474.一和零 本题属于 装满背包最多能有多少个物品 类型本题是容量有两个维度的背包&#xff0c;背包容量是m…

【数据结构】树与二叉树(上)

目录 前言&#xff1a; 一、树&#xff1a; 1.树的概念&#xff1a; 2.树的相关概念&#xff1a; 3.树的表示&#xff1a; 4.书的实际使用场景&#xff1a; 二、二叉树&#xff1a; 1.二叉树的概念&#xff1a; 2.两种特殊二叉树&#xff1a; ①.满二叉树&#xff1a;…

力扣每日一题2023.7.13

题目: 示例: 分析: 给我们一个矩阵,我们需要找出一条路径从矩阵第一层(索引为0)到达矩阵最后一层,并且使得路径上的数值之和最小. 如果是老手,那么应该一眼就能看出来可以使用动态规划,如果看不出来,那我们接下来一起分析分析. 首先我们先不要搞这么复杂,以示例1为例,我们就…

Redis数据结构 — QuickList

目录 quicklist 结构设计 总结 quicklist 结构设计 quicklistNode 结构体里包含了前一个节点和下一个节点指针&#xff0c;这样每个 quicklistNode 形成了一个双向链表。但是链表节点的元素不再是单纯保存元素值&#xff0c;而是保存了一个压缩列表&#xff0c;所以 quickli…

JSP基础

javaWeb项目目录 src&#xff1a;存放Java源文件 src/main/java/com&#xff1a;存放相应的Java代码&#xff0c;并根据对应的Java项目继续分层架构&#xff0c;主要有以下几个软件包。 bean包&#xff1a;封装类&#xff0c;一般是按照数据库的来写内容的&#xff0c;一个表…

Sentry 监控部署与使用(详细流程)

一、简介 Sentry 是一个开源的实时错误监控的项目&#xff0c;它支持很多端的配置&#xff0c;包括 web 前端、服务器端、移动端、游戏端。 基于 Django 构建的现代化的实时事件日志监控、记录和聚合平台&#xff0c;主要用于如何快速的发现故障。更快地解决错误和性能问题&…

vue——自定义指令,实现拖拽改变元素的宽度——技能提升

最近在看企业微信时&#xff0c;发现tapd的需求部分&#xff0c;分为左右两部分&#xff0c;左侧可以实现拖拽改变宽度。 感觉这样的实现效果比较好&#xff0c;再联想到之前写绩效结构时&#xff0c;也是同样的左右布局。 如果能实现同样的效果&#xff0c;则算是很好一种体…