3

在微服务架构中添加断路器模式的最佳方法是什么。它应该在微服务端(每个微服务内部)、ELB 内部还是 Api 网关内部?什么是最好的设计模式?

4

3 回答 3

2

我认为不是在每个微服务中使用,而是在使用微服务的 BFF(后端为前端)中使用。您可以在本书https://pragprog.com/book/mnee/release-it中找到一个很好的实现和示例。API 网关的解决方案很好,请参阅 Kong https://getkong.org/

于 2016-12-29T15:09:17.023 回答
1

至少有 3 个选项(如下图所示)。在一般情况下,断路器“保护”对 http 服务的调用。如果我们认为这个服务就是微服务,那么熔断器永远不在微服务本身。

API 网关

在这种情况下,您使用具有断路支持的 API 网关产品。大使和 Axway 就是例子。另一种方法是在 BFF 服务中提供断路,以获取对后端服务的调用。

api网关中的断路器

服务网格

在这种情况下,您使用支持断路的服务网格产品。带有 Envoy 的 Istio 就是一个例子。在此示例中,insurance quote服务调用customer history服务。代理 sidecar 容器执行断路。

带断路器的服务网格

断路器库

在这里,您使用提供断路器支持的库。Resilience4J 是我们在工作中使用的(在一些调用 http 服务的 Spring Boot 应用程序中)。

断路器库

你的设计

哪个最好?这取决于您的应用程序要求和基础架构限制。要记住的事情:

  • 并非所有服务交互都需要断路。
  • 看看当电路打开时是否可以使用回退机制(例如,默认响应)。
  • 记录/监视电路更改以检测有问题的连接和服务。
于 2021-06-30T14:58:20.737 回答
0

我建议您将断路问题委托给 Hystrix 之类的外部库,而不是自己实现。Hystrix 公开了许多属性,使您可以完全控制调整断路功能。

于 2019-09-28T14:34:19.983 回答