Spring Cloud Alibaba 雪崩效应和容错解决方案

Spring Cloud Alibaba 雪崩效应和容错解决方案

文章目录

    • 1. 雪崩效应
      • 1.1. 举个例子:
    • 2. 常见的容错方案:
      • 2.1.超时:
      • 2.2. 限流:
      • 2.3. 仓壁模式:
      • 2.3.1. 现实中的仓壁模式:
      • 2.3.2. 软件中的仓壁模式:
      • 2.4. 断路器模式
        • 2.4.1. 现实中的断路器:
        • 2.4.2. 软件中的断路器:

1. 雪崩效应

微服务架构的系统包含很多微服务,微服务之间通过轻量级的通信机制进行通信,构建成了一个完成的应用系统。但是,每个微服务不能保证100%可用的,网络呢?有时也会出问题

1.1. 举个例子:

现在有一个高并发的应用系统它包含4个微服务,一开始每个微服务都是正常的,然后,在某一个时间点,微服务A突然挂了,所有的实例都挂了,而这是一个高并发的应用系统.

B服务还在分光的调用A服务的API呢,现在A服务挂了,现在B服务发往A服务的请求,就会强制等待 ,直到请求超时,而在java程序里面,一个请求呢,往往对应着一个线程,如果请求被强制等待,那么线程就会被强制阻塞,一直到请求超时的时候,这个线程才会被释放,由于,这是一个高并发的应用系统,阻塞的线程就会越来越多,而线程对应的服务器的计算资源,比方说内存、cpu,如果不作任何处理的话,终有一天B服务所在的服务器,再也无法创建新的线程了,于是B服务也挂了。

简言之,B服务是被A服务拖垮的,同样的道理,C服务和D服务调用B服务,C和D 也会被B服务拖垮,我们把基础服务故障导致上层服务故障,并且这个故障不断放大的过程,称之为雪崩效应,这样现象就像是滚雪球一样越滚越大,最后整个服务可能都挂了,在一些英文书里面常常把雪崩效应称之为cascading failure 级联失效 级联故障。

2. 常见的容错方案:

A服务挂了,B服务做好了容错,就不会被A服务拖垮。
业界常使用的使用这些容错方案,可以有效的避免雪崩效应

2.1.超时:

比如说为每一次请求设置超时时间,假若为1s,不管这次请求会不会成功,这个线程就会被释放,这样只要线程释放的速度够快,那么,B服务就不会被A服务拖垮了

2.2. 限流:

在一个高并发的应用系统中,采坑能存在大量的线程阻塞,如果我们经过评估,发现微服务B的实例最大能够承载的qps是1000,那么,我们就可以为微服务B设置一个限流的值,比方说是800qps,或者其他一个低于1000qps的阈值,这个时候,只要某一个实例达到这个阈值,再有流量进来,就直接拒绝,通过这种方式,也实现了对自己的保护,至少B服务不会被A服务拖到宕机。

2.3. 仓壁模式:

2.3.1. 现实中的仓壁模式:

泰坦尼克号,号称永不沉没的船,是基于技术而言的,用到了仓壁模式,一条船被划分了3个船舱,每个船舱之间,用2块钢板焊死,即使,某一个船舱进水也不会影响其他船舱,当时,泰坦尼克号的设计能够容纳2个主仓的进水船依然能够正常工作,所谓主仓就是中间两边两个比较大的仓。3个仓进水了,超出了泰坦尼克号的容错能力,于是,就悲剧了。

2.3.2. 软件中的仓壁模式:

AController 有自己独立的线程池,比方叫thread-pool-1 coreSize=10
调用其他API挂了,对于高并发的应用,这个线程池就满了,然后,去排队,再然后就直接拒绝了,线程池大家应该是很熟悉,线程池有自己的拒绝策略。
同理,BController 有自己独立的线程池,比方叫thread-pool-2 coreSize=10,
此时,AController 线程池满了或者拒绝了不会影响BController ,因为都有自己的线程池。
如果用船舱的例子类比的话,现在这2个Controller 就好比2个船舱,Controller 之间用2个独立的线程池焊死,AController 类中的API调不通,就相当于这个船仓进水了,那么,你的船舱进水和我的船舱没有关系,这就是仓壁模式。

2.4. 断路器模式

断路器是服务容错里面最高端的方案

2.4.1. 现实中的断路器:

每个人家里都有断路器,就是电闸。
断路器说白了就是监控加开关,它会实时监控电路的状态,但发现某段时间内,电流过大,他就认为电路短路了,然后就会跳闸,从而保护电路不被烧毁。

2.4.2. 软件中的断路器:

举个栗子:
比如说AController 中,调用API时,我监控5s以内的错误率、错误次数等等,如果错误率达到阈值又或者错误次数达到一定的阈值,我就认为调用的服务已经挂了,然后就跳闸,不去调用远程的api服务了。

正常状态下,断路器关闭

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

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

相关文章

layui获得列表json数据_golang实战开发之博客功能篇:文章列表的读取与展示和分类筛选展示处理...

前面我们介绍了文章详情页面的展示的逻辑代码实现,这一节,我们将继续讲解文章列表的读取和展示、文章根据分类进行筛选、最新文章、热门文章等的调用处理逻辑。首先,我们先编写文章列表页的前端代码。这里,我们文章采用类似WordPr…

“智企云中享“,首届SAP中国云大会召开

2019 年 6 月 5 日,上海讯— 今日,首届SAP云大会在上海盛大召开。作为SAP云计算家族在中国的首秀,大会全面呈现了SAP云业务的战略、产品、商业场景、浸入式体验。作为体验管理领域的领导者,SAP以覆盖企业运营全价值链的云服务解决…

SpringBoot入门到精通_第7篇 _必知必会总结

接上一篇:SpringBoot入门到精通_第6篇 _必知必会

java对mysql读写权限设置_Java学习笔记——MySQL开放3306接口与设置用户权限

系统Ubuntu16.04 LTS1、开放3306端口查看端口状态:netstat -an|grep 3306tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN目前只有本机可以访问输入指令:sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf如果之前配置过全局配置文件,也可输入指令:su…

容器精华问答 | 如何进行跨机器的Container做Link ?

戳蓝字“CSDN云计算”关注我们哦!云计算的发展日新月异,新技术层出不穷,尤其容器技术自2013年Docker容器问世以来一路高歌猛进红遍大江南北,与虚拟机相比,容器更显优势,有着更轻量、更快捷、占用资源更少&a…

Sublime Text3 多行合并为一行

快捷键说明CTRL J多行合并为一行ctrld双击选中关键词或者关键词部分,在输入快捷键关键字就会一个一个选中,就可以同时编辑

安卓psp模拟器哪个好_psp模拟器安卓完美版下载_psp模拟器完美版手机版下载_玩游戏网...

《psp模拟器完美版》App是专业的PSP游戏模拟器,兼容适配任何安卓机型,用户下载于此畅玩PSP游戏,还可自制游戏,能够自由设置多国语言,更改图像、声音、控制、网络等多种选项设置,想玩好游戏,玩打…

腾讯也有“神盾局”?秀出“技术肌肉”就靠TA了……

戳蓝字“CSDN云计算”关注我们哦!技术头条:干货、简洁、多维全面。更多云计算精华知识尽在眼前,get要点、solve难题,统统不在话下!漫威的超级英雄世界中,“神盾局”一直凭借着不少的先进武器装备&#xff0…

Spring 集成 mybatisPlus

文章目录1. pom.xml2. 实体类3. mapper接口4. applicationContext.xml5. db.properties6. log4j.xml7. mybatis-config.xml8. 测试类9. 控制台输出10. 源码地址1. pom.xml <?xml version"1.0" encoding"UTF-8"?><project xmlns"http://ma…

用python编excel统计表_Python实现对excel文件列表值进行统计的方法

本文实例讲述了Python实现对excel文件列表值进行统计的方法。分享给大家供大家参考。具体如下&#xff1a;#!/usr/bin/env python#codinggbk#此PY用来统计一个execl文件中的特定一列的值的分类import win32com.clientfilenameraw_input("请输入要统计文件的详细地址&#…

大话云存储,这个“对象”可能无处不在

戳蓝字“CSDN云计算”关注我们哦&#xff01;文 | pasca来源 | 蛋蛋团&#xff08;ID&#xff1a;dandan_tuan&#xff09;大纲前言1、Who&#xff1a;谁使用对象存储2、What&#xff1a;对象存储是什么3、Why&#xff1a;为什么他们会使用对象存储4、how to do:应用场景分析5、…

linux java文件 core_linux下部署.net core/java

.net core1.查看系统是否已安装net core命令&#xff1a;dotnet --info如果提示未找到命令&#xff0c;说明需要按照net core环境&#xff0c;否则跳过2&#xff0c;3两步2.查看系统版本&#xff0c;这里是CentOS 7命令&#xff1a;cat /etc/redhat-release3.根据系统版本找到安…

振奋!中国正式进入5G元年;华为5G俄罗斯签下大单;王坚进入工程院院士第二轮评审...

戳蓝字“CSDN云计算”关注我们哦&#xff01;嗨&#xff0c;大家好&#xff0c;重磅君带来的【云重磅】特别栏目&#xff0c;如期而至&#xff0c;每周五第一时间为大家带来重磅新闻。把握技术风向标&#xff0c;了解行业应用与实践&#xff0c;就交给我重磅君吧&#xff01;重…

java 对象复制 反射_利用Java反射机制实现对象相同字段的复制操作

一、如何实现不同类型对象之间的复制问题&#xff1f;1、为什么会有这个问题&#xff1f;近来在进行一个项目开发的时候&#xff0c;为了隐藏后端数据库表结构、同时也为了配合给前端一个更友好的API接口文档(swagger API文档)&#xff0c;我采用POJO来对应数据表结构&#xff…

企业实战_01_Redis下载/安装/运行/停止

文章目录一、Redis下载&#xff1a;官方&#xff1a;https://redis.io/二、Redis安装&#xff1a;2.1. 上传redis软件服务器2.2. 解压redis2.3. 进入redis目录&#xff0c;进行redis安装2.4. 执行redis安装测试&#xff1a;2.5. 安装异常处理三、redis 启动、停止3.1. 进入src目…

关于5G,你必须知道的事儿……

戳蓝字“CSDN云计算”关注我们哦&#xff01;文 | 小枣君来源 | 鲜枣课堂什么是5G 5G&#xff0c;就是5th Generation Mobile Networks&#xff08;第五代移动通信网络&#xff09;&#xff0c;也可以称为5th Generation Wireless Systems&#xff08;第五代无线通信系统&a…

java管理员登录_idea实现管理员登录javaweb

mysql创建db_0106数据库&#xff0c;创建表添加一条数据&#xff0c;id int自增&#xff0c;密码&#xff1a;为MD5加密insert into tb_sys values(null,admin,MD5(123),"系统管理员");项目目录结构com.isoft.db包下db.properties文件mysql.drivercom.mysql.jdbc.Dri…

linux环境下redis5.0的安装配置

文章目录一、Redis介绍&#xff1a;二、安装Redis2.1. 下载 解压 进入文件夹 然后 编译2.2. 启动Redis2.2.1. 指定配置文件启动redis2.2.2. 配置redis后台启动三. 登录验证一、Redis介绍&#xff1a; Redis是当前比较热门的NOSQL系统之一&#xff0c;它是一个key-value存储系统…

漫话:如何给女朋友解释什么是编译与反编译

戳蓝字“CSDN云计算”关注我们哦&#xff01;来源 | 漫话编程某天下班后&#xff0c;我在家里进行电话面试&#xff0c;问到面试者这样一个问题&#xff1a;"你知道使用哪些办法可以反编译Java代码吗&#xff1f;"。但是面试者回答的并不好&#xff0c;所以我在面试评…