微服务雪崩效应及解决办法

什么是雪崩效应

假如我们有一个服务C,向服务B提供接口,服务B有很多请求发送到服务C
在这里插入图片描述
当服务C发生了宕机的时候,服务B发送到服务C的请求会阻塞掉,会导致服务B的内存被这些阻塞的线程占满而导致服务对外提供服务,而导致服务B产生宕机
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
与此同时,服务B作为服务A的提供者
在这里插入图片描述
同样的问题也会产生,导致服务A也无法使用
在这里插入图片描述
在这里插入图片描述
这一连串的效应导致整个系统挂掉,这样的现象称为雪崩效应

解决雪崩效应

1、设置线程的超时时间
在服务B调用服务C的时候,当服务C挂掉,如果给服务B调用服务C的每个线程都设置超时时间,例如500ms,当前几个线程阻塞500ms后,自动销毁,后续线程继续调用,以此解决由于服务B线程阻塞导致内存占满使得服务B挂掉的问题
在这里插入图片描述
2、设置限流
有三个服务A、B、C,当服务C因为一些网络性能问题挂掉
在这里插入图片描述
服务A发送到服务B的请求,同时再有一个请求发送到服务C,同理服务A发送请求到服务B,服务B再发送请求到服务C,当到达一个上限的时候,我们不会让服务B发请求到服务C,通过设置限流让服务B嘴都有三个线程发送到服务C,当三个线程满了的时候,就不会再新增线程请求服务C,此时不管服务A向服务B发送多少个请求,服务B都不会再发送请求到服务C,防止服务B因为内存过多导致服务B挂掉
在这里插入图片描述
3、熔断
当服务正常请求成功的时候,熔断处于关闭状态,而当服务调用失败的时候,熔断开关打开,那我们请求都会被跳过,不会真正请求整个服务,这样避免整个服务挂掉。
在分部式场景下一般都会有一个时间窗口,这个时间窗口会在时间窗口结束的时候会尝试调用之前挂掉的服务,熔断开关处于半开半闭状态,当请求失败的时候,熔断开关打开,当请求成功的时候,熔断开关关闭
在这里插入图片描述
文章参考慕课网实战教程

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值