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

Naf*_*ema 8 circuit-breaker spring-boot microservices

在微服务的开发过程中,我们可以在 Spring Boot 中一起使用吗?

tom*_*ern 8

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

在服务端实施了隔板模式,以防止在处理来自主叫方的单个呼叫期间出现故障,从而影响其他传入呼叫的​​处理。可以在此处找到 Spring 中的示例实现。

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

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


Din*_*dan 5

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

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

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

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

可以在此处找到有关舱壁的更多信息:https : //docs.microsoft.com/en-us/azure/architecture/patterns/bulkhead

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