Back to 云原生设计模式/复原能力

See Also 断路器模式

隔舱设计模式

将应用程序的元素隔离到池中,这样,如果一个元素发生故障,其他元素可继续工作。 此模式之所以称为“隔舱”(Bulkhead),是因为它类似于船体的分段区。 如果船体受到破坏,只有受损的分段才会进水,从而可以防止船只下沉。

1. Solution

根据使用者负载和可用性要求,将服务实例分区成不同的组。 此设计有助于隔离故障,即使在发生故障期间,也能为某些使用者保留服务功能。 使用者也可以将资源分区,确保用于调用一个服务的资源不会影响用于调用另一个服务的资源。 例如,对于调用多个服务的使用者,可为其分配每个服务的连接池。 如果某个服务开始发生故障,只有分配给该服务的连接池才会受到影响,因此,使用者可继续使用其他服务。 此模式的优势包括:

下图显示了围绕调用单个服务的连接池构建的隔舱。 如果服务 A 发生故障或导致其他某种问题,该连接池将被隔离,因此,只有使用分配给服务 A 的线程池的工作负荷才受影响。 使用服务 B 和 C 的工作负载不受影响,可继续工作而不会中断。

下图显示了调用单个服务的多个客户端。 为每个客户端分配了独立的服务实例。 客户端 1 发出了过多的请求,使其实例近乎瘫痪。 由于每个服务实例相互隔离,其他客户端可继续发出调用。

2. When to use this pattern

Use this pattern

This pattern isn't recommended

3. Implementation

3.1. Resilience4j

http://resilience4j.github.io/resilience4j/#_bulkhead Resilience4j 核心组件

The following patterns might also be useful when implementing this pattern:

5. Reference


CategoryDesignPattern

MainWiki: Bulkhead (last edited 2019-05-13 14:15:56 by twotwo)