0Pricing
C# Academy · レッスン

サーキットブレーカーパターン

失敗しているサービスへの呼び出しを一時的に停止します。

「サーキットブレーカーパターン」はCoddyKit上の無料C# Academyレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはC# Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 C# Academyコースには全4レッスンが含まれています。

再試行では解決できない問題

依存先が本当に停止している場合、すべてのリクエストを再試行すると負荷が積み重なり、自分のアプリの処理も遅くなります。サーキットブレーカーパターンは継続的な障害を検出し、しばらくの間、障害が発生しているサービスへの呼び出しを停止します。

電子回路からの着想

電気回路を保護するために作動するブレーカーと同じように、このパターンは障害が多発すると「トリップして開いた」状態になり、その後、依存先が復旧したかどうかを自動的に確認します。

3 つの状態

サーキットブレーカーには 3 つの状態があります。Closed(クローズド)は呼び出しが通常どおり通過する状態、Open(オープン)は呼び出しが直ちにブロックされる状態、Half-Open(ハーフオープン)は復旧を試行呼び出しで確認する状態です。

Closed 状態

Closed状態では、リクエストが通過し、Polly が失敗率を追跡します。サンプリング期間内に失敗がしきい値を超えると、ブレーカーは Open 状態に移行します。

Open 状態

Open状態では、Polly がショートサーキットし、依存先を呼び出すことなくBrokenCircuitExceptionを直ちにスローします。これにより依存先が復旧するための余地を作り、呼び出し元には早く失敗を返します。

try
{
    await pipeline.ExecuteAsync(token => CallServiceAsync(token));
}
catch (BrokenCircuitException)
{
    // circuit is open, fail fast
}

Half-Open 状態

遮断期間が経過すると、ブレーカーはHalf-Open状態に移行し、試行リクエストを 1 つ許可します。成功すると回路を閉じ、失敗すると次の遮断期間に向けて再び開きます。

ブレーカーの設定

Polly v8 ではCircuitBreakerStrategyOptionsを使用します。主な設定は、FailureRatio(例:0.5 = 50%)、MinimumThroughput、SamplingDuration、BreakDurationです。

using Polly.CircuitBreaker;

var pipeline = new ResiliencePipelineBuilder()
    .AddCircuitBreaker(new CircuitBreakerStrategyOptions
    {
        FailureRatio = 0.5,
        MinimumThroughput = 10,
        SamplingDuration = TimeSpan.FromSeconds(30),
        BreakDuration = TimeSpan.FromSeconds(15)
    })
    .Build();

FailureRatio と MinimumThroughput

FailureRatioはブレーカーを作動させる失敗の割合です。MinimumThroughputを設定すると、十分な回数の呼び出しが行われた後にだけブレーカーが作動するため、初期の 1 回の失敗で早まって開くことがありません。

状態変化への対応

OnOpened、OnClosed、OnHalfOpenedのコールバックを使うと、依存先の状態が悪化した際に状態の遷移をログに記録したり、アラートを発生させたりできます。

new CircuitBreakerStrategyOptions
{
    FailureRatio = 0.5,
    OnOpened = args =>
    {
        Console.WriteLine($"Circuit opened for {args.BreakDuration}");
        return default;
    }
};

再試行との組み合わせ

再試行とサーキットブレーカーは互いに補完し合います。再試行は短時間の障害に対処し、障害が継続するとブレーカーが再試行を停止します。順序が重要になるため、パイプラインのレッスンで改めて説明します。

手動制御

CircuitBreakerManualControlを保持すると、ブレーカーを手動で隔離(強制的に開く)または閉じることができます。メンテナンス期間に便利です。

var manualControl = new CircuitBreakerManualControl();
await manualControl.IsolateAsync(); // force open
await manualControl.CloseAsync();   // force closed

確認テスト

サーキットブレーカーパターンをテストします。

まとめ

サーキットブレーカーは、Closed、Open、Half-Openの状態を切り替えることで、障害が発生している依存先を保護します。Polly v8 では、FailureRatio、MinimumThroughput、SamplingDuration、BreakDurationを指定したAddCircuitBreakerで作動条件を制御します。Open 状態ではBrokenCircuitExceptionをスローして早く失敗させることができ、コールバックと手動制御によって状態の監視や上書きも行えます。

よくある質問

「サーキットブレーカーパターン」レッスンは無料ですか?

はい。「サーキットブレーカーパターン」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、C# Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 C# Academyコースには全4レッスンが含まれています。

「サーキットブレーカーパターン」で何を学びますか?

失敗しているサービスへの呼び出しを一時的に停止します。 ブラウザで直接実行するハンズオンコードでC# Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

C# Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのC# Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。

「サーキットブレーカーパターン」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このC# Academyレッスンでコードを書いて実行できますか?

はい。すべてのC# Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. 再試行ポリシー
  2. サーキットブレーカーパターン
  3. タイムアウトとフォールバックのポリシー
  4. レジリエンスパイプライン
← C# Academyに戻る