13.5. Thorntail の Circuit Breaker の例
以下の例は、実稼働環境での実行を目的としていません。
制限: このサンプルアプリケーションを Minishift または CDK で実行します。手動ワークフローを使用して、このサンプルを OpenShift Online Pro および OpenShift Container Platform にデプロイすることもできます。この例は、現在 OpenShift Online Starter では使用できません。
Circuit Breaker の例は、サービスの障害を報告し、要求の処理に使用できるまで失敗したサービスへのアクセスを制限する一般的なパターンを示しています。これにより、障害が発生したサービスの機能に依存する他のサービスでのカスケード障害を防ぐことができます。
この例では、サービスに Circuit Breaker および Fallback パターンを実装する方法を示しています。
13.5.1. Circuit Breaker 設計パターン
Circuit Breaker は、以下を行うパターンです。
ネットワーク障害の影響を減らし、サービスが他のサービスを同期的に呼び出すサービスアーキテクチャーのレイテンシーを高くします。
サービスの 1 つが以下である場合:
- ネットワーク障害により利用できない
- 負荷がかかっているトラフィックが原因で、レイテンシーが異常に高くなる
エンドポイントを呼び出そうとする他のサービスは、エンドポイントに到達しようとして重要なリソースを使い果たし、使用できなくなる可能性があります。
- マイクロサービスアーキテクチャー全体が使用できなくなる可能性があるカスケード障害とも呼ばれる状態を防止します。
- 障害を監視する保護機能とリモート機能の間のプロキシーとして機能します。
- 障害が特定のしきい値に達するとトリップし、サーキットブレーカーへのそれ以降のすべての呼び出しは、保護された呼び出しがまったく行われずに、エラーまたは事前定義されたフォールバック応答を返します。
Circuit Breaker には通常、Circuit Breaker が作動した時に通知するエラー報告メカニズムも含まれています。
Circuit Breaker の実装
- Circuit Breaker パターンが実装されると、サービスクライアントは一定間隔でプロキシー経由でリモートサービスエンドポイントを呼び出します。
- リモートサービスエンドポイントへの呼び出しが繰り返し一貫して失敗すると、Circuit Breaker が作動し、サービスへのすべての呼び出しが、設定されたタイムアウト期間に即座に失敗し、事前定義されたフォールバック応答を返します。
タイムアウト期間が期限切れになると、限られた数のテストコールがリモートサービスを通過して、それを修復したかどうかを判断したり、利用不可のままであるかを判断できます。
- テスト呼び出しが失敗すると、Circuit Breaker はサービスを利用できない状態に維持し、受信呼び出しへのフォールバック応答を返します。
- テストに成功すると、Circuit Breaker が閉じ、トラフィックが再度リモートサービスに到達できるようにします。