什么是断路器模式
在分布式环境中,对远程资源和服务的调用可能会由于临时性故障(如网络连接缓慢、超时、资源过载或资源暂时不可用)而失败。 这些故障通常会在短时间内自行更正,而且,应该会准备一个可靠的云应用程序,通过重试模式这样的策略来处理它们。
但是,也可能遇到由于意外事件而导致的故障,且需要更长的时间来进行修复。 这些故障轻则导致部分连接中断,重则导致服务完全瘫痪。 这类情况下,让应用程序持续重试不可能成功的操作是毫无意义的。相反,应用程序应该快速认识到操作已失败,并相应地处理此故障。
此外,如果服务十分繁忙,那么系统一个部分的故障可能会导致连锁故障。 例如,调用服务的操作可以被配置为实现超时,并且在服务未能在此期间内响应时返回失败消息。 但是,此策略可能导致同一操作的许多并发请求受到阻止,直至超时期间到期。 这些阻止的请求可能占用了关键的系统资源,如内存、线程、数据库连接等。 因此,这些资源可能被耗尽,从而导致需要使用相同资源的系统其他不相关部分出现故障。 在这些情况下,更有益的做法便是让操作立即失败并只在服务可能成功时才尝试调用服务。 请注意,设置较短的超时可能有助于解决此问题,但为避免操作在大多数时间内失败,超时不应太短(即使对服务的请求最终会成功)。
为什么要用断路器模式
对远程资源和服务的调用由于意外事件发生了故障,并且该故障需要一段较长的时间来进行修复。这类情况下,让应用程序持续重试不可能成功的操作是毫无意义的。相反,应用程序应该快速认识到操作已失败,并相应地处理此故障。
怎么使用断路器模式
什么场景适用
由于意外事件而导致的故障,且需要更长的时间来进行修复。 这些故障轻则导致部分连接中断,重则导致服务完全瘫痪
什么场景不适用
对远程资源和服务的调用可能会由于临时性故障(如网络连接缓慢、超时、资源过载或资源暂时不可用)而失败。 这些故障通常会在短时间内自行更正
使用不当的后果
如果错误的使用断路器,导致一些可以通过重试机制恢复正常的异常,也被断路器阻断,会降低系统的稳定性。
如何正确使用
- 和超时一起使用
- 当断路器被触发时,一般意味着严重的情况发生,要记录,告警,并通知相关干系人。