雪崩问题

简介: 应用的硬件、软件架构在涉及到部署时,一般会根据实际请求量做一定的压力测试,以测试系统稳定性、健壮性,避免后续线上未知故障。假设在一个电商的秒杀场景下,订单中心本身能够承载的QPS预设是10W,因为活动的火爆导致流量瞬时达到100W,此时订单中心因无法承载其10倍的请求将会崩溃,那么对于整个分布式架构系统会产生什么问题呢?本节我们将借助于Sentinel的流量控制、隔离降级来解决上述分布式架构中常见的雪崩问题

1.雪崩问题及解决方案

1.1 什么是雪崩问题

在微服务医疗系统中,当医生给患者开立药品医嘱时,需要完成对药品库存的扣减、新医嘱信息的创建、医疗费用的预扣等多个业务活动。假设此时费用中心服务宕机,此时医嘱创建请求会持续等待下游服务的响应,在系统未做任何保护时,请求会在响应之前持续等待,随着更多的请求过来直至医嘱中心服务资源耗尽。费用中心不可用的现象转移到其上游医嘱中心,医嘱中心的不可用随着更多的请求继续向上转移到医生站,最终导致所有服务不可用。

这种在微服务调用链路中,因为某个服务不可用导致上游服务调用者不可用,最终扩大至整个服务集群产生不可用的问题称之为雪崩效应(一个不可用导致全部不可用)。

1.2 造成雪崩问题的原因

造成服务不可用的原因有很多,从硬件、软件的角度都可以大致给出一些故障现场,如硬件:机房故障、网线断开等,软件:流量过载、缓存击穿等。当服务提供者不可用,往往都会出现大量重试的情况:用户重试、代码逻辑重试、MQ重试,这些重试会进一步导致流量增加,加剧了服务雪崩的最终产生。

所以导致雪崩效应的根本原因是:大量同步请求等待造成的资源耗尽,一旦资源耗尽服务调用者提供的服务也处于不可能用砖,于是服务雪崩效应产生。既然有问题肯定也有解决方案,目前通用的解决方案具体如下:

1.3 雪崩问题的解决方案

1 超时处理

针对服务调用增加超时机制(一般dubbo默认30s),一旦超时自动释放资源,因释放资源较快一定程度可抑制资源耗尽问题。但如果在超时释放的时间内陡增大量请求,依然会导致服务宕机不可用。

2 舱壁模式

限定每个业务能使用的线程数,避免耗尽整个tomcat的资源,因此也叫线程隔离。它可以避免因部分服务不可用导致整个服务不可用的问题,但是也会存在线程资源浪费的问题了。

3 熔断降级

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

当发现异常比例、异常数超过配置的阈值时,断路器开始生效,拦截访问下游服务D的一切请求,形成熔断。

4 流量控制

相较于上述的针对已发生情况的自下而上的处理,实际更推荐自上而下的处理方案,这种方案将借助于Sentinel的流控功能去处理,拦截所有的请求,只释放服务能处理的粒度,从而保证服务的稳定性。

1.4 总结

截止此我们学到了两个重要的知识点:

  1. 什么是雪崩问题?造成雪崩的根本原因是什么?
  2. 解决雪崩的常见解决方案

保护:流量控制

解决:超时处理、舱壁模式、熔断降级

目录
相关文章
|
3月前
|
缓存 NoSQL Redis
Redis雪崩问题
Redis雪崩问题
47 1
|
10月前
|
数据可视化 数据挖掘 数据处理
【100天精通Python】Day61:Python 数据分析_Pandas可视化功能:绘制饼图,箱线图,散点图,散点图矩阵,热力图,面积图等(示例+代码)
【100天精通Python】Day61:Python 数据分析_Pandas可视化功能:绘制饼图,箱线图,散点图,散点图矩阵,热力图,面积图等(示例+代码)
392 0
|
Web App开发 Shell 数据安全/隐私保护
CURL常用命令
下载单个文件,默认将输出打印到标准输出中(STDOUT)中 curl http://www.centos.org 通过-o/-O选项保存下载的文件到指定的文件中: -o:将文件保存为命令行中指定的文件名的文件中 -O:使用URL中默认的文件名保存文件到本地 1 # 将文件下载到本地并命名为mygettext.
6975 0
|
11月前
|
存储 资源调度 前端开发
【react从入门到精通】初识React
当今Web开发中,React已经成为最流行的JavaScript库之一,被广泛应用于构建现代、高效、可维护的用户界面。本文将带您从零开始,介绍React的基本概念和使用方法,包括组件、状态管理、事件处理、组合和嵌套组件等。无论您是刚刚入门前端开发,还是想深入了解React的高级特性,本文都将为您提供简洁明了的指导,帮助您轻松掌握React,并在您的Web应用中充分发挥其强大的潜力!
217 0
|
11月前
|
存储 数据库 开发者
单元化架构的设计原则:让开发者、组件和数据都能透明化,同时保证业务可分片和业务自包含。
单元化架构的设计原则:让开发者、组件和数据都能透明化,同时保证业务可分片和业务自包含。
|
存储 自然语言处理 监控
一文搞懂基于 Sentinel Dashboard 进行接口限流
Hello folks,今天我们介绍一下由 Spring Cloud Alibaba 推出的开源项目 Sentinel。Sentinel 是一款面向分布式、多语言异构化服务架构的流量治理组件,主要以流量为切入点,从流量控制、流量路由、熔断降级、系统自适应保护等多个维度来帮助用户保障微服务的稳定性。
745 0
|
运维 Dubbo 中间件
Dubbo3 源码解读-宋小生-13:全局视野来看Dubbo3的服务启动生命周期
> 完整电子书下载地址: https://developer.aliyun.com/ebook/7894 > Dubbo3 已经全面取代 HSF2 成为阿里的下一代服务框架,2022 双十一基于 Dubbo3 首次实现了关键业务不停推、不降级的全面用户体验提升,从技术上,大幅提高研发与运维效率的同时地址推送等关键资源利用率提升超 40%,基于三位一体的开源中间件体系打造了阿里在云上的单元化最佳实
238 0
Dubbo3 源码解读-宋小生-13:全局视野来看Dubbo3的服务启动生命周期
|
存储 Prometheus 监控
Dubbo 可观测性实践之 Metrics 功能解析
Dubbo3 的建设规划有上云,可观测性是上云必不可少的能力,集群间根据实例可用性负载均衡、Kubernetes 弹性伸缩、建立实例健康模型等等运用场景都需要可观测性。
|
运维 监控 双11
起底:“问题终结者”GOC的真实战力
在阿里巴巴隐藏着很多神秘的部门,GOC就是其中之一,你在互联网甚至搜不到关于它的一丁点儿信息。但就是这么一个“名不见经传”的部门,却“指挥”着阿里巴巴旗下几乎所有业务的运行情况。
7165 0