HTTP経由でSOLRインデックスにドキュメントを追加するために、単純なPHPライブラリを使用しています。
現在、3つのサーバーが関係しています。
80ドキュメント/秒(100万ドキュメントのうち)で、PHPおよびsolrボックス(2000 /秒。さらに、グラフはほぼ同じです-PHPボックスでの割り込み率が急上昇すると、Solrボックスでも急上昇します)、データベースボックスでの低下率は非常に低くなります(300 /秒)。これは単にデータベースサーバーへの単一の接続を開いて再利用するためですが、Solrクライアントライブラリの記述方法のおかげで、現在、すべてのSolrリクエストがcURLを介して新しいHTTP接続を開いています。
だから、私の質問は:
cURL PHP documentation( curl_setopt )言います:
CURLOPT_FORBID_REUSE
-TRUE
は、処理の終了時に接続を明示的に閉じ、再利用のためにプールされないようにします。
そう:
Curlはデフォルトでキープアライブヘッダーを送信しますが、次のとおりです。
curl_init()
を使用してコンテキストを作成します。CURLOPT_URL
_オプションを使用して、URLをコンテキストに渡しますcurl_exec()
を使用してリクエストを実行しますcurl_close()
との接続を閉じないでください非常に基本的な例:
_function get($url) {
global $context;
curl_setopt($context, CURLOPT_URL, $url);
return curl_exec($context);
}
$context = curl_init();
//multiple calls to get() here
curl_close($context);
_
キープアライブにアクセスしているサーバーで有効にする必要があり、キープアライブ要求の最大数は妥当なものでなければなりません。 Apacheの場合、 Apache docs を参照してください。
同じcURLコンテキストを再利用する必要があります。
CURLコンテキストを構成する場合、ヘッダーでタイムアウトを使用してキープアライブを有効にします。
curl_setopt($curlHandle, CURLOPT_HTTPHEADER, array(
'Connection: Keep-Alive',
'Keep-Alive: 300'
));
要求からの応答を気にしない場合は、非同期で実行できますが、SOLRインデックスが過負荷になるリスクがあります。私はそれを疑いますが、SOLRは非常に速いです。