2009-03-11 11 views
5

In einem derzeit bereitgestellten Webserver, was sind die typischen Grenzen für die Leistung?Was sind die theoretischen Leistungsgrenzen für Webserver?

Ich glaube, eine sinnvolle Antwort wäre eine von 100, 1.000, 10.000, 100.000 oder 1.000.000 Anfragen/Sekunde, aber das ist heute wahr? Was war vor 5 Jahren wahr? Was können wir in 5 Jahren erwarten? (Wie wirken sich Trends bei Bandbreite, Festplattenleistung, CPU-Leistung usw. auf die Antwort aus?)

Wenn es sich um ein wesentliches handelt, sollte die Tatsache berücksichtigt werden, dass HTTP über TCP das Zugriffsprotokoll ist. OS, Serversprache und Dateisystemeffekte sollten als best-of-breed angesehen werden.

Angenommen, die Festplatte enthält viele kleine eindeutige Dateien, die statisch bereitgestellt werden. Ich beabsichtige, den Effekt von Speichercaches zu beseitigen, und diese CPU-Zeit wird hauptsächlich verwendet, um die Netzwerk-/Protokollinformationen zusammenzusetzen. Diese Annahmen sollen die Antwort auf "Worst-Case" -Schätzungen ausrichten, bei denen eine Anforderung eine gewisse Bandbreite, einige CPU-Zeit und einen Plattenzugriff erfordert.

Ich bin nur auf der Suche nach etwas genau auf eine Größenordnung oder so.

+2

Normalerweise ist der Speicher zuerst erschöpft. Dann reparieren Sie Ihre Anwendung. Dann ist die CPU erschöpft. Dann reparieren Sie Ihre Anwendung. Dann ist die Netzwerkbandbreite erschöpft. Dann reparieren Sie Ihre Anwendung. Dann ist die Erinnerung erschöpft ... –

+1

Threading-Server, der hauptsächlich statische Dateien versorgt, würde den RAM nicht erschöpfen. – vartec

+0

Frage ergibt keinen Sinn. Die theoretischen Leistungsgrenzen werden mit RAM-Caches, TCP-Offloading usw. getroffen. Das Setzen künstlicher Beschränkungen gibt Ihnen ein ebenso künstliches Leistungslimit. Und in der Praxis verwendet jeder zumindest etwas RAM-Caching, wenn auch nur in den Platten selbst. – MSalters

Antwort

14

Gelesen http://www.kegel.com/c10k.html. Sie könnten auch StackOverflow questions tagged 'c10k' lesen. C10K steht für 10'000 gleichzeitige Kunden.

Lange Rede kurzer Sinn - prinzipiell ist das Limit weder Bandbreite noch CPU. Es ist Nebenläufigkeit.

+0

Ich nehme an, C10K bedeutet "zehntausend Kunden", es ist nicht klar von der Kegel-Seite. Ich dachte zuerst, dass es wie im Muster von i18n/L10n –

+0

Nun, erste Zeile von Kegel's Seite: "Es ist Zeit für Webserver zehntausend Clients gleichzeitig zu behandeln, meinst du nicht?". – vartec

1

Ich denke, es gibt zu viele Variablen hier, um Ihre Frage zu beantworten.

Welcher Prozessor, welche Geschwindigkeit, welcher Cache, welcher Chipsatz, welche Plattenschnittstelle, welche Spindeldrehzahl, welche Netzwerkkarte, wie konfiguriert, die Liste ist riesig. Ich denke du musst das Problem von der anderen Seite angehen ...

"Das ist was ich tun und erreichen will, was muss ich tun?"

+0

Noch wichtiger ist, dass Browsergeschwindigkeit und Cache-Antwort genauso wichtig sind wie alles andere. –

0

Dies hängt davon ab, was ist Ihr CPU-Kern Welche Geschwindigkeit sind Ihre Festplatten Was ist ein 'fat' 'Medium' Größe Hosting-Unternehmen Rohr. Was ist der Webserver?

Die Frage ist zu allgemein

Deploy Sie Server-Test-Tools wie es http://jmeter.apache.org/ und sehen Sie mit, wie Sie auf bekommen.

0

OS, Serversprache und Dateisystemeffekte sind hier die Variablen. Wenn Sie sie herausnehmen, bleibt Ihnen ein TCP-Socket ohne Overhead.

An diesem Punkt ist es nicht wirklich eine Frage der Leistung des Servers, sondern des Netzwerks. Bei einem TCP-Socket ohne Overhead liegt das Limit, das Sie treffen, höchstwahrscheinlich an der Firewall, oder Ihr Netzwerk wechselt mit der Anzahl der Verbindungen, die gleichzeitig verarbeitet werden können.

+0

Wenn ich sage, OS, Sprache und Dateisystemeffekte zu beseitigen, ich meine, sie zu normalisieren, oder für jeden "besten verfügbaren" anzunehmen. –

2

Ich denke, es hängt wirklich davon ab, was Sie servieren.

Wenn Sie Webanwendungen bedienen, die HTML dynamisch darstellen, ist die CPU am meisten konsumiert.

Wenn Sie eine relativ kleine Anzahl an statischen Objekten viele, viele Male serviert, werden Sie wahrscheinlich in Probleme mit der Bandbreite führen (da die statischen Dateien selbst werden sich wohl in Erinnerung finden)

Wenn Sie‘ Wenn Sie eine große Anzahl statischer Elemente bereitstellen, können Sie zuerst auf die Datenträgerbeschränkungen stoßen (Suchen und Lesen von Dateien)

0

In jeder Webanwendung, die eine Datenbank verwendet, eröffnen Sie auch eine ganze Reihe neuer Optimierungsanforderungen.

Indizes Abfrageoptimierung usw.

Für statische Dateien ist Ihre Anwendungscache sie in Erinnerung?

etc, etc, etc

2

Wenn Sie nicht in der Lage sind, Ihre Dateien im Speicher zwischengespeichert wird, dann Platte Suchzeiten werden der limitierende Faktor und beschränken Sie Ihre Leistung auf weniger als 1000 Anfragen/Sekunde wahrscheinlich. Dies könnte sich verbessern, wenn Solid-State-Festplatten verwendet werden.

4

Vor sechs Jahren sah ich eine 8-proc Windows Server 2003-Box 100.000 Anfragen pro Sekunde für statischen Inhalt. Diese Box hatte 8 Gigabit-Ethernet-Karten, jeweils in einem separaten Subnetz. Der limitierende Faktor war die Netzwerkbandbreite. Es gibt keine Möglichkeit, so viel Inhalt über das Internet zu liefern, selbst mit einer wirklich enormen Pipe.

In der Praxis, für rein statischen Inhalt, kann sogar eine bescheidene Box eine Netzwerkverbindung sättigen.

Für dynamische Inhalte gibt es keine einfache Antwort. Es könnte CPU-Auslastung, Festplatten-I/O, Back-End-Datenbank-Latenz, nicht genug Worker-Threads, zu viel Kontextwechsel, ...

Sie müssen Ihre Anwendung messen, um herauszufinden, wo Ihre Engpässe liegen. Es könnte im Rahmen sein, könnte es in Ihrer Anwendungslogik sein. Es ändert sich wahrscheinlich, wenn sich Ihre Arbeitslast ändert.

2

100, 1.000, 10.000, 100.000 oder 1.000.000 Anfragen/Sekunde, aber was ist heute wahr?

Dieser Test auf einem bescheidenen i3 Laptop getan wurde, aber es überprüft Lack, ATS (Apache Traffic-Server), Nginx, Lighttpd usw.

http://nbonvin.wordpress.com/2011/03/24/serving-small-static-files-which-server-to-use/

Der interessante Punkt ist, dass ein mit High-End-8-Core-Server gibt einen sehr wenig Auftrieb für die meisten von ihnen (Apache, Cherokee, Litespeed, Lighttpd, Nginx, G-WAN):

http://www.rootusers.com/web-server-performance-benchmark/

Da die Tests auf localhost durchgeführt wurden, um zu vermeiden, dass das Netzwerk als Engpass auftritt, liegt das Problem im Kernel, der nicht skaliert wird - es sei denn, Sie haben tune its options.

Also, um Ihre Frage zu beantworten, ist die Fortschrittsspanne in der Art, wie Server IO verarbeiten. Sie müssen bessere Datenstrukturen verwenden (wartefrei).

Verwandte Themen