断路器和隔板模式有啥区别?
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
您的问题是是否可以在同一个微服务中使用这两种模式。答案是:是的,你可以,而且很多时候情况暗示了这一点。
【讨论】:
以上是关于断路器和隔板模式有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章