什么是雪崩效应?雪崩效应常见场景及应对策略

什么是雪崩效应?雪崩效应常见场景及应对策略一、什么是雪崩效应分布式系统环境下,服务间类似依赖非常常见,一个业务调用通常依赖多个基础服务。如下图,对于同步调用,当会员服务不可用时,订单服务请求线程被阻塞,当有大批量请求调用会员服务时,最终可能导致整个会员服务资源耗尽,无法继续对外提供服务。并且这种不可用可能沿请求调用链向上传递,这种现象被称为雪崩效应。​二、雪崩效应常见场景硬件故障:如剔除坏盘抖动,服务器宕机,网络抖动,机房断电,光纤被挖断等;流量激增:如异常流量,重试加大流量等;缓存穿透:短时间内大量缓存失效时,大

大家好,又见面了,我是你们的朋友全栈君。

一、什么是雪崩效应

分布式系统环境下,服务间类似依赖非常常见,一个业务调用通常依赖多个基础服务。如下图, 对于同步调用,当会员服务不可用时,订单服务请求线程被阻塞,当有大批量请求调用会员服务时, 最终可能导致整个会员服务资源耗尽,无法继续对外提供服务。并且这种不可用可能沿请求调用链向上传递,这种现象被称为雪崩效应。
在这里插入图片描述

二、雪崩效应常见场景

  • 硬件故障:

如剔除坏盘抖动,服务器宕机,网络抖动,机房断电,光纤被挖断等;

  • 流量激增:

如异常流量,重试加大流量等;

  • 缓存穿透:

短时间内大量缓存失效时,大量的缓存不命中,使请求直击后端服务,造成服务提供者超
负荷运行,引起服务不可用;

  • 程序BUG:

如程序逻辑导致内存泄漏,
JVM长时间FullGC,流量高峰期执行定时任务等;

  • 同步等待:

服务间采用同步调用模式,同步等待造成的资源耗尽。

三、雪崩效应应对策略

针对造成雪崩效应的不同场景,可以使用的应对策略,参考如下:

  • 硬件故障:

多机房容灾、异地多活等;

  • 流量激增:

服务自动扩容、流量控制(限流、关闭重试)等;

  • 缓存穿透:

缓存预加载、缓存异步加载等;

  • 程序BUG:

修改程序bug、及时释放资源、定时任务分散到流量低峰时执行等;

  • 同步等待:

资源隔离、MQ解耦、不可用服务调用快速失败等。资源隔离通常指不同服务调用采用不同的线程池;不可用服务调用快速失败一般通过熔断器模式结合超时机制实现。

四、Netflix Hystrix

Hystrix,中文含义是豪猪,因其背上长满棘刺,从而拥有了自我保护的能力。本文所说的 Hystrix是Netflix开源的一款容错框架,同样具有自我保护能力,实现了容错和自我保护。
Netflix Hystrix是SOA/微服务架构中提供服务隔离、熔断、降级机制的工具/框架。
Netflix Hystrix是断路器的一种实现,用于高微服务架构的可用性,是防止服务出现雪崩的利器。
在这里插入图片描述

本文是SpringCloud微服务架构教程的课件文档,如需要全套Spring全家桶微服务架构师教程请评论或私信联系。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/158641.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • yuicompressor java_使用YUICompressor自动压缩JavaWeb项目中的JS与CSS文件

    yuicompressor java_使用YUICompressor自动压缩JavaWeb项目中的JS与CSS文件使用YUICompressor自动压缩JavaWeb项目中的JS与CSS文件###引入Maven依赖“`htmlcom.yahoo.platform.yuiyuicompressor2.4.8“`Java代码“`javapackagecom.itshidu.jeelite.common.web;importcom.itshidu.jeelite.common.util.Compres…

    2022年7月18日
    6
  • java构造函数方法声明无效_如何构造函数

    java构造函数方法声明无效_如何构造函数一、什么是构造函数java构造函数,也叫构造方法,是java中一种特殊的函数。函数名与相同,无返回值。作用:一般用来初始化成员属性和成员方法的,即new对象产生后,就调用了对象了属性和方法。在现实生活中,很多事物一出现,就天生具有某些属性和行为。比如人一出生,就有年龄、身高、体重、就会哭;汽车一出产,就有颜色、有外观、可以运行等。这些,我们就可以将这些天然的属性和行为定义在构造函数中,…

    2022年9月8日
    0
  • 想跳槽涨薪,想进大厂,如何准备面试呢?「建议收藏」

    想跳槽涨薪,想进大厂,如何准备面试呢?

    2022年2月19日
    40
  • js addEventListener事件捕获与冒泡,第三个参数详解,阻止事件传播

    js addEventListener事件捕获与冒泡,第三个参数详解,阻止事件传播结论element.addEventListener(event,function[,useCapture])event:事件名称,如clickfunction:指定要事件触发时执行的函数,可以传入事件参数useCapture:可选。布尔值,指定事件是否在捕获或冒泡阶段执行。默认false:在冒泡阶段执行指定事件true:在捕获阶段执行事件event.stopPropagat…

    2025年6月9日
    0
  • JsonObject和JsonArray转换问题

    JsonObject和JsonArray转换问题开发过程中遇到需要将调用接口返回的JsonObject转换为JsonArray格式的数据,在使用过成中遇到转换问题,代码如下publicstaticJSONObjectgetRecJsonObj(StringstuId,StringschoolDate){Stringjson;try{json=Jsoup.connect(UrlConfig.URL+”GetStudentInfo?stuId=”+stuId+

    2022年5月31日
    39
  • 深度学习之GoogLeNet解读

    深度学习之GoogLeNet解读提出背景相关工作基本思想及过程提出背景 始于LeNet-5,一个有着标准的堆叠式卷积层冰带有一个或多个全连接层的结构的卷积神经网络。通常使用dropout来针对过拟合问题。 为了提出一个更深的网络,GoogLeNet做到了22层,利用inception结构,这个结构很好地利用了网络中的计算资源,并且在不增加计算负载的情况下,增加网络的宽度和深度。同时,为了优化网络质量,采用了Hebbian原

    2022年8月14日
    6

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号