【さーきっとぶれーかー】

サーキットブレーカー とは?

💡 障害の連鎖を防ぐ「電気ブレーカーのような安全装置」
📌 このページのポイント
Closed 正常(通過) 障害多発 Open 遮断(拒否) タイマー満了 Half-Open テスト(試行) 成功 失敗 障害発生時にリクエストを遮断し、システムの連鎖障害を防ぐ
サーキットブレーカーパターン
ひよこ ひよこ

サーキットブレーカーって何のためにあるの?

ペンギン先生 ペンギン先生

マイクロサービスで「Aが遅いBを呼び続けて→Aも詰まって→Aを呼んでいるCも詰まって」という連鎖障害が起きることがある。サーキットブレーカーは障害中のBへのリクエストを自動で遮断するから、Aが巻き込まれずに済むんだよ。

ひよこ ひよこ

遮断するって、エラーを返すってこと?

ペンギン先生 ペンギン先生

そう。Bが障害中のとき、Bにリクエストを送ってタイムアウトを待つ代わりに、即座に「サービス利用不可」エラーを返す。待ち時間がゼロになるから、Aの処理が詰まらなくて済むんだ。

ひよこ ひよこ

ずっと遮断したままだと復旧したBにアクセスできないよね?

ペンギン先生 ペンギン先生

そこがブレーカーの賢いところで、Closed(通常)→Open(遮断)→Half-Open(試験)という3つの状態を持つんだ。遮断後しばらくしたら「Half-Open」状態でごく少量のリクエストを通してみて、成功したらClosedに戻す。失敗したらまたOpenに戻るんだよ。

ひよこ ひよこ

サーキットブレーカーの「エラー率の閾値」ってどう決めるの?低すぎると正常なエラーで遮断されそうだし、高すぎると障害に気づくのが遅れそう。

ペンギン先生 ペンギン先生

これは現場でも本当に悩ましい設定問題で、「魔法の数字」はないんだよね。一般的にはエラー率50%超・最小リクエスト数20件以上・時間窓10秒、みたいな複合条件で設定する。単純なエラー率だけではなくレイテンシ閾値(例えば応答が3秒超え)も条件に入れることもある。サービスの種類によって適切な値が全然違うから、本番の通常時のエラー率を計測してからその2〜3倍を閾値にする、というアプローチがよく使われるよ。

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「サーキットブレーカー」って出てきたら「障害中のサービスへの通信を自動遮断して連鎖障害を防ぐ仕組みのことだな」と思えればだいたいOK!
📖 おまけ:英語の意味
「Circuit Breaker」 = 電気回路の「遮断器(ブレーカー)」
💬 家の電気ブレーカーと同じ発想。過電流が流れたら自動で回路を遮断して火事を防ぐ、という仕組みをソフトウェアに応用したよ
← 用語集にもどる