AJAX Polling / Server performance
Rüdiger1
- webserver
Hallo,
für eine Webanwendung benötigen wir eine Möglichkeit für den Browser, ständig Informationen vom Server zu empfangen. Dass dies normalerweise nicht möglich ist, dürfte klar sein ;)
Deshalb haben wir an AJAX-Polling gedacht. Nur frage ich mich, welche Performancelast dies auf dem Server erzeugen würde. Gibt es dazu irgendwelche Benchmarks?
Wenn von jedem Client alle 5 Sekunden einmalig gepollt wird, die Response maximal 1 Kilobyte groß ist, und der Server ein handelsüblicher dedizierter Server von Hosteurope / 1und1 / Strato ist, wie viele Clients können wohl gleichzeitig mittels AJAX-Polling versorgt werden?
Klar kann dies nicht genau gesagt werden, da die Performance von vielen Dingen beeinflusst wird. Aber ein Durchschnitt würde mich schon interessieren.
Gebremst wird die Sache leider auch noch dadurch, dass wir bei jedem Polling ein Datenbank-Query ausführen müssen.
Gab es dazu irgendwelche einsehbare Tests, mittels denen man mal eine Vorstellung in Zahlen erhält, wie viele Clients denn im Schnitt so versorgt werden können?
Oder hat hier jmd. schon Erfahrungen gemacht, von denen er berichten kann?
Dann gibt es ja diese "COMET"-Alternative, bei der eine Browser-Verbindung dauerhaft offengehalten wird, und der Server somit Ereignisse an den Browser weitergeben kann. Ich kann mir aber kaum vorstellen, dass dem Server 1000 offene HTTP Verbindungen lieber sind als 1000 pollende Clients. Oder irre ich mich?
Wer hat mit dem Thema Erfahrung, und kann zur Performance etwas aussagen?
Über Antworten würde ich mich sehr freuen.
Danke
Grüße
Rüdiger1
你好 Rüdiger1,
Deshalb haben wir an AJAX-Polling gedacht. Nur frage ich mich, welche Performancelast dies auf dem Server erzeugen würde. Gibt es dazu irgendwelche Benchmarks?
Würde mich wundern. Und wenn es solche Benchmarks gibt, dürften sie nicht sonderlich aussagekräftig sein.
Wenn von jedem Client alle 5 Sekunden einmalig gepollt wird, die Response maximal 1 Kilobyte groß ist, und der Server ein handelsüblicher dedizierter Server von Hosteurope / 1und1 / Strato ist, wie viele Clients können wohl gleichzeitig mittels AJAX-Polling versorgt werden?
Die Frage ist IMHO eher: wieviele User erwartest du denn, die gleichzeitig diese Seite besuchen? Normalerweise sollten die zu erwartenden Nutzer-Zahlen ja nicht sonderlich hoch sein, wenn du "nur" einen Strato-Server nutzt.
Meine Erfahrung zeigt: etwa 100-200 Nutzer verträgt so ein Ding recht gut, solange nicht bei einem Request massive Operationen ausgeführt werden müssen.
Simulieren kannst du das allerdings ganz gut mit dem Tool "ab". ab wird beim Apache beigeliefert und ist ein Benchmark-Tool für den Apachen (Apache Benchmark). Lässt sich prima missbrauchen um zu testen, wieviele Requests der Server in etwa (sic!) verkraftet.
再见,
克里斯蒂安
Hi,
danke für deine Antwort. Also von einem dedizierten Server hätte ich mir mehr als 100-200 Benutzer erhofft.
Es gibt Firmen die behaupten, mit der Alternativtechnologie "Comet" auf einem handelsüblichen dedizierten Server 10.000 Benutzer verkraften zu können, und dabei werden HTTP Verbindungen zu den Clients offengehalten.
Ich ging schon davon aus, dass ein Server > 1000 pollende Benutzer verkraftet, aber wen dem nicht so ist, müssen wir uns wohl mit "Comet" auseinandersetzen.
Danke
Rüdiger1
你好 Rüdiger1,
danke für deine Antwort. Also von einem dedizierten Server hätte ich mir mehr als 100-200 Benutzer erhofft.
Hehe, wenn man wenig bezahlt kriegt man auch wenig. Aber letztlich gilt: ausprobieren! ab ist ein nettes Tool.
Es gibt Firmen die behaupten, mit der Alternativtechnologie "Comet" auf einem handelsüblichen dedizierten Server 10.000 Benutzer verkraften zu können, und dabei werden HTTP Verbindungen zu den Clients offengehalten.
Das halte ich für Augenwischerei.
再见,
克里斯蒂安
Und was ist deiner Meinung nach viel?
Es kann ja wohl nicht jede Webanwendung ab 1000 Mann ein ganzes Cluster benötigen. Da müsste es doch ein 230-Euro-Server mit 4 GB RAM, 800 GB Festplatte, 2 64-Bit Prozessoren auch tun, oder habe ich dermaßen verblendete Vorstellungen??
你好 Rüdiger1,
Es kann ja wohl nicht jede Webanwendung ab 1000 Mann ein ganzes Cluster benötigen. Da müsste es doch ein 230-Euro-Server mit 4 GB RAM, 800 GB Festplatte, 2 64-Bit Prozessoren auch tun, oder habe ich dermaßen verblendete Vorstellungen??
Das ist aber schon kein "handelsüblicher 1&1-Server" mehr *g* Die Masse mietet was für 30, 40 Ocken. Damit sieht das ganze schon anders aus.
再见,
克里斯蒂安
Deshalb rede ich auch die ganze Zeit von einem dedizierten Server. ;) Eigene Server kriegt man ab 30 Euro meines Wissens nach nicht.
Also brauch ich nicht mehr von 100-200 Benutzer ausgehen? ;)
Gibt es ein solches Performance-Test-Werkzeug wie du es vorschlägst auch für den IIS? Wir arbeiten mit ASP.NET.
你好 Rüdiger1,
Deshalb rede ich auch die ganze Zeit von einem dedizierten Server. ;) Eigene Server kriegt man ab 30 Euro meines Wissens nach nicht.
Doch, allerdings deutlich kleiner dimensioniert.
Also brauch ich nicht mehr von 100-200 Benutzer ausgehen? ;)
Nein, da würde ich von wesentlich mehr ausgehen.
Gibt es ein solches Performance-Test-Werkzeug wie du es vorschlägst auch für den IIS? Wir arbeiten mit ASP.NET.
Du kannst ab auf jeden Server loslassen, egal ob IIS oder sonst irgendwas. Gibt es sogar für Windows, müsste in den Apache-Windows-Paketen enthalten sein.
再见,
克里斯蒂安
你好 Rüdiger1,
Es gibt Firmen die behaupten, mit der Alternativtechnologie "Comet" auf einem handelsüblichen dedizierten Server 10.000 Benutzer verkraften zu können, und dabei werden HTTP Verbindungen zu den Clients offengehalten.
Halte ich immer noch für Augenwischerei, aber man kann das natürlich deutlich verbessern, wenn man z. B. kein Script, sondern ein Apache-Modul für die Abarbeitung der Requests benutzt, massiv auf Caching setzt und solche Sachen.
再见,
克里斯蒂安
Hallo Christian,
Halte ich immer noch für Augenwischerei, aber man kann das natürlich deutlich verbessern, wenn man z. B. kein Script, sondern ein Apache-Modul für die Abarbeitung der Requests benutzt, massiv auf Caching setzt und solche Sachen.
So wie ich es verstehe, werden bei „richtigen“ Comet/Bayeaux-Anwendungen eigene Server wie Jetty, Perlbal/cometd oder twisted-comet verwendet. Diese funkionieren dann nicht mehr nach dem Request/Response Modell sondern biegen sich dann mit dem Bayeaux-Protokoll HTTP so zurecht, das es nur noch ein länger laufender Datenstrom ist. Effektiv ähnelt Kommunikation über Comet/Bayeaux dann mehr dem PubSub-Modell - nur dass es über HTTP getunnelt wird. Also eine ganz andere Architektur. Ohne praktische Erfahrungen aus dem Bauch raus finde ich 10000 gleichzeitige Verbindungen aber auch etwas ... überhöht.
Tim
你好 Tim,
ich kenne das Prinzip, das dahinter steckt, jedoch kann ich mir nicht vorstellen, dass 10000 Verbindungen möglich sind auf "normaler" Hardware. Alleine, dass 10000 httpd-Prozesse gestartet sind, dürfte den Server ziemlich auslasten, bzw. 10000 Threads oder halt x Prozesse mit 10000/x Threads...
IMHO einfach Augenwischerei.
再见,
克里斯蒂安
Hallo,
Alleine, dass 10000 httpd-Prozesse gestartet sind, dürfte den Server ziemlich auslasten, bzw. 10000 Threads oder halt x Prozesse mit 10000/x Threads...
Das ein-Prozesse-pro-Verbindungs-Modell ist ja nicht die einzige Variante, einen Webserver zu erstellen, siehe z.b. lighttpd und Verwandte. Hier scheinen sie übrigens schon überraschende 20000 gleichzeitige Verbindungen mit Jetty geschafft zu haben bis der Server in die Knie ging.
Tim
你好 Tim,
Das ein-Prozesse-pro-Verbindungs-Modell ist ja nicht die einzige Variante, einen Webserver zu erstellen, siehe z.b. lighttpd und Verwandte.
Richtig, deshalb schrub ich ja auch die Sache mit den Threads ;)
Lighttpd ist nochmal was anderes, die arbeiten mit Multiplexing, was seine ganz eigenen Nachteile haben kann.
Hier scheinen sie übrigens schon überraschende 20000 gleichzeitige Verbindungen mit Jetty geschafft zu haben bis der Server in die Knie ging.
Danke, schau ich mir nachher mal an, im Moment bin ich gerade dabei, kde4 zu testen.
再见,
克里斯蒂安