Rüdiger1: AJAX Polling / Server performance

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

  1. 你好 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.

    再见,
     克里斯蒂安

    --
    <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
    <html><head>
    <title>500 Internal Server Error</title>
    </head><body>
    <h1>Internal Server Error</h1>
    <p>The server encountered an internal error or
    misconfiguration and was unable to complete
    your request.</p>
    <p>Please contact the server administrator,
     ck1@wwwtech.de and inform them of the time the error occurred,
    and anything you might have done that may have
    caused the error.</p>
    <p>More information about this error may be available
    in the server error log.</p>
    <hr>
    <address>Apache Server at www.defunced.de Port 80</address>
    </body></html>
    http://wwwtech.de/
    1. 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

      1. 你好 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.

        再见,
         克里斯蒂安

        --
        Bauer sucht Frau! | Ich bin ja eigentlich kein Serien-Junkie…
        73.255437% der Statistiken spielen eine Genauigkeit vor, die durch die angewandte Methode nicht gerechtfertigt wird.
        http://wwwtech.de/
        1. 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??

          1. 你好 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.

            再见,
             克里斯蒂安

            --
            Bauer sucht Frau! | Ich bin ja eigentlich kein Serien-Junkie…
            To define recursion, we must first define recursion.
            http://wwwtech.de/
            1. 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.

              1. 你好 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.

                再见,
                 克里斯蒂安

                --
                Bauer sucht Frau! | Ich bin ja eigentlich kein Serien-Junkie…
                Swen Wacker: Denn wer 'ne Blacklist hat, muss halt daran denken, dass er manches nicht sieht... und vor dem posten die Realitaet einschalten
                http://wwwtech.de/
      2. 你好 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.

        再见,
         克里斯蒂安

        --
        Bauer sucht Frau! | Ich bin ja eigentlich kein Serien-Junkie…
        Sich erinnern bedeutet, aus einer Erfahrung nicht ausreichend gelernt zu haben.
        http://wwwtech.de/
        1. 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

          1. 你好 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.

            再见,
             克里斯蒂安

            --
            Bauer sucht Frau! | Ich bin ja eigentlich kein Serien-Junkie…
            Wenn auf Erden alle das Schoene als schoen erkennen, so ist dadurch schon das Haessliche bestimmt.
            http://wwwtech.de/
            1. 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

              1. 你好 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.

                再见,
                 克里斯蒂安

                --
                Bauer sucht Frau! | Ich bin ja eigentlich kein Serien-Junkie…
                Nur die Weisesten und die Dümmsten können sich nicht ändern.
                http://wwwtech.de/