よろずやIT
プログラミング

サーキットブレーカーパターンとは?障害の連鎖を防ぐ設計手法

執筆・監修:よろずやIT編集部|編集方針を見る

結論:まずここだけ読めばOK

詳しい手順・原因は、この下で解説しています。

プログラミングのイラスト

サーキットブレーカーパターンとは何か

サーキットブレーカーパターンとは、あるサービスが別のサービスを呼び出す際、呼び出し先で障害が続いている場合に、それ以上の呼び出しを一時的に自動で遮断する設計手法です。名前の通り、家庭用の電気のブレーカーと同じ発想に基づいています。

「家庭のブレーカー」に例えると

家庭の分電盤にあるブレーカーは、電気の使いすぎや漏電などの異常を検知すると、被害が広がる前に自動で電気を遮断してくれます。もしブレーカーがなければ、異常な電流が流れ続け、配線の発熱や火災といった、より深刻な被害につながりかねません。

ソフトウェアの世界でも同じことが起こります。あるサービスが不調になっているのに、他のサービスがそれを知らずに呼び出し続けると、待ち時間の増加やリソースの枯渇が連鎖的に広がり、最終的にシステム全体が巻き込まれてしまうことがあります。サーキットブレーカーパターンは、この「障害の連鎖」を、電気のブレーカーと同じように未然に防ぐ役割を果たします。

図で見る、3つの状態

サーキットブレーカーは、主に3つの状態を行き来しながら動作します。Microsoft Azure Architecture Centerの公式解説でも、この仕組みが説明されています。

サーキットブレーカーの3つの状態を示す図解

なぜ「即座に失敗させる」ことが重要なのか

一見、リクエストを失敗させるのは望ましくないことのように思えます。しかし、相手のサービスがすでに不調な状態で、律儀に呼び出しを続けてタイムアウトを待つよりも、早い段階で諦めて即座にエラーを返す方が、システム全体にとって健全です。無駄な待ち時間やリソースの消費を防げるだけでなく、不調なサービス側に余計な負荷をかけ続けることも防げます。

実際の開発現場でよくある設計の悩みどころ

似た設計パターンとの違い

以前紹介した冪等性が「同じリクエストを繰り返しても結果が変わらないようにする」考え方であるのに対し、サーキットブレーカーパターンは「相手が不調な時に、そもそも呼び出し自体を控える」という、少し異なる観点の設計手法です。両者は組み合わせて使われることも多く、リトライ処理とあわせて実装されるのが一般的です。

こうして見ると

サーキットブレーカーパターンは、1つのサービスの不調が、システム全体を巻き込む障害に発展するのを防ぐための、重要な設計手法です。特に複数のサービスが連携するシステムを設計・運用する際は、意識しておく価値のある考え方です。

参考

※ 具体的な実装方法は使用しているフレームワークやライブラリによって異なるため、詳しくは各公式ドキュメントもあわせてご確認ください。

関連記事:APIのタイムアウトとリトライの決め方、冪等キー(Idempotency-Key)とは

PR【中古】 1からはじめるITアーキテクチャー構築入門 システム設計の基礎から実践まで/二上哲也(著者),田端真由美(著者)

【中古】 1からはじめるITアーキテクチャー構築入門 システム設計の基礎から実践まで/二上哲也(著者),田端真由美(著者)

¥2,480

楽天で見る
SHAREXLINEはてブ

よくある質問

Q.サーキットブレーカーは、どんなシステムでも必要ですか?

A.特に重要になるのは、複数のサービスが互いに通信し合う、マイクロサービス構成のシステムです。1つのプログラムだけで完結するシンプルなアプリケーションでは、優先度は下がります。

Q.リトライ(再試行)の仕組みがあれば、サーキットブレーカーは不要ですか?

A.リトライだけでは不十分な場合があります。相手のサービスが完全に停止している時にリトライを繰り返すと、かえって相手への負荷を増やし、復旧を遅らせてしまうことがあります。サーキットブレーカーは、そうした無駄なリトライ自体を止める役割も担っています。

Q.Half-Open状態で試験的に流したリクエストが、たまたま失敗しただけの場合はどうなりますか?

A.多くの実装では、単発の失敗だけでOpen状態に戻すのではなく、一定回数や一定割合の失敗を基準に判定します。基準の細かい設計は、システムの特性に応じて調整が必要です。

関連記事

最新のIT関連書籍 トップ10

PR / 楽天市場の売れ筋ランキングを定期的に取得しています。価格は変動する場合があるため、購入前に各ストアでご確認ください。