我们只需4/30即可调整Futureestack注册。条款和条件适用。 现在注册

断路器图案是一个很棒的工具(适当使用时)

6分钟阅读

经过Evan Nelson.

在你生命中的某些时候,你几乎肯定不得不翻转断路器在你的家或公寓里。基本上是一个自动电气开关,断路器保护电路,并将在浪涌期间“跳闸”,物理地防止电力继续流动并导致严重损坏。

在软件中,断路器模式遵循相同的方法,我敦促您退房马丁福勒的描述详细解释。开发人员可以使用断路器来防止资源依赖(通常是下游HTTP服务或数据库)变得过载。电路跳闸基于配置的设置自动打开,如提升的响应时间,超时或其他错误,然后自动关闭(再次基于诸如经过的时间或其他触发的配置),理想情况下,在依赖关系恢复之后。在某些情况下,如果您在开始锤击之前,则此断路器模式可以帮助您减少整体停机时间。

在这篇文章中,我将阐述一些考虑因素来帮助您决定何时适当 - 或不使用此模式。

断路器需要仔细调整

断路器是自我修复软件技术的一个例子,对于构建弹性系统非常棒。他们也很难正确,这就是为什么我们不应该思考的原因。

这种模式非常诱人:它可以预防雷鸣群,“OutofMemory错误死亡螺旋“以及临时过载系统的各种问题。并且使用这种模式似乎很容易,所以简单地坚持一个电路断路器图书馆在您的API通话前,并为自我修复软件做好准备。这些承诺很难抗拒。

但是,我断言,实现断路器模式需要仔细调整:

  • 您必须调整电路打开的阈值(错误率或吞吐量)。
  • 您必须调整电路保持打开的时间,并且可能调整允许电路关闭的其他触发器。
  • 如果对同一端点的请求并非全部相等,则需要在每个环境和每种情况下进行每个环境和每个端点基础调整这些设置。

但是,最重要的是,您必须维护这些调整,因为您的服务和潜在的依赖项也在发展。更直接:主动调整断路器是至关重要的。

一个良好调整的断路器是一个问题

以下是您可能遇到的四个问题,如果您不经常正确调整断路器。(在某些情况下,即使您也可以看到这些调整您的断路器):

  1. 您的服务提供的吞吐量少于它应该提供的吞吐量。
  2. 即使底层资源已恢复,您也可以在电路打开的时间段内伸长停机时间。
  3. 您可以创建可能会令人困惑下游服务所有者了解的eocodic请求模式。
  4. 如果没有断路器,您会因未发生的错误而出现故障。

也就是说,天真地应用断路器可以容易地引起比它所解决的更多问题。

部署断路器模式之前要询问的三个问题

以免任何人指责我苛刻的批评,让我明确说明我认为断路器可能非常有用 - 如果使用战略性。考虑以下问题而不是在所有API呼叫中取消洒上电路断路器,而不是在所有API呼叫中洒上断路器。

  1. 断路器会增强您的服务吗?
    • 在您的服务下游依赖性是否有可能变得过载 - 如果没有,您可能不需要一个。
    • 如果它超载依赖性会发生什么?减少请求有助于恢复吗?
    • 当你的断路器应该打开并关闭时,你能定义一个启发式吗?它应该根据经过的时间,或其他一些触发器关闭吗?
    • 你有否则的错误 - 换句话说,如果你看到一个话,你可能会看到很多同样的 - 它会更好失败在这种情况下?
  2. 你能部署一个断路器吗?
    • 您是否有一种方法可以准确测量您的下游依赖和无法处理的加载物?你可以调整你的断路器吗?你知道“旋钮”的工作是如何工作?
    • 您需要验证哪些监控验证您的断路器是否正常工作?
    • 如果停止按预期工作,您是否可以在紧急情况下覆盖断路器?
  3. 您是否可以负担维护断路器的成本?
    • 您是否会花时间将您的依赖性限制重新衡量为常规的一部分容量规划过程,然后相应地调整断路器?

最后,断路器可能非常好,是您服务和客户的正确选择,但不跳到该结论而不分析与成本的益处。

最后,如果您对您的真实循环断路器跳闸也有困难,这里有一个专业提示:停止将整个加密电机挖掘机插入一个电路。