微服务容灾组件:断路器原理介绍

举报
溜溜丽 发表于 2021/08/04 23:14:37 2021/08/04
【摘要】 在分布式系统中,不同服务之间发生的调用非常常见,当服务提供者不可用时就很有可能发生服务雪崩的效应,导致整个系统的不可用。所以为了预防这种请求的发生,可以通过断路器模式进行预防(类比电路中的断路器,在电路过大的时候自动断开,防止电线过热损害整条电路)。断路器模式背后的思想很简单,将远程函数调用包装到一个断路器对象中,用于监控函数调用过程的失败。一旦该函数调用的发生失败的次数在一段时间内到达一定...

在分布式系统中,不同服务之间发生的调用非常常见,当服务提供者不可用时就很有可能发生服务雪崩的效应,导致整个系统的不可用。所以为了预防这种请求的发生,可以通过断路器模式进行预防(类比电路中的断路器,在电路过大的时候自动断开,防止电线过热损害整条电路)。

断路器模式背后的思想很简单,将远程函数调用包装到一个断路器对象中,用于监控函数调用过程的失败。一旦该函数调用的发生失败的次数在一段时间内到达一定的阀值,那么这个断路器将会跳闸,然后接下来时间里对该被保护函数调用的线程将会被断路器直接返回一个错误,而不再发生该函数的真实调用。这样子就避免了服务调用者在服务提供者不可用时发送请求,从而减少线程池中资源的消耗,保护了服务调用者。

图片.png

虽然上面的断路器在打开的时候避免了被保护的函数调用,但是当情况恢复正常时,需要外部干预来重置断路器,使得函数调用可以重新发生。所以合理的断路器应该具备以下的开关转化逻辑,它需要一个机制来控制它的重新闭合,图6-3中是通过一个重置时间来决定。
图片.png

  • 关闭状态: 断路器处于关闭状态,统计调用失败次数,在一段时间内到达一定的阀值后断路器打开。
  • 打开状态: 断路器处于打开状态,对函数调用直接返回失败错误,不发生真正的函数调用。设置了一个重置时间窗,在重置时间窗结束后,断路器来到半开状态。
  • 半开状态: 断路器处于半开状态,此时允许进行函数调用,当调用都成功了(或者成功到达一定的比例),关闭断路器,否则认为服务没有恢复,重新打开断路器。

断路器的打开能保证服务调用者在调用异常服务时,快速返回结果,避免大量的同步等待,减少服务调用者的资源消耗。并且断路器能在打开的一段时间后继续侦测请求执行结果,提供断路器关闭的可能,恢复服务的调用。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。