谈谈服务雪崩、降级与熔断

来源公众号孤独烟  , 作者孤独烟引言
首先 , 之所以谈这个话题呢 , 是发现现在很多人对微服务的设计缺乏认识 , 所以写一篇扫盲文 。当然 , 考虑到目前大多微服务的文章都是口水文 , 烟哥争取将实现方式讲透 , 点清楚 , 让大家有所收获!
OK , 我要先说明一下 , 我有很长一段时间将服务降级和服务熔断混在一起 , 认为是一回事!
为什么我会有这样的误解呢?
针对下面的情形 , 如图所示
【谈谈服务雪崩、降级与熔断】 

谈谈服务雪崩、降级与熔断

文章插图
 
 
当Service A调用Service B , 失败多次达到一定阀值 , Service A不会再去调Service B , 而会去执行本地的降级方法!
对于这么一套机制:在Spring cloud中结合Hystrix,将其称为熔断降级!
所以我当时就以为是一回事了 , 毕竟熔断和降级是一起发生的 , 而且这二者的概念太相近了!
后面接触了多了 , 发现自己理解的还是太狭隘了 , 因此本文中带着点我自己的见解 , 大家如果有不同意见 , 请轻喷!毕竟还有很多人认为两者是一致的!
正文
服务雪崩
OK , 我们从服务雪崩开始讲起!假设存在如下调用链
 
谈谈服务雪崩、降级与熔断

文章插图
 
 
而此时 , Service A的流量波动很大 , 流量经常会突然性增加!那么在这种情况下 , 就算Service A能扛得住请求 , Service B和Service C未必能扛得住这突发的请求 。
此时 , 如果Service C因为抗不住请求 , 变得不可用 。那么Service B的请求也会阻塞 , 慢慢耗尽Service B的线程资源 , Service B就会变得不可用 。紧接着 , Service A也会不可用 , 这一过程如下图所示
 
谈谈服务雪崩、降级与熔断

文章插图
 
 
如上图所示 , 一个服务失败 , 导致整条链路的服务都失败的情形 , 我们称之为服务雪崩 。
ps:谁发明的这个词 , 真是面试装13必备!
那么 , 服务熔断和服务降级就可以视为解决服务雪崩的手段之一 。
服务熔断
那么 , 什么是服务熔断呢?
服务熔断:当下游的服务因为某种原因突然


    推荐阅读