【ばるくへっどぱたーん】

バルクヘッドパターン とは?

最終更新:
💡 リソースを区画に分け、障害の波及を抑える

アプリケーションのリソースやサービスを区画に分け、一部の過負荷や障害が他の区画へ波及するのを抑える設計パターン。接続プールやスレッドプール、実行環境などを分離する。船の隔壁に由来する。

📌 このページのポイント
区画を分けてリソースを守る 共有プール 分けたプール 決済・検索 決済・検索 決済で埋まる 決済 検索 検索も待つ 検索の枠を残す 共有する別の依存先も確認する
接続プールを呼び出し先ごとに分ける例。決済用の枯渇が検索用の枠まで奪うのを防ぐ。別の共有依存先や隔離の強さによって影響範囲は変わる。
ひよこ ひよこ
バルクヘッドパターンって、船の話みたいだね?
ペンギン先生 ペンギン先生
船の隔壁が名前の由来だよ。区画を仕切って、一部の浸水が他の区画へ広がるのを抑える。その発想で、アプリケーションのリソースやサービスを分離するんだ。
ひよこ ひよこ
システムでは、何を防ぐの?
ペンギン先生 ペンギン先生
例えば決済と検索が同じ接続プールを使うと、決済の遅延で接続が埋まり、検索も接続を使えなくなるおそれがあるよ。呼び出し先ごとにプールを分ければ、決済が検索用の接続まで使い尽くすのを防げるんだ。
ひよこ ひよこ
具体的にはどう分けるの?
ペンギン先生 ペンギン先生
接続プール、スレッドプール、同時処理数の枠などを分ける方法があるよ。サービス側をプロセスやコンテナ、別の実行環境に分けることもある。何のリソースを隔離したいかに合わせて選ぶんだ。
ひよこ ひよこ
ペンギン先生 ペンギン先生
バルクヘッドはリソースを分離して、影響の広がりを抑えるもの。サーキットブレーカーは障害が続く呼び出しを一時的に止める仕組みだよ。役割が違うので、必要に応じて組み合わせられるんだ。
ひよこ ひよこ
分けたら、他の機能は必ず動き続ける?
ペンギン先生 ペンギン先生
共有しているDBや装置など、別の依存先も確認しよう。分離できる範囲は技術と構成による。区画を増やすとリソースの利用効率や管理の負担にも影響するので、必要な粒度を決め、各区画を監視するんだ。
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「バルクヘッドパターン」って出てきたら「リソースを区画に分け、障害の波及を抑える」と思えばだいたいOK!
📖 おまけ:英語の意味
「Bulkhead Pattern」 = 隔壁パターン
💬 bulkheadは船の区画を仕切る隔壁だよ。一部の浸水が他へ広がるのを抑える発想を、アプリケーションの障害対策へ応用しているんだ。

参考資料

← 用語集にもどる