Persistent/keepalive-HTTP mit PHP-Curl-Bibliothek?

Bin ich mit einem einfachen PHP-Bibliothek zum hinzufügen von Dokumenten zu einem SOLR-index per HTTP.

Gibt es 3 Server beteiligt, derzeit:

  1. Die PHP-box läuft die Indizierung job
  2. Ein Feld Datenbank hält die Daten indiziert
  3. Der solr-box.

80 Dokumente/sec (von 1 Millionen Dokumente), ich bin zu bemerken, einen ungewöhnlich hohen interrupt-rate auf der Netzwerk-Schnittstellen auf dem PHP und solr-Boxen (2000/sec; was mehr ist, die Graphen sind nahezu identisch-wenn der interrupt-rate auf der PHP-box-spikes, die es auch spikes an den Solr-box), aber viel weniger auf das Datenbank Feld (300/s). Ich denke, das ist einfach, weil ich offen und Wiederverwendung eine einzelne Verbindung zum Datenbank-server, aber jeder einzelne Solr Anfrage ist derzeit die Eröffnung eines neuen HTTP-Verbindung über cURL, Dank der Möglichkeit der Solr-client-Bibliothek geschrieben.

So, meine Frage ist:

  1. Können cURL gemacht werden, um zu öffnen, eine keepalive-Sitzung?
  2. Was braucht es, um eine Verbindung wiederverwenden? - ist es so einfach wie die Wiederverwendung der cURL-handle resource?
  3. Muss ich irgendwelche speziellen cURL-Optionen? (z.B. force HTTP 1.1?)
  4. Gibt es irgendwelche Probleme mit cURL-keepalive-verbindungen? Das Skript läuft für Stunden zu einer Zeit; werde ich in der Lage sein, für eine einzelne Verbindung, oder muss ich mich in regelmäßigen Abständen verbinden?
Auch ich habe es verwendet, wo waren wir analysieren einer ganzen Seite mit vielen vielen Seiten, die erforderliche Authentifizierung und halten eine Sitzung in der gesamten. Mit den anfänglichen Griff-Ressource, die Sie können weiterhin Befehle ausführen, um die Seiten und pflegen der gleichen Sitzung und die Verbindung mit dem client. Über die Kommandozeile hat dies dauerte etwa 20min (für alle Daten Anforderungen - also könnte länger dauern), ohne dass eine erneute Verbindung herzustellen. Aber ich bin mir nicht sicher, ob dies ist, was Sie Fragen, so ist das ein Kommentar und keine Antwort 🙂
Noch ein Hinweis, oft gibt es Optionen, die Sie benötigen, um je nachdem, was Sie tun und die server, die Sie herstellen. All dies ist sehr gut hier dokumentiert: uk3.php.net/manual/en/function.curl-setopt.php
Dieser Teil der FAQ ist relevant, wenn auch nicht sehr detailliert: curl.haxx.se/docs/faq.html#Can_I_perform_multiple_requests
Eine gotcha-ich lief in: wenn Sie etwas in der Größenordnung von 100.000 Anfragen über eine einzelne LOCKE Griff, mein Skript Treffer 512 MB Speicher-Nutzung; es ging nie über 60 MB, bevor ich begann die Wiederverwendung von verbindungen. Ich bin nun wieder alle 1000 Anfragen (was vermutlich öfter als nötig, aber selten genug, dass die Verbindung overhead sollte sehr klein sein)
Es gibt auch: CURLOPT_MAXCONNECTS - Die maximale Menge von persistenten verbindungen erlaubt sind. Wenn das limit erreicht ist, CURLOPT_CLOSEPOLICY wird verwendet, um zu bestimmen, welche Verbindung zu schließen.

InformationsquelleAutor Frank Farmer | 2009-06-09

Schreibe einen Kommentar