雪崩问题

简介: 应用的硬件、软件架构在涉及到部署时,一般会根据实际请求量做一定的压力测试,以测试系统稳定性、健壮性,避免后续线上未知故障。假设在一个电商的秒杀场景下,订单中心本身能够承载的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. 解决雪崩的常见解决方案

保护:流量控制

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

目录
相关文章
|
机器学习/深度学习 监控 算法
图像去雾综述
图像去雾综述
|
XML 缓存 运维
springboot注解(全)
springboot注解(全)
689 0
|
4月前
|
Prometheus 监控 Cloud Native
Spring Boot 可视化监控
本文介绍了如何通过Spring Actuator、Micrometer、Prometheus和Grafana为Spring Boot应用程序添加监控功能。首先创建了一个Spring Boot应用,并配置了Spring Actuator以暴露健康状态和指标接口。接着,利用Micrometer收集应用性能数据,并通过Prometheus抓取这些数据进行存储。最后,使用Grafana将Prometheus中的数据可视化,展示在精美的仪表板上。整个过程简单易行,为Spring Boot应用提供了基本的监控能力,同时也为后续扩展更详细的监控指标奠定了基础。
685 2
|
存储 关系型数据库 MySQL
gbase mysql 协议
【4月更文挑战第19天】
305 6
|
JavaScript Java 测试技术
基于SpringBoot+Vue+uniapp的航班订票管理系统的详细设计和实现(源码+lw+部署文档+讲解等)
基于SpringBoot+Vue+uniapp的航班订票管理系统的详细设计和实现(源码+lw+部署文档+讲解等)
152 0
|
存储 Java 索引
Kibana 自定义索引连接器告警
Kibana 自定义索引连接器告警
|
算法 数据安全/隐私保护
数据传输加密方式总结
一般来说,HTTP数据交互过程中,数据都是以密文形式传输的,数据加密也就成了目前web中比较常见的部分 对称加密 采用单钥密码系统的加密方法,同一个密钥可以同时用作信息的加密和解密,这种加密方法称为对称加密,也称为单密钥加密。
3102 0
|
存储 自然语言处理 IDE
Bazel 与 Gradle 构建工具差异对比
Bazel和Gradle强调构建体验的不同方面。在某种程度上,它们的侧重点是互斥的——Gradle对灵活性和非突出性的要求对它的构建结构进行了限制,而Bazel对可靠性和性能的要求产生了强制不可协商的限制。
412 0
|
供应链 安全 区块链
联盟链平台搭建技术|联盟链场景介绍
何为联盟链?联盟链是区块链三大类型之一,有多个组织团体节点联合在一起维护的,只针对特定某个群体的成员和有限的第三方开放,共同记录交Y数据,其主要解决的是账本共享问题。