バルクヘッドパターン (Bulkhead pattern)
リソースを別々の「区画」に分け、一部の障害がシステム全体を沈めないようにするレジリエンスパターン。船の水密隔壁が浸水を船体全体に広げないのと同じ発想で、被害を封じ込める。
仕組み:すべての呼び出しが共通のリソースプール(スレッドや接続)を奪い合う代わりに、依存先や機能ごとにリソースを分割する。たとえば、高速な決済サービスと低速なレポートサービスの両方を呼ぶサービスがあるとする。隔壁がなければ、レポート側で止まった呼び出しがスレッドプールを使い切り、決済まで止まってしまう。依存先ごとに上限付きのプールを持たせれば、レポートの問題は自分の区画を埋めるだけで、決済はスレッドを確保したまま動き続ける。利点は、1つのコンポーネントの障害や過負荷が隔離され、他へ引きずり込まれないことだ。サーキットブレーカー(壊れた先を呼ばない)やタイムアウトと組み合わせる。実装は、スレッドプール・接続プール・セマフォの分離のほか、インフラ層(Podやノードの分離)でも行う。名前も発想も造船に由来する。堅牢なシステムの基本的な隔離原則だ。サーキットブレーカー(ops)とバックプレッシャー(ops)に関連する。