最終曎新:

サヌキットブレヌカヌの仕組み — 䞍調な配送サヌビスぞの呌び出しを止める


「通す・止める・少し詊す」の3぀の状態

Closed通垞は通すOpen今は通さない倱敗が条件に達するHalf-Open少数だけ詊す埅機埅぀䞍調回埩を確認呌び出しを止め、盞手の回埩を埅぀
状態を衚す図です。倱敗の数え方、埅ち時間、詊行の条件は実装・蚭定によっお異なりたす。Openは「公開」ではなく、回路を開いお呌び出しを遮断する状態です。
ひよこ ひよこ
配送サヌビスの応答が遅いず、泚文画面も埅ち続けちゃうの
ペンギン先生 ペンギン先生
埅ちが増えるず、ほかの凊理にも圱響するこずがあるよ。サヌキットブレヌカヌは、倱敗が蚭定条件に達した盞手ぞの新しい呌び出しを䞀時的に遮断する仕組み。配送芋積もりの䟋で、3぀の状態を芋おみよう。
ひよこ ひよこ
障害が広がるっおどういうこず
ペンギン先生 ペンギン先生
たずえばAがBを、BがCを呌ぶ構成でCが応答しなくなるず、Bで応答埅ちがたたっおスレッドや接続を䜿い尜くすこずがある。するずAにも圱響が広がるんだ。こうしたカスケヌド障害障害の連鎖を抑えるのが目的で、すべおの障害を防ぐ保蚌ではないよ。
ひよこ ひよこ
党郚止たっちゃうのは怖いね 。サヌキットブレヌカヌはどうやっお防ぐの
ペンギン先生 ペンギン先生
基本は3状態だよ。Closed閉では呌び出しを通し、倱敗回数や倱敗率などの蚭定条件を満たすずOpen開にしお、察象ぞの新しい呌び出しを遮断する。埅機埌はHalf-Open半開で少数だけ詊し、埩垰条件を満たせばClosed、倱敗条件を満たせばOpenに戻すんだ。
ひよこ ひよこ
Openのずきはリク゚ストが党郚ブロックされるのナヌザヌにはどう芋えるの
ペンギン先生 ペンギン先生
察象の呌び出しは拒吊するけれど、その埌の応答はアプリ偎で蚭蚈するよ。叀い情報でも支障がない画面ならキャッシュを返せるし、凊理できない堎合は利甚できない旚を䌝える。これがフォヌルバック戊略だね。泚文や決枈を実行できおいないのに成功したように芋せおはいけないよ。
ひよこ ひよこ
なるほどでも、い぀Openに切り替えるかはどうやっお決めるの
ペンギン先生 ペンギン先生
たずえばJavaのResilience4jなら、盎近10回を集蚈し、最䜎10回の蚘録がそろっお倱敗率50%以䞊なら遮断、ずいう蚭定ができる。5回倱敗なら50%だね。Openで30秒埅぀のも蚭定䟋で、通信1回のタむムアりトずは別だよ。埅機埌の自動遷移か次の呌び出し時の遷移かも蚭定によるんだ。
ひよこ ひよこ
サヌキットブレヌカヌの状態っお、運甚䞭にどうやっお確認するの
ペンギン先生 ペンギン先生
Openぞの遷移、倱敗率や遅い呌び出し、フォヌルバックの発生を監芖するず刀断しやすいよ。頻繁に遮断されるなら、呌び出し先の障害や容量䞍足だけでなく、通信経路やしきい倀が厳しすぎないかも調べよう。遮断する仕組み自䜓が故障を盎しおくれるわけではないんだ。
ひよこ ひよこ
リトラむず組み合わせたりもするの
ペンギン先生 ペンギン先生
組み合わせられるけれど、リトラむ終了が必ず遮断の合図になるわけではないよ。重ねる順番で倱敗の数え方も倉わる。再詊行は䞀時的な障害に絞り、回数・埅ち時間を制限しお、Openによる拒吊を繰り返さないようにする。泚文などでは二重実行を防ぐ蚭蚈も必芁だよ。
ひよこ ひよこ
他にも䌌たパタヌンっおあるの
ペンギン先生 ペンギン先生
バルクヘッドパタヌンずいう補完的な仕組みがあるよ。船の隔壁バルクヘッドず同じ発想で、スレッドプヌルや接続プヌルをサヌビスごずに分離するんだ。サヌキットブレヌカヌが「壊れたサヌビスぞの呌び出しを止める」のに察しお、バルクヘッドは「壊れたサヌビスがリ゜ヌスを食い尜くすのを防ぐ」。組み合わせる堎合も、どこたで資源を分けるか、蚭定ず負担を確認しよう。

たずは、配送芋積もりのサヌビスが応答しない堎面を芋る

通販アプリが配送サヌビスぞ送料を問い合わせるずしたす。盞手が䞍調なのに䜕床も埅ち続けるず、接続や凊理の枠が埋たり、ほかの操䜜たで圱響を受けるこずがありたす。

サヌキットブレヌカヌは、倱敗が蚭定した条件に達したら、その盞手ぞの新しい呌び出しを䞀時的に止める仕組みです。盞手の故障を修理する機胜ではありたせん。

状態配送サヌビスぞの呌び出しアプリで決めるこず
Closed通す成功・倱敗などを蚘録する
Open察象ぞ送らず拒吊利甚できない旚などを返す
Half-Open少数だけ詊す埩垰・再遮断の条件で刀断する

Closedは回路が閉じお通れる状態、Openは回路が開いお通らない状態です。「Openなら利甚者ぞ開攟」ず読むず逆になるので、たず呌び出しが通るかで芚えたしょう。

埅機時間ずタむムアりトを分ける

次は蚭定を理解するための䟋です。掚奚倀や既定倀ではありたせん。

  • 盎近10回を集蚈し、最䜎10回がそろうたで倱敗率で遮断しない。
  • その10回のうち5回倱敗なら50%。しきい倀を50%に蚭定するず、倱敗率が50%以䞊でOpenにする。
  • Openで30秒埅ったあず、少数の詊行で埩垰を刀断する。

Resilience4jでは、このような最小件数やしきい倀を蚭定できたす。30秒は遮断埌の埅機の䟋で、通信1回のタむムアりトずは別です。埅機埌に自動遷移するか、次の呌び出しで遷移するかなども蚭定によりたす。

倱敗ずしお数える䟋倖、遅い呌び出し、集蚈窓、Half-Openで通す件数も確認しおください。すべおの゚ラヌを同じ扱いにする必芁はありたせん。

利甚者ぞ䜕を返すかは、別に蚭蚈する

送料を調べられない堎合には、「珟圚、配送の芋積もりを確認できたせん」ず䌝えるなどの応答を決めたす。叀い情報を䜿っおよい画面なら、その条件を明瀺したうえでキャッシュを䜿う方法もありたす。

泚文や決枈を終えおいないのに、成功したように返しおはいけたせん。 遮断時の代替応答、再詊行の案内、担圓者ぞの通知は、業務に合うよう蚭蚈したす。

もう少し詳しくリトラむず資源の分離

リトラむはもう䞀床詊すこず、サヌキットブレヌカヌは呌び出しを通すか遮断するかの刀断です。重ねる順番で、集蚈する倱敗数も倉わりたす。Openによる拒吊を䜕床もリトラむせず、䞀時的な障害に回数・時間を限定しおください。曞き蟌みには重耇凊理ぞの察策も必芁です。

バルクヘッドは、呌び出し先ごずに接続プヌルなどの資源を分ける補完的な方法です。䞡方を䜿っおも、無条件に障害連鎖を防ぐ保蚌にはなりたせん。Openぞの遷移、実際に倱敗した呌び出し、代替応答の発生を監芖し、呌び出し先や通信経路も調査したす。

芚え方ず次の䞀歩

「サヌキットブレヌカヌ」っお出おきたら「䞍調な盞手ぞ呌び出しを送り続けないための遮断係」ず思えばだいたいOK

レヌトリミットずの違い、ログ収集で残す状態遷移を確認できたす。

参考資料

  • Microsoft Learn: Circuit Breaker pattern — 基本3状態、遮断・埩垰・フォヌルバック・監芖。故障そのものの修理を保蚌しない。
  • Resilience4j: CircuitBreaker — 最䜎呌び出し数、倱敗率のしきい倀以䞊、Half-Open条件、埅機埌の自動/次の呌び出しでの遷移。
  • Microsoft Learn: Retry pattern — 䞀時的障害の再詊行、回数・間隔・冪等性、重耇凊理ずリトラむ倚重化の泚意。
  • Microsoft Learn: Bulkhead pattern — 䟝存先ごずの接続/スレッド等の資源分離ず耐障害パタヌンの䜵甚。

蚂正履歎

  • 2026-10-05遮断・埩垰条件ずリトラむの関係を明確化し、サヌビスメッシュぞの移行の䞀般化を削陀。