Wie viel hält ein Server aus?
Lutz
- webserver
1 dedlfix0 Multi0 Lutz0 Alexander (HH)0 Multi0 Tom
3 Engelein0 Alexander (HH)- menschelei
0 Multi
Hallo Forum,
ich bin gerade kurz vor dem Launch eines kleinen Services.
Dieser Service läuft auf einem Server mit einem Core2 Duo mit 2 Ghz, 4,5 GB RAM und einer 200-GB-Standard-7200rpm-IDE-Platte.
Pro Seitenaufruf werden ca. 1-2 kurze Datenbankabfragen (SELECT * FROM tabelle WHERE feld = 'value'), bei der im Schnitt ca. 1-2kb übertragen werden, abgesetzt.
Die Datenbank (MySQL) enthält im Endstadium ca. 1 GB Daten, momentan sind es noch deutlich unter 10 MB.
Datenbankserver usw. läuft alles auf der Mühle, das Ganze läuft über PHP als Modul. Alles Andere ist Standardkonfiguration (Apache usw.).
Auf dem Server läuft außer diesem Service nichts.
Nun ist das Problem, dass ich auch noch so ein Suchergebnisvorschlagsscript per AJAX mit eingebaut habe (ähnlich Google Suggest) und dieses bei jedem OnKeyUp in der Hauptsuche eine Anfrage sendet.
Sprich: Ca. 5-10 Anfragen pro Suche + Aufrufen der Startseite + Anzeigen der Suchergebnisse.
Also zusammen im Schnitt vielleicht 10 Aufrufe pro Besucher.
Und jetzt frage ich mich natürlich: Wieviele Anfragen hält so ein Server zu Spitzenzeiten aus?
Dass ich das wohl in naher Zukunft clustern muss oder zumindest erstmal den Datenbankserver auslagern und/oder einen oder mehrere extra Server für die Suggest-Anfragen hinstellen muss, um die Last zu verteilen, ist mir bei den erwarteten Besucherzahlen klar.
Jetzt am Anfang ist das zwar mal noch kein Problem, aber ich würde gerne wissen, wieviele Anfragen der so im Schnitt packen würde.
Mir ist klar, dass man sowas nicht wirklich sagen kann, aber eben so ganz ungefähr.
Was würdet ihr so circa orakeln?
Danke schonmal für Einschätzungen :-)
Lutz.
echo $begrüßung;
[...] ich würde gerne wissen, wieviele Anfragen der so im Schnitt packen würde.
Was würdet ihr so circa orakeln?
Orakeln würde ich nicht, aber überwachen und dabei messen. Beispielsweise mit Munin.
echo "$verabschiedung $name";
Und jetzt frage ich mich natürlich: Wieviele Anfragen hält so ein Server zu Spitzenzeiten aus?
Wenn es nur Anfragen sind, zigtausende. Welche Ressourcen allerdings die laufende Software benötigt, kann hier keiner wissen.
Zuerst musst du dir klar werden, ei8n Webserver wird nicht durch eine Anfrage belastet sondern durch die Verarbeitung von Daten, Datenbankabfragen, Datenerzeugung und die Auslieferung an den Browser.
Und dass eine statische HTML-Seite weniger Ressourcen verbraucht aus eine komplexe Tabelle, deren Daten aus einer Datenbank kommen und noch zusätzlich berechnet werden müssen, sollte ja eh klar sein.
Hallo,
Wenn es nur Anfragen sind, zigtausende. Welche Ressourcen allerdings die laufende Software benötigt, kann hier keiner wissen.
Zuerst musst du dir klar werden, ei8n Webserver wird nicht durch eine Anfrage belastet sondern durch die Verarbeitung von Daten, Datenbankabfragen, Datenerzeugung und die Auslieferung an den Browser.
Und dass eine statische HTML-Seite weniger Ressourcen verbraucht aus eine komplexe Tabelle, deren Daten aus einer Datenbank kommen und noch zusätzlich berechnet werden müssen, sollte ja eh klar sein.
Das ist mir schon klar ;-)
Deswegen habe ich auch Details zur Datenbankabfrage usw. mit angegeben - um zumindest einen ganz groben Schätzwert zu bekommen.
Womit ich meinte "ca. 300/Sekunde" oder "ca. 1200/Sekunde" etc. - ganz genau brauch ichs nicht.
Mag keiner orakeln ;) ?
Gruß, Lutz.
Moin Moin!
Womit ich meinte "ca. 300/Sekunde" oder "ca. 1200/Sekunde" etc. - ganz genau brauch ichs nicht.
Ohne genaue Kenntnisse der Daten, der Abfragen, und der Datenbankstrukturen kann man genauso gut einfach fünf Ziffern und eine Einheit auswürfeln.
Benutzt Du prepared statements? Kann das RDBMS damit umgehen? Benutzt Du Indexe? Auf welche Spalten? Welcher Typ? Welche Storage-Engine benutzt Du? Arbeiten RDBMS und Webserver auf der selben Maschine oder sind sie über ein Netzwerk verbunden? Wie schnell ist das RDBMS-Netzwerk? Ist es vom Webserver-Netzwerk getrennt? Welche OS-Version läuft? Wie ist das OS getunt? Wie ist das RDBMS getunt?
Das sind nur ein paar Fragen, die Du beantworten müßtest, um eine sinnvoll schätzen zu können.
Alexander
Deswegen habe ich auch Details zur Datenbankabfrage usw. mit angegeben - um zumindest einen ganz groben Schätzwert zu bekommen.
Bei diesen genauen Angaben kann ich dir die Zeit sehr genau sagen. Zwischen 10ms und 30 Sekunden (wenn ich davon ausgehe, dass PHP dann abbricht). Und das ist nicht nur von den Daten abhängig sondern von der Art der Abfrage (also dem kompletten Query), den Daten selbst, dem Datenbanksystem (es gibt mehr als "ein" MySQL), der Programmiersprache (es gibt auch mehr als nur "ein" PHP und es gibt mehrere Möglichkeiten der Datenbankabfrage), wird die Datenbankabfrage gecached oder kommt sie immer wieder von der Platte .....
Das sind alles Variablen, die die Zeit beeinflussen (und da hab ich nur _einige_ aufgezählt, es gibt viel mehr). Da wirst du wohl Lasttests machen müssen um echte Werte zu erhalten. Phpunit sollte dir da gute Dienste leisten.
Und so nebenbei, du erwähnst auch nicht das Betriebssystem, was aber durchaus relevant ist. Ein 32-Bit System ignoriert z.B. alles über 3.5GB RAM.
Hello Lutz,
Du kannst Dir ja mal zum Vergleich das popelige Listenausgabescript ansehen.
http://selfhtml.bitworks.de/forum/get_thread_titles_04.php
Das bricht für die 1.000 Zeilen schon über 1.2 Sekunden.
Ich führe das im wesentlichen auf die Funktion fgetcsv() und die Ausgabe auf die Stgandardausgabe zurück.
Wenn Du also Hochrechnungen anstellen willst, musst Du jede einzelne Funktion betrachten und Statistik betreiben.
Ein harzliches Glückauf
Tom vom Berg
Nun ist das Problem, dass ich auch noch so ein Suchergebnisvorschlagsscript per AJAX mit eingebaut habe (ähnlich Google Suggest) und dieses bei jedem OnKeyUp in der Hauptsuche eine Anfrage sendet.
Sprich: Ca. 5-10 Anfragen pro Suche
Es macht wenig Sinn, einem geübten Benutzer _während_ des Tippens Vorschläge zu machen, denn er ist mit dem Tippen von kurzen Wörten schneller fertig als dass er das Wort aus einer Liste raussucht, ganz zu schweigen davon, dass nicht wenige Leute beim Tippen auf die Tastatur gucken und dementsprechend die ganzen Vorschläge gar nicht zur Kenntnis nehmen können.
Sorge dafür, dass erst nach einer kurzen Tippause (ein, höchstens zwei Sekunden) ein Vorschlag ausgewürfelt wird, indem du bei jedem Tastendruck die Vorschlagsfunktion nicht direkt, sondern via setTimeout() aufrufst und zuvor mit clearTimeout() die vorige Eieruhr abbrichst.
Du verringerst damit die Last um ein Mehrfaches (und lenkst den Benutzer außerdem nicht ab).
Moin Moin!
Das erste Bild, das mir bei diesem Thema durch den Kopf spukte.
Alexander
Das erste Bild, das mir bei diesem Thema durch den Kopf spukte.
Und ich dachte immer, ein NT-Rechner kann gar nicht stabil sein. Ist wohl doch nur eine Frage des Einsatzzweckes ~g~