サーキットブレーカー さーきっとぶれーかー
簡単に言うとこんな感じ!
電気のブレーカーと同じイメージだよ!あるサービスが壊れたとき、そこへのリクエストを自動で遮断して「連鎖事故」を防ぐしくみなんだ。家の電気で過負荷がかかるとブレーカーが落ちるでしょ?あれのソフトウェア版ってこと!
サーキットブレーカーとは
サーキットブレーカー(Circuit Breaker)とは、マイクロサービスや分散システムにおいて、障害が発生しているサービスへの呼び出しを一時的に遮断し、システム全体への障害波及(カスケード障害)を防ぐデザインパターンです。もともとはエンジニアのMichael Nygardが著書『Release It!』で広めた概念で、後にマイクロサービスの普及とともに広く知られるようになりました。
複数のサービスが連携する現代的なシステムでは、一部のサービスが遅延・停止すると、その呼び出し元のサービスも詰まってしまい、最終的にシステム全体がダウンするリスクがあります。サーキットブレーカーはこの連鎖を「ブレーカーを落とす」ことで断ち切り、正常なサービスへの影響を最小限に抑えます。
実装としては、特定の条件(エラー率・タイムアウト回数など)を満たしたとき自動的に「遮断状態」に移行し、一定時間後に「試験的に再接続」して回復を確認するというサイクルを繰り返します。これにより人手を介さず自律的な障害隔離と自動復旧が実現できます。
3つの状態で動くしくみ
サーキットブレーカーは3つの状態を行き来しながら動作します。
| 状態 | 英語名 | 動作 |
|---|---|---|
| 閉(通常) | Closed | 正常にリクエストを通す。エラー数をカウント |
| 開(遮断) | Open | リクエストを即座にブロック。後続処理へフォールバック |
| 半開(試験) | Half-Open | 試験的に少数のリクエストを通し、回復を確認 |
[Closed] ──エラー率が閾値超え──▶ [Open]
▲ │
│ │ タイムアウト後
│ ▼
成功 ◀────────────────────── [Half-Open]
│
まだ失敗 ──▶ [Open] に戻る
状態遷移のポイント
- Closed → Open:エラー率(例: 50%以上)やエラー回数が閾値を超えたとき
- Open → Half-Open:設定したタイムアウト時間(例: 30秒)が経過したとき
- Half-Open → Closed:試験リクエストが成功したとき(回復確認)
- Half-Open → Open:試験リクエストが失敗したとき(まだ回復せず)
フォールバックとは
ブレーカーが「開」状態のとき、呼び出し元はエラーをそのまま返すのではなくフォールバック(代替処理)を実行します。たとえばキャッシュから前回のデータを返す、デフォルト値を返す、「現在サービスが利用できません」とユーザーに伝えるなどが代表例です。
歴史と背景
- 2007年:Michael Nygardが著書『Release It!』でサーキットブレーカーパターンを体系化。本番障害の実体験から生まれた知見が詰まっている
- 2013年頃:Netflixがオープンソースライブラリ Hystrix をリリース。マイクロサービスにおけるサーキットブレーカーの代名詞となり一気に普及
- 2018年:Hystrixがメンテナンスモードへ移行。後継として Resilience4j や Polly(.NET)などが主流に
- 2020年代:KubernetesやサービスメッシュのIstioがインフラレベルでのサーキットブレーカー機能を提供。アプリコードに手を入れなくても適用できる環境が整う
関連パターン・技術との比較
サーキットブレーカーは単独で使うより、複数のレジリエンスパターンと組み合わせることで効果を発揮します。
| パターン | 目的 | サーキットブレーカーとの関係 |
|---|---|---|
| リトライ(Retry) | 一時的な失敗を自動再試行 | 組み合わせ必須。ブレーカーOPEN中はリトライしない |
| タイムアウト(Timeout) | 応答待ちを一定時間で打ち切る | エラーカウントのトリガーになる |
| バルクヘッド(Bulkhead) | 障害の影響範囲をリソース単位で分離 | 同じ「隔離」思想を持つ補完パターン |
| フォールバック(Fallback) | 失敗時の代替処理 | OPEN状態で実行される処理 |
サーキットブレーカーを提供する主なライブラリ・プラットフォーム
関連する規格・RFC
この用語はIETF RFCやISO規格として標準化されているものではなく、業界で広く使われるアーキテクチャパターンです。公式ドキュメントとして以下が参考になります。
| ドキュメント | 内容 |
|---|---|
| Microsoft Azure Architecture Patterns - Circuit Breaker | Microsoftによるパターンの公式解説 |
| Resilience4j公式ドキュメント | Java向け実装ライブラリのリファレンス |