アウトバウンド接続プールとは
HTTP 上の持続的接続では、データはシリアルに送信されます。これは、送信者が次のリクエストを送信する前に、前のリクエストが確認応答されるのを待つ必要があることを意味します。アウトバウンド接続プールは、API Gateway インスタンスがバックエンドサービスにアクセスするための接続リソースを提供します。
例えば、アウトバウンド接続プールのサイズが 1,200 の api.s1.small タイプの専用型インスタンスを購入し、バックエンドサービスが各リクエストに応答するのに 1 秒かかるとします。この場合、インスタンスがサポートする 1 秒あたりの最大アウトバウンドリクエスト数 (RPS) は 1,200 となります。その結果、インスタンスが 1 秒間に 1,200 を超えるリクエストをバックエンドサービスに送信すると、接続プールが完全に占有されているため、超過したリクエストはキューで待機します。リクエストが 500 ミリ秒以内に接続リソースを取得できない場合、`Backend service connect failed 'Connection lease request time out'` エラーが返されます。このようなエラーを防ぐために、Simple Log Service を設定して、接続リソースが使い果たされる前にアラートを送信することができます。これにより、リソース不足にいち早く対処できます。
前提条件
API Gateway のログが記録されていること。詳細については、「Log Service を使用した API 呼び出しログの管理」をご参照ください。
接続プールのアラートルールの設定
Log Service は、アラートルールで定義した条件が満たされたときにアラートをトリガーします。
アウトバウンド接続プールが枯渇すると、API Gateway はクライアントに `Backend service connect failed 'Connection lease request time out'` エラーを返します。このエラーは、ログの `errorMessage` フィールドに記録されます。このエラーメッセージに基づいてアラートを設定できます。詳細については、「Log Service でのアラートモニタリングルールの設定」をご参照ください。
参照トピックのステップ 2 で、インスタンス ID、エラー ID、およびエラーメッセージに基づいてアラートルールを設定できます。以下のサンプルコードは、クエリと分析の文を提供します。
instanceId: apigateway-cn-XXXXX and errorId : D504CO and '`Connection lease request time out`'
[クエリと統計] ダイアログボックスで、[詳細設定] タブをクリックします。[タイプ] を [Logstore] に設定します。[リージョン] には、インスタンスが配置されているリージョンを選択します。[Project] と [Logstore] には、API Gateway のログに対応する Project と Logstore (例:ali-apigateway-log-cn-beijing と gateway_request_log) をそれぞれ入力します。[専用 SQL] を [無効] に設定します。[時間範囲] を [15 分 (相対)] に設定します。
アウトバウンド接続プールの枯渇の解決
-
API Gateway インスタンスをスペックアップします。
-
サーバーレスインスタンスをご利用の場合は、まず専用型インスタンスを購入し、次に API グループを専用型インスタンスに移行します。詳細については、「インスタンス間での API グループの移行」をご参照ください。
インスタンスが専用型インスタンスの場合は、API Gateway コンソールでインスタンスの仕様をスペックアップできます。詳細については、「インスタンス仕様の変更」をご参照ください。
-
バックエンドサービスが必要とする応答時間を確認します。このメトリック (単位:ms) は、ログの serviceLatency フィールドに記録されます。これは、API Gateway がバックエンドサービスにリクエストを送信した時点から、API Gateway がバックエンドサービスからの応答の最後のパケットを受信した時点までの時間を指します。応答が遅いと、アウトバウンド接続リソースが不足する原因となります。したがって、serviceLatency の値に対してもアラートルールを設定することを推奨します。serviceLatency の値が大きいままである場合、接続リソースの不足が発生しやすくなります。この場合、バックエンドの応答を最適化して問題を未然に防ぐことができます。