Apigee Edge 独自の便利な機能の 1 つに、NodeJS アプリケーションを API プロキシでラップする機能があります。この機能を使うと、Edge を使用してイベント ドリブンのサーバー側アプリケーションを作成できます。
アンチパターン
API プロキシのデプロイとは、API プロキシを API リクエストの処理に利用できるようにするプロセスです。デプロイされた各 API プロキシは Message Processor のランタイム メモリに読み込まれることで、特定の API プロキシの API リクエストを処理できるようになります。そのため、デプロイされた API プロキシの数が増えると、ランタイム メモリの使用量が増加します。使用していない API プロキシをデプロイしたままにすると、ランタイム メモリが無駄に使用される可能性があります。
NodeJS API プロキシの場合、影響が増大します。
このプラットフォームでは、デプロイされたすべての NodeJS API プロキシに対して「Node アプリ」が起動します。Node アプリは、Message Processor JVM プロセス上のスタンドアロン ノードサーバー インスタンスに似ています。
実際に Edge では、デプロイされたそれぞれの NodeJS API プロキシに対してノードサーバーを起動し、対応するプロキシのリクエストを処理します。同じ NodeJS API プロキシが複数の環境にデプロイされている場合、対応するノードアプリがそれぞれの環境用に起動されます。デプロイされているものの使用されていない NodeJS API プロキシが多数ある状況では、多数の Node アプリが起動します。未使用の NodeJS プロキシはアイドル状態の Node アプリとなり、メモリを消費し、アプリケーション プロセスの起動時間に影響を及ぼします。
使用済みプロキシ | 未使用プロキシ | ||||
---|---|---|---|---|---|
プロキシ数 | デプロイされた環境数 | 起動された Node アプリ数 | プロキシ数 | デプロイされた環境数 | 起動された Node アプリ数 |
10 | 開発、テスト、本番(3) | 10x3=30 | 12 | 開発、テスト、本番(3) | 12x3=36 |
上の図では、36 個の未使用の Node アプリが起動し、これによりシステムメモリが使い果たされて、プロセスの起動時間に悪影響が及びます。
影響
- メモリ使用率が高くなり、さらなるリクエストを処理するアプリケーションの能力に対してカスケード効果が生じる
- 実際にトラフィックを処理している API プロキシのパフォーマンスに影響が生じる可能性がある
ベスト プラクティス
- 未使用の API プロキシをデプロイ解除します
- Analytics Proxy Performance ダッシュボードを使用して、トラフィックを処理していないプロキシを特定し、不要なプロキシをデプロイ解除します