如果这是第二次看到我的文章,欢迎右侧扫码订阅我哟~ >
本文长度为3319字,建议阅读9分钟。
阅读目录
 - ▲点击图片可查看大图 - 举个夸张的例子来形容:一幢楼的下水管是从最高楼直通到最低楼的,这个时候如果你家楼下的管道口堵住了,那么所有楼上的污水就会倒灌到你家。如果这导致你家的管道口也堵住了,之后又会倒灌到楼上一层,以此类推。 - 然而实际生活中一旦你发现了这个问题,必然会想办法先避免影响到自己家,然后跑到楼下让他们赶紧疏通管道。此时,避免影响自己家的办法就可被称之为「熔断」。 - 一、熔断是什么- 熔断本质上是一个过载保护机制。这一概念来源于电子工程中的断路器,可能你曾经被这个东西的“跳闸”保护过。  - ▲图片来源于网络,版权归原作者所有 - 在互联网系统中的熔断机制是指:当下游服务因访问压力过大而响应变慢或失败,上游服务为了保护自己以及系统整体的可用性,可以暂时切断对下游服务的调用。 - 做熔断的思路大体上就是:一个中心思想,分四步走。 - 二、熔断怎么做- 首先,需秉持的一个中心思想是:量力而行。因为软件和人不同,没有奇迹会发生,什么样的性能撑多少流量是固定的。这是根本。 - 然后,这四步走分别是: -     定义一个识别是否处于“不可用”状态的策略 
-     切断联系 
-     定义一个识别是否处于“可用”状态的策略,并尝试探测 
-     重新恢复正常 
 - 定义一个识别是否处于“不正常”状态的策略- 相信软件开发经验丰富的你也知道,识别一个系统是否正常,无非是两个点。 -     是不是能调通 
-     如果能调通,耗时是不是超过预期的长 
 - 但是,由于分布式系统被建立在一个并不是100%可靠的网络上,所以上述的情况总有发生,因此我们不能将偶发的瞬时异常等同于系统“不可用”(避免以偏概全)。由此我们需要引入一个「时间窗口」的概念,这个时间窗口用来“放宽”判定“不可用”的区间,也意味着多给了系统几次证明自己“可用”机会。但是,如果系统还是在这个时间窗口内达到了你定义“不可用”标准,那么我们就要“断臂求生”了。 - 这个标准可以有两种方式来指定。 -     阈值。比如,在10秒内出现100次“无法连接”或者出现100次大于5秒的请求。 
-     百分比。比如,在10秒内有30%请求“无法连接”或者30%的请求大于5秒。 
 - 最终会形成这样这样的一段代码。 - 全局变量 errorcount = 0; //有个独立的线程每隔10秒(时间窗口)重置为0。全局变量 isOpenCircuitBreaker = false; //do some thing...if(success){ return success; } else{ errorcount++; if(errorcount == 不可用阈值){ isOpenCircuitBreaker = true 
-     

