NginX Load Balancer Verstädnisfrage

  • Hallo zusammen,

    ich habe mich in letzter Zeit ein wenig mit dem Thema Clustering des Pi's auseinander gesetzt. Musste leider feststellen, dass vieles nicht umsetzbar ist, da vieles Single Core Thread Anwendungen sind.

    Nun habe ich mir das Load Balancing angeschaut. Soll laut NginX von hause auch direkt unterstützt werden. Mit fehlt aber noch ein wenig das Verständnis der Funktionsweise. Die Einrichtung selbst ist ja recht simpel.

    Die Frage die ich mir stelle: Wie wird der Performancegewinn erreicht? Kann man hier von Cluster im Sinne sprechen, dass mehrere Pi's eine Webanfrage beantworten und verteilen, oder wird der der Perfomancegewinn dadurch erreicht, dass die User lediglich auf mehrere Pi's umgeleitet werden, je nachdem wie Sie ausgelastet sind?

    Zweites würde natürlich bedeuten, dass es nach wie vor von der Performance her keinen Sinn macht den RasPi als vollwertigen Webserver einzusetzen.

    Hat jemand schon Erfahrungen damit gemacht und kann vielleicht berichten?

    Lieben Gruß Kokiri


  • Zweites würde natürlich bedeuten, dass es nach wie vor von der Performance her keinen Sinn macht den RasPi als vollwertigen Webserver einzusetzen.

    Ich habe hier keine Erfahrungen aber diese Schlußfolgerung kann ich nicht ganz nachvollziehen: Für einen Webserver, der immer nur eine Anfrage gleichzeitig bearbeiten muß, ist ein Pi sicherlich aureichend. Sobald mehrere Anfragen gleichzeitig zu beantworten sind, hast Du durch die Verteilung auf mehrere Pis doch relativ offensichtlich eine Entlastung des einzelnen und damit einen Performancevorteil. Oder hab ich da was falsch verstanden?

  • Hey Manul,

    generell würde ich dir recht geben. Angenommen der Pi würde 10 Anfragen locker schaffen, so könnte ich mit 4 Pi's immer noch 40 Anfragen abarbeiten lassen. Dann wäre alles super!


    Der Pi schafft es aber in meinem Blog nicht mal eine Anfrage adäquat zu beantworten. Bis der komplette Code geladen ist vergehen insgesamt 21 Sekunden, was aber nicht am Upload der Leitung liegt.

    Ich hab jetzt durch etwas intensiveres lesen in der NginX Doc heraus gefunden, dass NginX standardmäßig mit einen round robin Balance Loader läuft. Das bedeutet genau, was ich mir bereits gedacht habe. Die zu verbindenden Clients werden lediglich auf die Pi's verteilt. Wenn 4 Client's auf 4 Pi's verteilt werden, ist es zwar ein Gewinn in der gesamten Performance aber letztendlich wird trotzdem jeder Client auf jeden Pi 21 Sekunden warten müssen, bis der vollständige Code geladen ist.

    Ich bin schon seit einigen Wochen nach einer adäquaten Lösung am suchen. Langsam komme ich aber immer mehr zum Entschluss, dass ich mir einen Mini Server bauen muss. Wahrscheinlich mit diesem Board. https://www.amazon.de/gp/product/B01MQ0EUBS/ref=as_li_tl?ie=UTF8&creativeASIN=B01MQ0EUBS&linkCode=as2&tag=psblog-21 [Anzeige]

    Mir sind die Flaschenhälse des Pi's bekannt und ich hätte keine weitere Möglichkeit außer einem Cluster / Load Balanceing gesehen.
    Vielleicht hat aber noch jemand die rettende Lösung, eine Webseite performant auf dem Pi zum Laufen zu bringen.

    Meine Hoffnung sinkt aber.


    Gruß Kokiri

    Einmal editiert, zuletzt von Kokiri (5. April 2017 um 14:20)

  • Alternativ wäre der Einsatz eines kleinen NUC, der braucht sehr wenig Strom und schafft deinen Blog locker...
    Wäre auch gleich die Basis für weitere Dinge...

    nur mal so...

    (Bei dem Board kommen noch Gehäuse, Netzteil dazu, falls jemand einen Preisvergleich anstrengt...)
    Die "Größe" eines NUC ist ebenfalls recht gering... meiner hängt hinter dem Monitor per VESA - Halterung...


  • Alternativ wäre der Einsatz eines kleinen NUC, der braucht sehr wenig Strom und schafft deinen Blog locker...

    Welche Hardware hat deiner denn verbaut?

  • Hallo,

    wenn die Beantwortung eines Requests 21 Sekunden dauert macht es IMHO mehr Sinn zu schauen, was so lange dauert. Das ist nämliche irre lang. Selbst, wenn du mit mehr Rechenpower auf 10 Sekunden oder 5 Sekunden kommst, ist das ziemlich lang. Zumindest, wenn auf dem Server "nur" ein Blog läuft und keine aufwendige Berechnung etc. läuft.

    Gruß, noisefloor

  • Daran angelegt ist natürlich die Frage, was letztendlich jeder für Ansprüche hat. Mit Sicherheit würde ein Blog mit reinem Text und ohne Bildern schneller geladen werden. In meinem Blog werden halt einige Bilder mit geladen und eine ganze Palette CSS sowie JavaScripts, meiner Meinung nach nichts "übergroßes" für einen kleinen Blog. Wenn ich dann den Kompromiss machen muss den Blog zu "entschlacken" um eine Ladezeit von unter 5 Sekunden zu bekommen, ist es zumindest für mich persönlich keine Alternative. Dann muss ich einfach die Hand auf's Herz legen und einsehen, dass der Pi für meinen Einsatzzweck ungeeignet ist. Das exakt der gleiche Blog bei einem Webhoster nur noch 1,9 Sekunden Ladezeit anstatt 21 Sekunden braucht unterstreicht meine Aussage, dass nicht alleine der Blog schuld an den Ladezeiten sein kann, sondern die Leistung natürlich einen großen Teil dazu beiträgt. Meiner Meinung nach den wohl sogar Wesentlichen.

    Ich habe momentan keine Vergleiche zur Hand, denke aber nicht, dass andere Blogs auf dem Pi wesentlich performanter laufen, lasse mich aber natürlich gerne vom Gegenteil überzeugen.
    Wäre aber doch interessant von jemandem zu lesen, der den Pi wirklich dauerhaft als funktionierenden Webserver einsetzt. Würde mir nur zu gerne dort den Seiteninhalt und die Ladezeiten anschauen.
    Vielleicht mache ich ja wirklich irgendwo einen Fehler, der mir bisher nicht aufgefallen ist, dass möchte ich nicht ausschließen.

    Gruß Kokiri

    Einmal editiert, zuletzt von Kokiri (5. April 2017 um 17:40)

  • Zitat

    Bis der komplette Code geladen ist vergehen insgesamt 21 Sekunden

    Hier wäre natürlich interessant zu wissen, welchen Umfang der Code der Startseite hat.

    Ich betreibe den Raspi 3 / NGINX / PHP7 u. a. als Kalenderserver mit Webclient. Letzterer ist 3,88 MB groß und wird in 2,13 sec. vom Browser geladen. Gemessen mit Firefox (Extras => Web-Entwickler => Netzwerkanalyse, vorher Caches löschen!) im Heimnetz, alle Geräte über WiFi verbunden.

    D.h. das EIN Raspi haut den Client mit MINDESTENS 18Mbit/s raus.

    Welchen Speed erwartest Du denn?

    Gruß MacNobi

  • @MacNoobi,

    hier mal ein Screenshoot von dem, was so geladen wird.

    http://abload.de/image.php?img=…u2017-kvuay.png

    Daran gemessen, dass ich beim Provider 1,92 Sekunden brauche wäre für mich eine Geschwindigkeit bis maximal 5 - 6 Sekunden in Ordnung. Diese Werte konnte ich aber leider nie erreichen. Du kannst dir das ganze aber auch gerne unter http://www.kohta-pi.de anschauen.

    Gruß Kokiri

    Einmal editiert, zuletzt von Kokiri (5. April 2017 um 20:23)

  • Hallo,

    Zitat

    Ich habe momentan keine Vergleiche zur Hand, denke aber nicht, dass andere Blogs auf dem Pi wesentlich performanter laufen,


    Grundsätzlich solltest du mal schauen, ob dein "Problem" CPU-bound oder IO-bound ist. Spricht: ist der IO schnell und die CPU rödelt sich tot oder warte die CPU nur auf Daten vom Laufwerk?

    Danach richtet sich letztendlich auch die Tuning-Maßnahme bzw. es spielt bei der Wahl möglicher neuer Hardware eine Rolle. Wenn der IO dauert, dann hilft schon mal eine schnellere Platte (z.B. SSD) mit schneller Anbindung an die CPU.

    Gruß, noisefloor


  • ich habe die Startseite mit knapp 1,5 MB in 4,2sec. geladen.

    Die liegt ja auch gerade bei Strato :)

    Du kannst ja mal zum Vergleich die Seite auf meinem Pi aufrufen.
    http://kohtapi.ddns.net

    Interessanterweise lädt er die Seite auf dem Pi jetzt in 7,68 Sekunden laut Firefox Netzwerkanalyse.
    Laut dem Test von https://www.pagespeed.de/ aber in 14,44 Sekunden :s

    Das ist natürlich sehr irreführend von der Seite.
    Angenommen die 7,68 Sekunden wären der tatsächliche Wert, würde mit etwas Optimierung vielleicht doch noch etwas machbar sein.
    Vielleicht die Inhalte komprimiert übertragen.

    @noisefloor
    Beim Laden ist maximal ein Kern bei ca 95,5 % Auslastung.

    Gruß Kokiri

    Einmal editiert, zuletzt von Kokiri (5. April 2017 um 21:46)

  • Die Seite auf dem Pi ist "gefühlt" zu langsam!

    Hast du PHP7.0 (brachte bei mir die doppelte Geschwindigkeit) und in NGINX Gzip aktiviert?

    Einmal editiert, zuletzt von MacNobi (5. April 2017 um 21:50)

  • Gerade mal probiert (von deinem PI): (25s Load) 39 sec(Finish), ohne Cache, ca. 1,5MB Pagesize...

    Die guten Zeiten, die du hast, liegen u.U. an deinem eingeschaltetem Browesercache....)

    Mit dem RasPi wirst du mit Wordpress nicht glücklich:
    Wordpress verwaltet seine Daten in einer Datenbank (meist MySQL oder MariaSQL), der RAM des RasPi ist zu klein um einen ordentliche Pufferung zu haben... die Zugriffe gehen quasi auf die SD-Karte und dann auf die Netzwerkkarte...


    Automatisch zusammengefügt:

    Welche Hardware hat deiner denn verbaut?

    Ich habe den Intel NUC-Kit i3-5010U 2.1GHz HD5500 NUC5I3RYH [Anzeige].
    + 8GB RAM (2x4GB) und einer 256GB NVMe-SSD (Intel) drin.

    Die NVME-SSD ist allerdings überdimensioniert, eine normale PCIe-SSD tut es auch, der Unterschied ist lediglich messbar, nicht spürbar...

  • @ MacNoobi
    Nope nutze PHP 5 ohne Komprimierung der Inhalte. Vielleicht könnte ich da nochmal an den beiden Stellen ansetzen und testen oder halt wirklich etwas besseres zulegen.

    Zentris
    Eigentlich genau das was ich mir dachte. Dann muss es vielleicht wirklich der NUC sein oder was selbst zusammen gebautes. Dann habe ich auf Dauer Ruhe und sowas lässt sich immer auch anderweitig einsetzen :D

    Gruß Kokiri

  • Beim Laden ist maximal ein Kern bei ca 95,5 % Auslastung.

    In Nginx den "worker_process" auf 4 hochgestellt? Nutzt du auch PHP-FPM? (PHP Version 7 hat Einiges an Optimierungen erhalten) Nutzt du für PHP-Dateien eine Socket-Datei (empfehlenswert) oder eine Loopback-Verbindung (eher nicht empfehlenswert)?

    Früher hatte ich Dokuwiki als Blogsoftware am Laufen, was recht performant auf meinem Pi2 lief. Kann vom Funktionsumfang natürlich bei Weitem nicht mit Wordpress mithalten und das System ist auch deutlich anders (u.a. ausschließlich dateibasiert, komplett ohne Datenbank). Momentan nutze ich den Pi2 seit ca. einem Monat problemlos mit Nextcloud 11: Zwar dauert jeder Klick in der Weboberfläche mehrere Sekunden (2-5), aber die sind locker verschmerzbar - und dahinter läuft immerhin MariaDB als Datenbank^^. Wie performant Wordpress generell auf dem Pi ist, kann ich mangels Erfahrung leider nicht sagen^^...

    Ich bin allerdings auch einer von der Sorte, der zuviel Zeit in die Optimierung gesteckt hat. Heißt, dass ich u.a. sogar eine F2FS-Partition nur für den Webroot angelegt habe und generell Archlinux nutze, was stets die neuesten "Stable"-Versionen von MariaDB, nginx und PHP im Repository hat^^.

    Einmal editiert, zuletzt von Astorek86 (5. April 2017 um 22:16)

  • Astorek86

    Jup also in der nginx.conf steht der worker_process auf 4.
    Ich nutze PHP-FPM richtig aber in der Version 5.
    Gibt es PHP 7 denn aus einer Repository oder müsste ich es selbst kompilieren (Raspbian)?

    Ich denke ich nutze eine Socket Datei!? Da muss ich ehrlich zugeben, dass ich mich bei der PHP Config stark an die Vorgabe vom NginX Wiki gehalten habe.

    Meine Nginx Config sieht dahin gehend so aus:

    Code
    location ~ \.php$ {
            try_files $uri =404;
           fastcgi_split_path_info ^(.+\.php)(/.+)$;
           fastcgi_pass unix:/var/run/php5-fpm.sock;
           fastcgi_index index.php;
           fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
           include fastcgi_params;
       }


    Zitat

    und generell Archlinux nutze, was stets die neuesten "Stable"-Versionen von MariaDB, nginx und PHP im Repository hat^^.


    Interessant! Nutze auf einer Testumgebung Archlinux aber habe noch nie einen Webserver dort installiert. Vielleicht wird es Zeit?
    Danke schon mal dahin gehend für die Anregung.

    Gruß Kokiri

    Einmal editiert, zuletzt von Kokiri (5. April 2017 um 22:43)

  • Code
    fastcgi_pass unix:/var/run/php5-fpm.sock;

    Jepp, du nutzt eine Socket-Datei ;)

    Ich habe jetzt testweise mal selbst Wordpress auf meinem Pi3 installiert mitsamt dem aReview-Theme und muss sagen: Es läuft recht flüssig bei mir^^. Ich weiß nicht ob es "nur" an PHP 5 liegen kann, aber bei mir fluppt alles mit ungefähr derselben Geschwindigkeit wie meine Nextcloud. Von spürbarer Verzögerung keine Spur, alle Seiten sind in maximal 5 Sekunden geladen. (Kann natürlich auch daran liegen, dass ich noch kaum Inhalte in Wordpress eingefügt habe; hab noch keine große Erfahrung mit der Blogsoftware^^)

  • Wow vielen Dank, dass du dir diese Mühe gemacht hast. Das ist super nett von dir. Die Ladezeiten sind ja richtig akzeptabel :)
    Ich werde nachher schlafen gehen. Werde aber morgen ebenfalls mal mit Archlinux den NginX Webserver aufsetzen und berichten, wie es sich verhält ^~^
    Bin mal gespannt ob ich mit deinen 5 Sekunden mithalten kann :blush:

    Gruß Kokiri

    Einmal editiert, zuletzt von Kokiri (5. April 2017 um 23:42)

  • Servus, kurzen Einwurf von mir an der stelle; macht es nicht eher sinn einen load balancer/reverse proxy via NginX potenter zu dimensionieren? Hintergrund ist, dass ein Load balancer requests an ressourcen weiterleitet. Aber ab einer gewissen anzahl von ressourcen werden die antworten der anfragen zb zu viel und der load balancer koennte zum flaschenhals werden, sobald alle antworten durch das gateway getunnelt werden.

    Daher die frage, es macht fuer mich durchaus sinn die last auf mehrere pis zu verteilen, aber ab einer gewissen topologie macht es ggfls. Eher sinn den load balancer hoch zu speccen.

    Bitte um meinungen dazu, danke.

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!