5.5. Node.js のサーキットブレーカーの例
以下の例は、実稼働環境で実行することは意図されていません。
制限: Minishift または CDK でこのサンプルアプリケーションを実行します。手動でのワークフローを使用して、この例を OpenShift Online Pro および OpenShift Container Platform にデプロイすることもできます。この例では、現在 OpenShift Online ドキュメンテーションでは使用できません。
実験レベルの例: Foundational。
Circuit Breaker の例は、サービスの失敗を報告し、要求の処理に利用できるまで失敗したサービスへのアクセスを制限します。これにより、機能障害の発生したサービスに依存する他のサービスでエラーが発生するのを防ぐことができます。
以下の例では、サービスに Circuit Breaker および Fallback パターンを実装する方法を説明します。
5.5.1. サーキットブレーカー設計パターン リンクのコピーリンクがクリップボードにコピーされました!
Circuit Breaker は以下の目的とするパターンです。
サービスが他のサービスを同期的に呼び出すサービスアーキテクチャーにおける、ネットワーク障害の影響やレイテンシーが高くなる。
いずれかのサービスがある場合:
- ネットワーク障害により利用不可になる
- トラフィックの難読化により、レイテンシーの値がかなり長くなります。
エンドポイントの呼び出しを試みる他のサービスは、到達を試みる際に重要なリソースを使い果たしなくなり、レンダリングが不可能になる可能性があります。
- マイクロサービスアーキテクチャー全体でレンダリングできないように、コンピューター障害としても知られるようにします。
- 保護された機能とリモート機能の間のプロキシーとして動作し、障害を監視するリモート機能として機能します。
- エラーが特定のしきい値に到達し、サーキットブレーカーへの呼び出しがすべて、保護された呼び出しを行わずに、エラーや事前定義のフォールバック応答を返します。
サーキットブレーカーには、通常、サーキットブレーカーをトリップしたときに通知を行うエラー報告メカニズムも含まれています。
サーキットブレーカーの実装
- Circuit Breaker パターンを実装すると、サービスクライアントは一定の間隔でプロキシー経由でリモートサービスエンドポイントを呼び出します。
- リモートサービスエンドポイントへの呼び出しが繰り返し失敗し、一貫して Circuit Breaker トリップを行うと、サービスへのすべての呼び出しは設定されたタイムアウト期間を即座に失敗し、事前定義されたフォールバック応答を返します。
タイムアウトの期限が切れると、リモートサービスに渡すテストコールの数に制限され、16 進法か、使用できなくなったかを判断できます。
- テスト呼び出しが失敗すると、サーキットブレーカーはサービスを利用できず、受信呼び出しにフォールバック応答を返します。
- テスト呼び出しに成功すると、サーキットブレーカーが終了し、トラフィックが再びリモートサービスに到達できるようになります。