当前位置:网站首页>微服务雪崩问题及解决方案
微服务雪崩问题及解决方案
2022-07-23 15:33:00 【流楚丶格念】
雪崩问题
雪崩问题
微服务中,服务间调用关系错综复杂,一个微服务往往依赖于多个其它微服务。

如图,如果服务提供者I发生了故障,当前的应用的部分业务因为依赖于服务I,因此也会被阻塞。此时,其它不依赖于服务I的业务似乎不受影响。

但是,依赖服务I的业务请求被阻塞,用户不会得到响应,则tomcat的这个线程不会释放,于是越来越多的用户请求到来,越来越多的线程会阻塞:

服务器支持的线程和并发数有限,请求一直阻塞,会导致服务器资源耗尽,从而导致所有其它服务都不可用,那么当前服务也就不可用了。
那么,依赖于当前服务的其它服务随着时间的推移,最终也都会变的不可用,形成级联失败,雪崩就发生了:

解决方案
解决雪崩问题的常见方式有四种:
1.超时处理
超时处理:设定超时时间,请求超过一定时间没有响应就返回错误信息,不会无休止等待

2.仓壁模式
方案2:仓壁模式
仓壁模式来源于船舱的设计:

船舱都会被隔板分离为多个独立空间,当船体破损时,只会导致部分空间进入,将故障控制在一定范围内,避免整个船体都被淹没。
于此类似,仓壁模式可以限定每个业务能使用的线程数,避免耗尽整个tomcat的资源,因此也叫线程隔离。

3.断路器
断路器模式:由断路器统计业务执行的异常比例,如果超出阈值则会熔断该业务,拦截访问该业务的一切请求。
断路器会统计访问某个服务的请求数量,异常比例:

当发现访问服务D的请求异常比例过高时,认为服务D有导致雪崩的风险,会拦截访问服务D的一切请求,形成熔断:

4.限流
流量控制:限制业务访问的QPS(每秒钟请求数量),避免服务因流量的突增而故障。

总结
什么是雪崩问题?
- 微服务之间相互调用,因为调用链中的一个服务故障,引起整个链路都无法访问的情况。
可以认为:
限流是对服务的保护,避免因瞬间高并发流量而导致服务故障,进而避免雪崩。是一种预防措施。
超时处理、线程隔离、降级熔断是在部分服务故障时,将故障控制在一定范围,避免雪崩。是一种补救措施。
边栏推荐
- ContextLoaderListener vs DispatcherServlet
- 使用moment获取当天日期与下一天
- Single cell literature learning (part6) -- forestfireclustering for SC sequencing combinations iterative label promotion with
- An online frequent fullgc troubleshooting
- 分析optimism重放合约地址攻击事件
- 强化学习---马尔可夫决策过程 MP MRP MDP
- USB Type-C PD CC逻辑芯片中的角色定义
- 一次线上频繁FullGC的排查
- Start multiple redis instances on a Linux machine
- Leetcode skimming: dynamic programming 05 (different paths II)
猜你喜欢

基于OpenPGP的文件管理系统

乘风破浪!金融科技时代下的数字化转型之路

Données chronologiques dans l'Internet industriel des objets

Do you really understand the persistence mechanism of redis?

强化学习---马尔可夫决策过程 MP MRP MDP

Trust counts the number of occurrences of words in the file

Static distribution and dynamic distribution in trust

Console calculator developed based on C language

基于scrapy的电商平台数据爬取与展示

As a background developer, you must know two kinds of filters
随机推荐
TYPE-C 转OTG(USB2.0传输数据)+PD充电协议芯片 乐得瑞LDR6028/LDR6023SS
数据集中度分析,数据分布情况
Debug:形参带有Const修饰符号需要注意的地方
网页基础模版
作为一名后台开发人员,你必须知道的两种过滤器
MySQL executes alter table XX add column with duplicate entry error
分析optimism重放合约地址攻击事件
多线程编程
MinGW-w64的安装及配置教程
MongoDB分组取每组中一条数据
Page return update
Repository XXX does not have a rease file "suggested collection"
An online frequent fullgc troubleshooting
File management system based on OpenPGP
分页类
JDBC program example using Preparedstatement
windows中mysql使用命令导出导入
Tampermonkey究竟有什么用?
Analyze optimism replay contract address attack events
Seata