扩展容器不仅仅是在服务前面放置一个代理然后走开。 扩展不仅仅是分布,在快节奏的容器世界中,需要五种不同的功能来确保扩展:重试,断路器,发现,分发和监控。
在这篇有关容器扩展艺术的第二篇文章中,我们将深入研究断路器。
托马斯·爱迪生 (Thomas Edison) 发明了数千种不能正常工作的电器,但也发明了一些能正常工作的著名电器,他在 1879 年的一项专利应用中提出了断路器的概念。 是的,那时专利就已经存在了。 虽然爱迪生的版本使用了保险丝,必须更换(我们中的一些人可能还记得在老式汽车中疯狂寻找它们),但更现代的版本是为了“跳闸”并阻止电流流动而设计的。 然后可以重置它们,恢复正常流动和运行。
在规模的背景下,断路器的运行原理相同。 它们检测到“溢出”并故意切断它,以避免连接另一端的服务过载。 它们也可以被重置,随后恢复正常的请求和响应流。
断路器已经成为负载均衡代理的一部分很长一段时间了。 前提是,如果经过 X 尝试后,您仍然无法访问指定的服务,则该服务已停止使用。 有理由不断向它索取它无法给予的东西,这样做只会浪费代理和网络的资源。 因此,在发生(通常)可配置的故障次数之后,代理将“断开”电路并拒绝尝试进一步的连接。
尽管过程看起来很相似,但这与重试并不相同。 重试的前提是请求最终会成功。 断路器是在请求失败的前提下运行的,因此应避免浪费时间和资源。
一旦问题解决,断路器就可以“重置”并恢复正常流动。
在早期,这个过程是手动的。 在确保目标服务确实恢复服务后,操作员需要执行重置。 近年来,通过健康监测,这一过程已经实现了自动化。 这通常包括定期尝试访问服务,并在成功后重置断路器以再次允许正常操作。
断路器在容器化的微服务设置中尤为重要,因为服务之间来回流动的流量很大。 虽然某些故障可能很快被识别,但由于网络堆栈问题,其他故障直到较长的 TCP 超时才会被注意到。 超时会导致不良的延迟,因此断路和重试应该考虑应用对延迟的整体容忍度(或视情况而定的不容忍度)。 这些值的配置需要考虑超时值和业务对性能的期望。 低延迟容忍度可能需要更少的重试和更快的断路行为。