断路器和隔板模式有啥区别?

Posted

技术标签:

【中文标题】断路器和隔板模式有啥区别?【英文标题】:What is the difference between a circuit breaker and a bulkhead pattern?断路器和隔板模式有什么区别? 【发布时间】:2020-07-14 08:37:10 【问题描述】:

在微服务开发的过程中,Spring Boot可以同时使用两者吗?

【问题讨论】:

【参考方案1】:

这些是根本不同的模式。

断路器模式在调用方实现,以防止可能难以处理调用的服务不堪重负。可以在 here 找到 Spring 中的示例实现。

隔板模式在服务端实现,以防止在处理单个来电期间出现故障,影响其他来电的处理。可以在 here 找到 Spring 中的示例实现。

这些模式唯一的共同点是它们都旨在提高分布式系统的弹性

因此,虽然您当然可以在同一个服务中同时使用它们,但您必须了解它们彼此之间没有关系,因为一个负责拨打电话,另一个负责处理呼叫。

【讨论】:

【参考方案2】:

是的,它们可以一起使用,但并不总是必要的。

    正如@tom redfern 所说,断路器 是在调用方实现的。因此,如果您将请求发送到另一个服务,您应该将这些请求包装到特定于该服务的断路器中。请记住,每个其他第三方系统或服务都应该有自己的断路器。否则,一个系统不可用会影响您通过打开断路器发送给另一个系统的请求。

关于断路器的更多信息可以在这里找到:https://docs.microsoft.com/en-us/azure/architecture/patterns/circuit-breaker

    另外,@tom redfern 在 bulkheading 的情况下也是正确的,这是在被调用的服务中实现的模式。因此,如果您通过跨越其他多个请求或工作负载来响应外部请求,则应避免将所有这些工作负载放入单个单元(线程)中。相反,为您跨越的每个请求将工作负载分成多个部分(线程池)。

更多关于bulkheading的信息可以在这里找到:https://docs.microsoft.com/en-us/azure/architecture/patterns/bulkhead

您的问题是是否可以在同一个微服务中使用这两种模式。答案是:是的,你可以,而且很多时候情况暗示了这一点。

【讨论】:

以上是关于断路器和隔板模式有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章

请求折叠的 Hystrix 替代方案

断路器(Curcuit Breaker)模式

Ribbon断路器和Hystrix的区别

精通springcloud:故障和带有Feign的断路器模式

微服务断路器模式实现:Istio vs Hystrix

断路器模式是不是也适用于异步请求?