分布式系统关注点——99%的人都能看懂的「熔断」以及最佳实践

 如果这是第二次看到我的文章,欢迎右侧扫码订阅我哟~  >

本文长度为3319字,建议阅读9分钟。

 

阅读目录

  • ▲点击图片可查看大图

     

    举个夸张的例子来形容:一幢楼的下水管是从最高楼直通到最低楼的,这个时候如果你家楼下的管道口堵住了,那么所有楼上的污水就会倒灌到你家。如果这导致你家的管道口也堵住了,之后又会倒灌到楼上一层,以此类推。

     

    然而实际生活中一旦你发现了这个问题,必然会想办法先避免影响到自己家,然后跑到楼下让他们赶紧疏通管道。此时,避免影响自己家的办法就可被称之为「熔断」。

     

    一、熔断是什么

    熔断本质上是一个过载保护机制。这一概念来源于电子工程中的断路器,可能你曾经被这个东西的“跳闸”保护过。

     

    ▲图片来源于网络,版权归原作者所有

     

    在互联网系统中的熔断机制是指:当下游服务因访问压力过大而响应变慢或失败,上游服务为了保护自己以及系统整体的可用性,可以暂时切断对下游服务的调用。

     

    做熔断的思路大体上就是:一个中心思想,分四步走

     

    二、熔断怎么做

    首先,需秉持的一个中心思想是:量力而行。因为软件和人不同,没有奇迹会发生,什么样的性能撑多少流量是固定的。这是根本。

     

    然后,这四步走分别是:

    1. 定义一个识别是否处于“不可用”状态的策略

    2. 切断联系

    3. 定义一个识别是否处于“可用”状态的策略,并尝试探测

    4. 重新恢复正常

     

    定义一个识别是否处于“不正常”状态的策略

    相信软件开发经验丰富的你也知道,识别一个系统是否正常,无非是两个点。

    • 是不是能调通

    • 如果能调通,耗时是不是超过预期的长

     

    但是,由于分布式系统被建立在一个并不是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
                            
    关键字:
50000+
5万行代码练就真实本领
17年
创办于2008年老牌培训机构
1000+
合作企业
98%
就业率

联系我们

电话咨询

0532-85025005

扫码添加微信