Moodle wieder stabil
Daniel Baumann
daniel.baumann at bfh.ch
Thu Mar 9 13:50:47 CET 2017
Hallo zusammen
seit unserem letzten Mail...
https://lists.bfh.ch/pipermail/bfh-moodle-announce/2017-March/000058.html
..hatten wir noch zwei applikationsspezifische Dinge offen:
* Webfonts mit Internet Explorer:
- wegen starken Security Settings unserer Apache BFH-Defaults
haben Webfonts mit Internet Explorer nicht funktioniert,
d.h. die Fonts auf der Moodle Webseite sahen im IE nicht so
"schoen" aus.
- Behoben am 6.3.
* Lockup der Applikation:
- Seit der Migration auf Moodle 3.2 gibt es zwischen 2 und 3 Mal,
zufaelligverteilt pro 24h, ein je 5 minuetiges Lockup von
Moodle (d.h. die Webseite ist quasi offline weil die Applikation
sich selbst sperrt).
- Das Problem ist Load-unabhaengig, ein simpler Bug in Moodle
selbst.
- Behoben am 7.3. (technische Erlaeuterung siehe unten)
Auch fuer diese Applikationsprobleme gilt: waere getestet worden, waeren
diese beiden Applikationsfehler vor der Migration zum FS17 Start
entdeckt und behoben worden.
Deshalb moechten wir nocheinmal mit Nachdruck versichern, dass wir das
Upgrade auf Moodle 3.3 im Herbst 17 nur durchfuehren wenn:
* Testverfahren/Checklisten fuer die Applikation ausreichend da sind
* nur wenn alle Tests bis zum Stichtag erfolgreich sind,
wird die Migration durchgefuehrt, sonst verschiebt sich die
Migration automatisch auf die naechsten Semesterferien.
Wir sind sicher, dass wir damit die Applikationsseite stabilisiert und
professionalisiert haben.
---
Technische Erklaerung zum Lockup-Problem:
* Wenn ein Browser eine Webseite laedt, muss er in der Regel nicht nur
ein HTML File herunterladen, sondern auch mehrere Bilder,
Javascript und CSS Files.
Fuer die https://moodle.bfh.ch Startseite sind es z.B. aktuell
33 einzelne Dateien.
* Fuer jedes einzelne File musste der Browser, frueher, eine eigene
Netzwerkverbindung (TCP) zum Server aufbauen. Bei vielen einzelnen
Files bedeutet das einen hohen Overhead (TCP Handshake: Server und
Client einigen sich darauf dass sie sich gegenseitig sehen und
ab dann mit den richtigen Settings kommunizieren koennen).
Konkret: Einmal Netzwerkverbindung aufbauen mit TCP-Handshake dauert
rund 0.2 Sekunden. Bei 33 Datein bedeutet das dass das Aufbauen der
Seite (wenn seriell heruntergeladen wuerde) mindestens
33 * 0.2s = 6.6s dauert - egal wie schnell der Client oder der
Server sind.
Kann man etwa damit vergleichen, wie wenn man fuer jedes Reloaden
einer Webseite sich mit einem Analog-Modem ins Internet neu
einwaehlen muesste (beep-beep-beep-beep... die aelteren unter
uns erinnern sich :).
* Um dies zu verhindern, koennen Webserver und Browser einmal
geoffnete Verbindungen fuer eine gewisse Zeit offen lassen (Keep
Alive). Dabei werden alle folgenden Files ueber diese einzige,
bereits bestehende Verbindung heruntergeladen, es entfaellt der
Overhead von zusaetzlichen TCP Verbindungsauf- und abbau, und die
Files koennen schneller herunter geladen werden.
* Dies ist eine Praxis die mit quasi allen Webservern und Browsern
auf praktisch allen Betriebssystemen seit Anfang 2000 standard ist.
Das gleiche Verfahren wird fuer viele Dienste welche TCP
Verbindungen machen verwendet (OpenSSH, alle was Datenbank-Systeme
sind, Proxies, Loadbalancer, etc.) und ist absolut standard.
* Fuer Webserver gilt noch speziell, dass TCP Keep Alive schon immer
standardmaessig eingeschaltet ist/war, weil eine Webapplikation
*eigentlich* nichts falsch machen kann - welche Files wie
ausgeliefert werden hat die Webapp nicht zu interessieren.
Darum umso erstaunlicher dass Moodle ab Version 3.2 mit TCP Keep
Alive nicht mehr sinnvoll funktioniert (ja, wir haben ueberprueft
dass es sich nicht um Connection Limits oder RAM Limits handelt -
es ist ein Moodle Problem das in der Moodle Dokumentation
ansatzweise erwaehnt wird).
* Seit ich am Dienstag Abend um 19:50 Keep Alive abgeschaltet haben,
laeuft Moodle wieder stabil ohne einen einzigen Aussetzer.
(Wir hatten noch zwei kurze Aussetzer von AAI am Dienstag und
Mittwoch, diese haben aber nichts mit dem Moodle System zu tun)
* Nota Bene: Bei SQL Datenbanken macht man sich gleiche Verfahren zu
nutze, Stichwort Persistent Connection.
Dabei wird nicht fuer jedes Query eine neue Verbindung zur
Datenbank auf- und wieder abgebaut, sondern es wir eine permante,
bleibende Verbindung zur Datenbank etabliert, worueber dann alle
Queries nacheinander durchlaufen. Dadurch werden DB Zugriffe
enorm schneller.
Persistent Connections zu DBs gilt im Webapp Umfeld schon seit
ebenfalls ca. 15 Jahren als Standart. Wie auch bei TCP Keep Alive
kann es der Webapp eigentlich egal sein, wie "schnell" die Queries
zurueckkommen - ebenfalls erstaunlich ist dass Moodle noch nie mit
mit Persistent DB Connections funktioniert hat (was u.a. auch ein
Problem im Herbst 2016 war - mit Persistent Connections haetten wir
deutlich weniger DB Performance Probleme gehabt weil massiv weniger
Verbindungs-Overhead).
* Kleines Goodie zum Schluss fuer alle die es bis hierher geschafft
haben: man koennte ja jetzt denken, dass die Moodle Seite ohne
Keep Alive jetzt sehr langsam ist.
Ja, sie ist geringfuegig langsamer (ca. 5%), aber nicht ein
mehrfaches langsamer wie im Beispiel oben mit den 6s Ladezeit bei
33 Files.
Grund: moderne Browser der letzten knapp 10 Jahre laden Dateien,
unabhaengig von Keep Alive, nicht seriell herunter sondern
parallel (Stichwort HTTP Pipelining). Dabei werden mehrere
Verbidnungen gleichzeitig aufgemacht, welche dann jeweils via Keep
Alive noch offen gehalten werden. Standartmaessig sind dies je nach
Browser zwischen 4 bis 8 Verbindungen gleichzeitig.
D.h. bei unserem Rechenbeispiel von oben mit 33 * 0.2s = 6.6s
muss nochmals durch z.B. 4 geteilt werden, wir haben dann
trotz Abschalten von Keep Alive eine (Mindest)Ladezeit von 1.7s
(Rendering etc. nicht mit Einberechnet).
Moodle ist also nicht mehr ganz so schnell, aber voellig ausreichend
schnell und immer noch das schnellste Moodle das wir an der BFH je
hatten.
Gruesse,
Daniel
--
Berner Fachhochschule / Bern University of Applied Sciences
IT-Services / Team Infrastructure Services
Daniel Baumann
IT System Engineer Linux
___________________________________________________________
Dammweg 3, CH-3013 Bern
Phone direct +41 31 848 48 22
Phone Servicedesk +41 31 848 48 48
daniel.baumann at bfh.ch
https://servicedesk.bfh.ch
https://www.bfh.ch
https://linux.bfh.ch
More information about the bfh-linux-announce
mailing list