Hochleistungs-Webserver ohne Datenbankinteraktivität

Hochleistungs-Webserver ohne Datenbankinteraktivität

Ich bereite mich darauf vor, einen Server einzurichten, der für die Verfolgung statistischer Daten aus einer Quelle mit hohem Datenverkehr zuständig sein wird. Er wird durchschnittlich etwa 6-7 Millionen Anfragen pro Stunde verarbeiten, bei denen es sich ausschließlich um kleine GET-Anfragen handelt. Alles, was ich brauche, ist eine einfache Servereinrichtung, die die Parameter der GET-Anfrage verarbeiten und in eine CSV-Datei schreiben kann.

Mein erster Gedanke war, lighttpd+fastcgi+php zu verwenden, da ich mit dieser Konfiguration bereits vertraut bin. Da ich jedoch nicht jeden Tag solche Leistungsentscheidungen treffen muss, möchte ich einige andere Optionen erkunden und prüfen, ob es für diesen Zweck vielleicht etwas noch Besseres gibt.

Antwort1

Sie möchten 6-7 Millionen Schreibvorgänge in eine CSV-Datei proStunde?

Im Ernst, eine Datenbank ist eine bessere Idee. Eine Datenbank ist für gleichzeitige Schreibvorgänge ausgelegt und kann vertikal (größere Maschine, schnellere Festplatten) oder horizontal (Lastverteilung auf mehrere Server) skaliert werden. Das Schreiben in eine einzelne CSV-Datei (oderbeliebigDatei) erfordert eine Art Sperre, um Parallelitätsprobleme zu bewältigen, und lässt sich bei zunehmender E/A-Last und Parallelität schlecht skalieren.

Um dies zu umgehen, werden Sie wahrscheinlich Ihre eigenen Caching- und Pufferebenen implementieren und dann damit beginnen, die Last auf mehrere Dateien aufzuteilen usw. usw. Verwenden Sie von Anfang an eine Art Datenbank und ersparen Sie sich eine Menge Kopfzerbrechen.

Antwort2

Wenn Sie etwa 2000 Anfragen/Sek. oder 500µs/Anfrage ausführen,DURCHSCHNITT(was viel höhere Spitzen bedeutet), CSVs sind wahrscheinlich aufgrund überschriebener Einträge bei gleichzeitigen Schreibvorgängen nicht geeignet, da nichts atomare Schreibvorgänge in Ihren Dateien garantiert.

Eine Idee wären pro Prozess/pro Schreiber Dateien, die später gesammelt werden, eine andere Idee wäre die Verwendung einer Datenbank, die stark auf hohe Schreibzahlen abgestimmt ist. Sie könnten sich auch Nachrichtenwarteschlangen oder Gruppenkommunikationsprotokolle ansehen (z. B.Verbreiten), aber ich weiß nicht, ob sie dieser Menge gewachsen sind.

Was auch immer Sie tun, werfen Sie ein paar schnelle Ideen ein und vergleichen Sie sie. Aktuelle Hardware kann Wunder in Bezug auf die Leistung bewirken, optimieren Sie nur, wenn es nötig ist. Was PHP betrifft - stellen Sie sicher, dass ein Opcode-Cache installiert ist (z. B.APC), andernfalls verschwenden Sie viele Zyklen mit der unnötigen Neukompilierung der Skripte.

Bedenken Sie auch, wie das Wachstum des Dienstes aussieht. Es macht kaum Sinn, eine Lösung anzustreben, die in ein paar Monaten überfordert sein wird.

Antwort3

Welche Art von Parametern werden über die GET-Anfrage übergeben? Muss dies in Echtzeit in CSV/Datenbank erfolgen? Oder glauben Sie, Sie könnten eine Dummy-HTML-Datei (oder PHP) erstellen und einfach die Webprotokolle verwenden, um sie zu analysieren und später als Batch-Job in eine CSV-Datei zu übertragen? (Okay, das klingt kompliziert, ist aber leicht zu handhaben) …

Antwort4

Ich würde mir die Server 2008 Web Edition ansehen und ADO.net zum Schreiben in die CSV-Datei verwenden. Sie sollten kein Durchsatzproblem haben, da ado.net die Schreibvorgänge puffert.

verwandte Informationen