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

17

在微服务开发中,我们可以同时使用两者吗?

2个回答

25

这些是根本不同的模式。

断路器模式是在消费者端实现的,以避免过多地调用可能正在努力处理调用的服务。Spring中的示例实现可以在此处找到。

舱壁模式是在服务端实现的,以防止单个传入调用的处理失败影响其他传入调用的处理。Spring中的示例实现可以在此处找到。

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

虽然您可以在同一个服务中同时使用它们,但您应该了解它们彼此之间没有任何关系,因为一个关注于发起调用,而另一个关注于处理调用。


11
可以同时使用这两种模式,但并不总是必要的。
1.正如@tom redfern所说,断路器是在调用方实现的。因此,如果您要向另一个服务发送请求,应将这些请求包装到特定于该服务的断路器中。请记住,每个第三方系统或服务都应具有自己的断路器。否则,一个系统的不可用将通过打开断路器影响您发送给其他系统的请求。
关于断路器的更多信息可以在此处找到:https://learn.microsoft.com/en-us/azure/architecture/patterns/circuit-breaker 2.同样,在bulkheading的情况下,@tom redfern也是正确的,这是一种在被调用的服务中实现的模式。因此,如果您正在响应外部请求并生成其他多个请求或工作负载,应避免将所有这些工作负载合并为单个单元(线程)。相反,应将工作负载分成片段(线程池),用于您已经生成的每个请求。
有关bulkheading的更多信息可以在此处找到:https://learn.microsoft.com/en-us/azure/architecture/patterns/bulkhead 你的问题是是否可以在同一个微服务中使用这两种模式。答案是:可以,很多情况下都需要这样做。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接