Introdution
尽管微服务架构的优点是已知的(此处未解释主题),但我们经常忽略系统设计中的弹性。 软件系统对通常在网络中不同计算机上以不同进程运行的软件进行远程调用。 例如:
什么时候发生服务B变得不可用,高延迟响应还是重复返回相同的业务异常? 这些未处理的情况可能导致级联故障,从而影响各种公司服务。
The circuit breaker design
断路器的基本原理非常简单。 您可以将一个受保护的函数调用包装在一个断路器对象中,该对象将监视它的故障。 应用此模式时,可以防止可能的应用程序问题。 该模式遵循与称为断路器的安全电气组件相同的概念。
一旦故障达到某个阈值,断路器将跳闸,并且所有对该断路器的进一步呼叫都将返回错误或带有某些备用服务或默认消息,而根本不会进行受保护的呼叫。 这将确保系统具有响应能力,并且线程不会等待无响应的调用,从而保护了系统以避免灾难性故障。
如果服务B下跌降落,服务A仍应尝试从中恢复并尝试执行以下操作之一:
自定义后备广告:尝试从其他来源获取相同的数据。 如果不可能,请使用其自己的缓存值或您的自定义客户端错误响应。
快速失败:如果服务A知道服务B关闭,则没有必要等待超时并消耗其自身的资源。
自动修复:定期检查服务B是否再次运行。
其他API应该可以使用:所有其他API应该继续工作。
How it works?
关闭:当一切正常时,断路器保持关闭状态,对服务B的所有调用均正常进行。 如果故障次数超过预定限制,则状态将变为“打开”。
打开:在这种状态下,断路器将不会执行服务B调用并返回已处理的错误。
半开:超时后,电路切换到半开状态以测试基本问题是否仍然存在。 如果在此半开状态下单个呼叫失败,则断路器将再次跳闸。 如果成功,则重置为正常的CLOSED状态。
Conclusion
断路器可帮助您防止微服务之间集成的可能问题。 为了获得最佳结果,请使用监视工具和度量标准,例如Prometheus和grafana。
In the next post I will be talk about the main framework for resilience to Java applications, Resilience4j.
Resilience for Java microservices. Circuit Breaker with Resilience4j
Silvio Buss ・ Jun 14 ・ 2 min read
#java #microservices #opensource #devops