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服务了。
正常状态下,断路器关闭
Spring Cloud Alibaba 雪崩效应和容错解决方案相关推荐
- Spring Cloud Alibaba 系统保护:微服务架构雪崩效应与服务限流
前面我们介绍了 OpenFeign 微服务间通信与 Spring Cloud Gateway 网关通信,这些是日常业务中的正常处理情况,但是在微服务环境下受制于网络.机器性能.算法.程序各方面影响,运 ...
- Spring Cloud Alibaba一站式解决方案
一.Spring Cloud Alibaba一站式解决方案 在springCloud的基础上延伸出来的微服务技术栈 为什么学习spring cloud alibaba? spring cloud多项组 ...
- Spring Cloud——Spring Cloud Alibaba 2021 Nacos Config bootstrap 配置文件失效解决方案
基本概念 微服务是基于Spring Cloud框架搭建的,Spring Cloud Config作为服务配置中心. 业务服务只配置服务名称.启用环境和config的URL地址,其他都配置在配置中心,例 ...
- Spring Cloud Alibaba 新一代微服务解决方案
本篇是「跟我学 Spring Cloud Alibaba」系列的第一篇, 每期文章会在公众号「架构进化论」进行首发更新,欢迎关注. 1.Spring Cloud Alibaba 是什么 Spring ...
- openfeign调用服务是否需要网关_阿里新一代微服务解决方案:Spring Cloud Alibaba
1.Spring Cloud Alibaba 是什么 Spring Cloud Alibaba 是阿里巴巴提供的微服务开发一站式解决方案,是阿里巴巴开源中间件与 Spring Cloud 体系的融合. ...
- Spring Cloud Alibaba x AppActive 带来的全新异地活动解决方案
01 新版本预览 Aliware 本次发布的 Spring Cloud Alibaba 2.2.9.RELEASE 和 2021.0.4.0 两个新版本,分别基于社区 2.2.x 和 2021.x 两 ...
- Spring Cloud Alibaba 解决方案 —— 学习示
Spring Cloud Alibaba 解决方案 -- 学习示例代码 技术体系[知识点] 1.Nacos 服务注册和发现 2.Nacos 统一配置中心 3.熔断降级限流 sentinel 4.fei ...
- golang微服务框架对比_微服务里程碑,Golang与Spring Cloud Alibaba完美结合
目前微服务架构仍是软件架构中最新的热门话题,虽然Golang是一门新的语言,但Golang的性能比python和java高出不少.既能承受程序使用运行的服务构建的繁重负载,又容易与GitHub集成,管 ...
- Spring Cloud Alibaba 微服务详细笔记
文章目录 SpringCloud 一.微服务概述 1.1.什么是微服务? 1.2.为什么是微服务? 1.3.架构演变 1.4.微服务的解决方案 二.什么是SpringCloud 2.1.官方定义 2. ...
最新文章
- android 混淆打包教程,Android studio 混淆打包
- vue 非template模式_vue-template-compiler 还能这么用
- linux C++ 多线程使用pthread_cond 条件变量
- POJ 2799 IP Networks
- C++输入cin详解
- [渲染层错误] multipolyline.styles: 样式id_【译】关于 SPA,你需要掌握的 4 层
- 编译运行一个java程序_如何从另一个Java程序编译和运行Java程序
- LeetCode 776. Split BST
- 同济大学高等数学第7版视频
- 百度地图--南京行政区域划分
- 超短波视距通信极限距离计算公式
- RL(Chapter 3): Finite Markov Decision Processes (有限马尔可夫决策过程)
- 什么叫组网_小米科普:一文看懂路由器上的 Mesh 组网是什么
- 旅游类网站的服务器配置,旅游各类 网站界面
- Costco市值10年增长5倍的秘诀:水坝式经营
- 用wifi实现细粒度的人体感知——Person-in-WiFi: Fine-grained Person Perception using WiFi
- 人类有多少可能移民火星?
- 什么是百度特效搜索?百度搜索什么有特效?---黑洞
- java ccf认证解答_CCF认证 java 中间数 遇到运行错误
- 计算机博弈 Negamax 负极值算法