1.2. サーキットブレーカー設計パターン
サーキットブレーカーパターンは、サービスアーキテクチャーの失敗を処理し、複数のシステム全体でのカスケード障害を回避するように設計されています。サーキットブレーカーは、障害が発生する可能性のあるリモートサービスエンドポイントに要求を送信するクライアント機能のプロキシーとして機能できます。サーキットブレーカーオブジェクトのリモートサービスエンドポイントに送信されたすべての要求をラップできます。その後、サーキットブレーカーはリモートサービスを呼び出し、そのステータスを監視します。失敗数が指定されたパーセンテージのしきい値に達すると、サーキットブレーカーがトリガーされます。その後、サーキットブレーカーは、リモートサービスへの追加の要求が、指定された期間、エラーメッセージまたはフォールバック応答で自動的にブロックされるようにします。
サーキットブレーカー設計パターンに基づいて、サーキットブレーカーは特定の時点で次のいずれかの状態になります。
- Closed
-
障害数は、サーキットブレーカーをトリガーできる指定されたパーセンテージしきい値を下回るものです。Node.js アプリケーションのサーキットブレーカーに渡される任意のパラメーターとして、パーセンテージのしきい値を定義できます。デフォルトのパーセンテージのしきい値は 50% です。障害回数が少なく、サーキットブレーカーが
closedの場合、クライアント関数はリモートサービスエンドポイントに引き続きリクエストを送信できます。 - Open
-
障害回数が、サーキットブレーカーをトリガーする指定のパーセンテージしきい値に達しました。たとえば、デフォルトのオプションに基づいて、リクエストの 50% が失敗した場合、サーキットブレーカーは
open状態に移行します。その後、サーキットブレーカーは、指定されたタイムアウト期間の間、エラーメッセージまたはフォールバック応答を使用して、リモートサービスエンドポイントへのすべての呼び出しをブロックします。タイムアウトの期間は、Node.js アプリケーションのサーキットブレーカーに渡される任意のパラメーターとして定義できます。デフォルトのタイムアウト期間は 30 秒です。 - Half open
-
指定されたタイムアウト期間が終了しました。たとえば、デフォルトのオプションに基づいて、タイムアウト期間が終了し、サーキットブレーカーは 30 秒後に
half-open状態に移行します。その後、サーキットブレーカーは限られた数のテスト呼び出しをリモートサービスエンドポイントに送信しようとします。テスト呼び出しに成功すると、サーキットブレーカーはclosed状態に切り替わり、クライアント関数はリクエストをリモートサービスに引き続き送信することができます。ただし、テスト呼び出しが失敗すると、サーキットブレーカーはopen状態に戻され、指定のタイムアウト期間中はリモートサービスへの呼び出しをすべてブロックし続けます。