バルクヘッドパターンとは?
ばるくへっどぱたーん
システムの一部で障害が発生しても他の部分を守るため、リソースをグループ単位に分離するソフトウェア設計パターンです。
バルクヘッドパターン(Bulkhead Pattern)とは、マイクロサービスや分散システムにおいて、あるコンポーネントやサービスで発生した障害・リソース枯渇が他のコンポーネントへ連鎖することを防ぐために、リソースやスレッドプールをサービスやテナントごとに分離して管理するクラウドデザインパターンです。
名称は船舶の隔壁(バルクヘッド)に由来します。船体を複数の区画に仕切ることで、一部に浸水が生じても他の区画に水が広がらず沈没を防ぐ構造と同じ発想です。ソフトウェアでは、スレッドプール・コネクションプール・セマフォなどのリソースをサービス単位や機能グループ単位で割り当て、特定のサービスが高負荷になっても他のサービスが道連れになって応答不能になるのを防ぎます。
具体的な実装例として、外部APIを呼び出すサービスAとサービスBがあるとき、それぞれ専用のスレッドプールを持たせる設計にすると、サービスAが応答待ちでスレッドを使い尽くしてもサービスBのスレッドは影響を受けません。JavaのHystrix(現在はResilienceJ4やResilience4jに移行)や、サービスメッシュのIstioなどでバルクヘッドパターンを設定できます。
サーキットブレーカーパターンやリトライパターンと組み合わせることで、より堅牢な耐障害性設計を実現できます。
使い方・例文
注文サービスのスレッドプールを在庫サービスと分離するバルクヘッドパターンを導入し、在庫サービスの障害が注文処理に波及しないようにした。マイクロサービスアーキテクチャでバルクヘッドパターンはサービス間の障害伝播を防ぐ定番手法のひとつとされている。
この用語をシェア
最終更新: