パフォーマンスの最適化は、APIバッチリクエストを作成する際の重要なステップです。インターフェイスコールの頻度が増加するにつれて、合理的な最適化戦略は、リクエストの時間オーバーヘッドを短縮するだけでなく、システム全体の応答と安定性を改善することもできます。 PHPのcurl_upkeep()は、バッチリクエストのパフォーマンスを最適化するための強力なツールです。この記事では、 curl_upkeep()を使用してAPIバッチ要求のパフォーマンスを改善し、サンプルコードで説明する方法を詳細に調べます。
実際のアプリケーションでは、特に外部サービスで多数のAPI呼び出しを行う場合、ネットワークリクエストの遅延はしばしばボトルネックになります。各API要求には、DNS解像度、TCP接続、HTTP要求、応答などの複数のリンクが含まれます。単一のリクエストによって時間がかかる時間は些細なように見えるかもしれませんが、リクエストの数が多い場合、蓄積された時間損失が非常に大きくなる可能性があります。現時点では、バッチリクエストのパフォーマンスを最適化することが特に重要です。
curl_upkeep()は、PHPのヘルパー機能であり、 Curl拡張機能を介して複数の同時HTTP要求を管理および最適化します。 APIバッチリクエストが必要な場合、従来のプラクティスは通常、リクエストを1つずつ送信することであり、 curl_upkeep()は複数のリクエストを同時に送信できるため、リクエストの実行効率を大幅に改善します。
curl_upkeep()の重要な利点は次のとおりです。
同時リクエスト:複数のリクエストを並行して処理することにより、待機時間が短縮されます。
接続の再利用: Curlは既存の接続を再利用し、重複したDNSクエリとTCPハンドシェイクを回避します。
柔軟なコントロール:要求されたタイムアウト、並行性番号、その他のパラメーターを設定して、リクエストの動作を細かく制御できます。
curl_upkeep()を使用してパフォーマンスを改善する方法をよりよく理解するために、APIバッチリクエストを実装し、パフォーマンスの最適化を実行する方法を示すサンプルコードを次に示します。
<?php
// シミュレーション API 住所を要求します
$apiUrls = [
"https://api.m66.net/v1/data/endpoint1",
"https://api.m66.net/v1/data/endpoint2",
"https://api.m66.net/v1/data/endpoint3",
"https://api.m66.net/v1/data/endpoint4",
];
// 初期化 cURL multi handle
$mh = curl_multi_init();
// 作成する cURL ハンドル配列をリクエストします
$curlHandles = [];
foreach ($apiUrls as $index => $url) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 30); // タイムアウトを設定します
// にハンドルを追加します multi handle 真ん中
curl_multi_add_handle($mh, $ch);
$curlHandles[$index] = $ch;
}
// すべてのリクエストを実行し、完了を待ちます
$running = null;
do {
curl_multi_exec($mh, $running);
curl_multi_select($mh);
} while ($running > 0);
// 処理結果
foreach ($curlHandles as $index => $ch) {
$response = curl_multi_getcontent($ch);
echo "Response from endpoint " . ($index + 1) . ":\n";
echo $response . "\n";
curl_multi_remove_handle($mh, $ch);
curl_close($ch);
}
// 閉鎖 multi handle
curl_multi_close($mh);
?>
CURLマルチハンドルの初期化:まず、 curl_multi_init()を使用して、複数のCurl要求の管理の中核であるCurl Multi Heandtを初期化します。
単一の要求を設定する:各API URLについて、 curl_init()を使用して単一のcurlハンドルを初期化し、要求パラメーター(URL、タイムアウトなど)を設定します。
マルチハンドルにリクエストを追加: curl_multi_add_handle()を使用して、各curl要求ハンドルをマルチハンドルに追加し、並列処理を開始します。
実行要求: curl_multi_exec()を介してすべてのリクエストを開始し、 curl_multi_select()を使用してリクエストが完了するのを待ちます。
応答を取得して処理します。各リクエストが完了したら、 curl_multi_getContent()を使用して応答コンテンツを取得して処理できます。
リソースのクリーンアップ:リクエストを完了したら、 curl_multi_remove_handle()とcurl_close()を使用してリソースをリリースし、最後にcurl_multi_close()を介してマルチハンドルを閉じます。
Batchリクエストでは、 curl_upkeep()を使用して同時性のパフォーマンスを向上させることに加えて、次の最適化手法も考慮することができます。
接続の多重化: curlopt_forbid_reuseをfalseに設定して、接続の多重化を可能にするため、要求するたびに接続時間とDNSルックアップ時間が短縮されます。
非同期リクエスト:リクエストからの応答を待っているため、システムが他のリクエストをブロックしないように、非同期的な方法でリクエストをプロセスします。
バッチでのリクエスト処理:API要求の数が大きすぎる場合、バッチでそれらを呼び出すことができ、各バッチは、あまりにも多くのリクエストを処理するためにシステムがクラッシュするのを防ぐために特定の数のリクエストを処理できます。
タイムアウト設定を適切に増やす:長い間応答しないリクエストの場合、リクエストが待機状態にあることを避けるために、合理的なタイムアウト時間を設定できます。
curl_upkeep()を使用してAPIバッチリクエストを処理することにより、特に同時リクエストが必要な場合は、リクエスト効率を大幅に改善できます。合理的に接続のマルチプレックス、並行性制御、タイムアウト時間を設定すると、リクエストの合計時間を効果的に短縮し、システムの応答機能を改善できます。大規模なAPIコールシナリオでは、最適化手法を使用すると、システムがより安定して効率的になります。
この記事の例と分析を通して、APIバッチ要求のパフォーマンスを最適化するためにcurl_upkeep()を使用する方法を習得したと思います。