【发布时间】:2017-04-10 11:43:15
【问题描述】:
在微服务架构中添加断路器模式的最佳方法是什么。它应该在微服务端(每个微服务内部)、ELB 内部还是 Api 网关内部?什么是最好的设计模式?
【问题讨论】:
标签: microservices hystrix netflix circuit-breaker
在微服务架构中添加断路器模式的最佳方法是什么。它应该在微服务端(每个微服务内部)、ELB 内部还是 Api 网关内部?什么是最好的设计模式?
【问题讨论】:
标签: microservices hystrix netflix circuit-breaker
我认为不是在每个微服务中使用,而是在您使用微服务的 BFF(后端为前端)中使用。您可以在本书https://pragprog.com/book/mnee/release-it 中找到一个很好的实现和示例。使用 API 网关的解决方案很好,请参阅 Kong https://getkong.org/。
【讨论】:
我建议您将断路问题委托给像 Hystrix 这样的外部库,而不是自己实现。 Hystrix 公开了许多属性,让您可以完全控制调整断路功能。
【讨论】:
至少有 3 个选项(如下图所示)。在一般情况下,断路器“保护”对 http 服务的调用。如果我们认为这个服务是微服务,那么熔断器从不在微服务本身中。
在这种情况下,您使用具有断路支持的 API 网关产品。大使和 Axway 就是例子。另一种方法是在 BFF 服务中提供熔断机制,以获取对后端服务的调用。
在这种情况下,您使用支持断路的服务网格产品。带有 Envoy 的 Istio 就是一个例子。在此示例中,insurance quote 服务调用customer history 服务。代理 sidecar 容器进行熔断。
在这里,您使用了一个提供断路器支持的库。 Resilience4J 是我们在工作中使用的(在一些调用 http 服务的 Spring Boot 应用程序中)。
哪个最好?这取决于您的应用程序要求和基础架构限制。要记住的事情:
【讨论】: