接続の再利用を行わない場合、API 呼び出しごとに新しい TCP 接続が開始され、TLS ハンドシェイクが実行されるため、レイテンシーが増加します。高同時実行シナリオでは、このオーバーヘッドがタイムアウトやリソースの浪費を引き起こします。接続の再利用により、繰り返しのセットアップが不要になり、レイテンシーとリソース消費を削減できます。
DashScope SDK は、Java と Python の両方で接続の再利用をサポートしています。
コード例を実行する前に、次の準備が必要です。
Java SDK には、デフォルトで有効になっている組み込みのコネクションプールが含まれています。ワークロードに合わせて、最大接続数とタイムアウト設定を調整してください。
パラメータの制約:
次の例では、コネクションプールのパラメータ (タイムアウト、最大接続数) を設定し、モデルサービスを呼び出します。パラメータを調整して、同時実行性とリソース使用量を最適化してください。
Python SDK は、カスタムセッションを渡すことで接続の再利用をサポートします。非同期 HTTP (コルーチンベース) と同期 HTTP の 2 つの呼び出しメソッドをサポートしています。
非同期シナリオでは、
次の例では、接続の再利用を設定し、モデルサービスを非同期で呼び出します。
同期シナリオでは、
次の例では、接続の再利用を設定し、モデルサービスを同期で呼び出します。
複数の呼び出しでセッションを再利用するには、次のようにします。
モデルの呼び出しが失敗した場合は、エラーメッセージ を参照して問題を解決してください。
- Java SDK : 組み込みのコネクションプールがデフォルトで有効になっています。最大接続数やタイムアウト期間などのパラメータを設定できます。
- Python SDK : カスタムセッションを渡すことで接続の再利用を有効にします。同期呼び出しと非同期呼び出しの両方をサポートしています。
事前準備
コード例を実行する前に、次の準備が必要です。
- API キーを環境変数としてエクスポートする必要があります。
- 最新の SDK をインストールする必要があります。
Java SDK
Java SDK には、デフォルトで有効になっている組み込みのコネクションプールが含まれています。ワークロードに合わせて、最大接続数とタイムアウト設定を調整してください。
パラメータ
| パラメータ | 説明 | デフォルト値 | 単位 |
|---|---|---|---|
| connectTimeout | 接続確立のタイムアウト。 | 120 | 秒 |
| readTimeout | データ読み取りのタイムアウト。 | 300 | 秒 |
| writeTimeout | データ書き込みのタイムアウト。 | 60 | 秒 |
| connectionIdleTimeout | プール内のアイドル接続のタイムアウト。 | 300 | 秒 |
| connectionPoolSize | プール内の最大接続数。 | 32 | 接続 |
| maximumAsyncRequests | すべてのホストにわたる最大同時リクエスト数 (グローバル上限)。 | 32 | リクエスト |
| maximumAsyncRequestsPerHost | ホストごとの最大同時リクエスト数。 | 32 | リクエスト |
maximumAsyncRequestsはconnectionPoolSize以下である必要があります。そうでない場合、リクエストがブロックされる可能性があります。maximumAsyncRequestsPerHostはmaximumAsyncRequests以下である必要があります。
- connectTimeout : 低レイテンシーのシナリオでは、タイムアウトを短く設定すると、待機時間を短縮できます。
- connectionIdleTimeout : 高同時実行シナリオでは、アイドルタイムアウトを延長すると、頻繁な接続作成を回避し、リソース消費を削減できます。
- connectionPoolSize : 高同時実行シナリオでは、接続数が少なすぎるとブロッキング、タイムアウト、頻繁な再接続 (リソース使用量の増加) が発生します。接続数が多すぎると、サーバーに過負荷がかかります。ワークロードに基づいて接続数のバランスを取ってください。
コード例
次の例では、コネクションプールのパラメータ (タイムアウト、最大接続数) を設定し、モデルサービスを呼び出します。パラメータを調整して、同時実行性とリソース使用量を最適化してください。
Python SDK
Python SDK は、カスタムセッションを渡すことで接続の再利用をサポートします。非同期 HTTP (コルーチンベース) と同期 HTTP の 2 つの呼び出しメソッドをサポートしています。
非同期 HTTP
非同期シナリオでは、aiohttp.ClientSession と aiohttp.TCPConnector を使用して接続の再利用を有効にします。TCPConnector は、接続制限などのパラメータ設定をサポートしています。
| パラメータ | 説明 | デフォルト値 | 注 |
|---|---|---|---|
| limit | 接続総数の上限 (すべてのホスト)。 | 100 | 高同時実行シナリオでは、この値を大きくすると同時実行性が向上します。 |
| limit_per_host | ホストごとの接続数上限。 | 0 (無制限) | 単一ホストへの接続数を制限し、過剰な負荷を防ぎます。 |
| ssl | SSL コンテキストの設定。 | None | HTTPS の SSL 証明書検証。 |
コード例
次の例では、接続の再利用を設定し、モデルサービスを非同期で呼び出します。
同期 HTTP
同期シナリオでは、requests.Session を使用して接続の再利用を有効にします。同一セッション内の複数のリクエストは、基盤となる TCP 接続を再利用するため、接続を繰り返し確立するオーバーヘッドを回避できます。
コード例:単一呼び出し
次の例では、接続の再利用を設定し、モデルサービスを同期で呼び出します。
コード例:共有セッションでの複数回呼び出し
複数の呼び出しでセッションを再利用するには、次のようにします。
ベストプラクティス
- Java SDK : ワークロードに基づいて
connectionPoolSizeとmaximumAsyncRequestsを設定してください。接続数のバランスを取ってください。少なすぎるとブロッキングが発生し、多すぎるとサーバーに過負荷がかかります。 - Python SDK :
withステートメントを使用してセッションのライフサイクルを管理し、リソースが正しくクリーンアップされるようにしてください。 - 適切なメソッドの選択 : 非同期アプリケーション (asyncio、FastAPI) には非同期呼び出しを、従来の同期アプリケーションには同期呼び出しを使用してください。