Interaktive Programmierumgebung CodeOcean

Im Rahmen unserer Forschung am HPI haben wir mit CodeOcean eine interaktive Applikation entwickelt, die es den Teilnehmenden erlaubt praktische Programmieraufgaben im Browser auszuführen und auch direkt automatisiert bewerten zu lassen.

Solch eine Applikation ist nicht mit einer einfachen Webseite vergleichbar. Hier sind eine Menge Komponenten beteiligt, die alle aufeinander abgestimmt sein müssen, um reibungslos zusammen zu spielen. Gerade im Kontext einer MOOC Plattform, die dieses Werkzeug sehr vielen Teilnehmern zur Verfügung stellt, müssen hier eine Reihe von Faktoren berücksichtigt werden. Zum einen müssen die notwendigen Ressourcen bereitgestellt werden, zum Anderen muss dafür gesorgt werden, dass diese Ressourcen auch effizient ausgenutzt werden. Weiterhin müssen hier auch Sicherheitsaspekte berücksichtigt werden: fremden Code auf dem eigenen Server auszuführen, sorgt, zumindest bei Systemadministratoren, für Unbehagen. Wie wir bereits in den vergangenen Kursen festgestellt haben, sind einfache Anfängerfehler, wie z.B. Endlosschleifen, hier allerdings das weitaus häufigere Problem als bewusste Angriffe.

Um all dies zu ermöglichen, bedient sich CodeOcean einer Reihe zum Teil sehr neuer Technologien. Während der ersten beiden Wochen des Python Kurses hatten wir Probleme auf CodeOcean, die wir zunächst fälschlicherweise für eine Überlastung des Servers gehalten haben. Eine nicht völlig unbegründete Schlussfolgerung, da sie ausschließlich dann auftraten wenn die Last durch die Teilnehmenden sehr hoch war.
In einer derart komplexen Umgebung einen Fehler zu finden, gerade wenn er sich nicht einfach reproduzieren lässt, ist nicht ganz trivial und vor allem auch langwierig. Nach der guten alten Regel: „wenn was nicht funktioniert, such den Fehler zuerst bei dir selbst“, haben wir lange in unserem Code herum gestochert (und dabei auch durchaus noch einiges optimiert). Das grundsätzliche Problem haben wir leider erst recht spät entdeckt. Eine von uns verwendete Library hatte einen Bug; nach einem einfachen Update auf die in der Zwischenzeit berichtigte Version dieser Library, lief das System wieder so stabil wie wir uns das von Anfang an gewünscht hätten.

Die Situation am vorigen Sonntag sah in etwa so aus. Der Screenshot zeigt die Auslastung der verfügbaren Ressourcen.
htop_hl

Unter dieser Last brach Code Ocean dann auch immer wieder zusammen. Die gelbe Kurve zeigt die verfügbaren Ausführungs- und Bewertungsumgebungen zu einem bestimmten Zeitpunkt. Diese Situation wiederholte sich je nach Last unterschiedlich oft. Das geschah auch schon vor dem Sonntag, hatte jedoch bis dahin bei weitem noch nicht diese Ausmaße angenommen.
dashboard_hl
Seit Dienstag sieht die Situation wie im folgenden Screenshot aus. Sehr schön sieht man eine vereinzelte Endlosschleife [12] eines Teilnehmers/einer Teilnehmerin. Diese Endlosschleifen werden in der Regel nach einige Sekunden von CodeOcean beendet. Für den Fall, dass das mal nicht gelingt, gibt es eine zweite Ebene die diese Prozesse nach ebenfalls kurzer Zeit endgültig beendet.

htop_ll

CodeOcean läuft seither nahezu durchgängig stabil. Die folgende Grafik zeigt die Auslastung zu einem zufälligen Zeitpunkt. Wir hatten diese Kurve sowie weitere Monitoringsysteme während der gesamten Woche unter Beobachtung. Mit Ausnahmen von wenigen Minuten an manchen Tagen waren immer ausreichend Ressourcen vorhanden.
dashboard_ll
Wer nun glaubt das liegt daran, dass die meisten Teilnehmenden vor Verzweiflung aufgegeben hatten, liegt falsch wie die folgende Grafik zeigt. Hier sieht man die Anzahl der Code-Ausführungen und der Code-Bewertungen pro Tag seit Kursbeginn. Die Größe der Spitze am 22.11. (vorigen Sonntag) ist vermutlich sowohl darauf zurück zu führen, dass es die oben geschilderten Probleme gab, als auch, dass sie die Probleme verursacht hat. Oder anders herum gesagt, vermutlich hat sich die Situation hochgeschaukelt. Durch die nahende Abgabefrist am Montag wurde CodeOcean besonders stark belastet. Als es dann nicht mehr reagiert hat, wurde immer öfter auf die Ausführen und Bewerten Buttons geklickt.

runs_assesses
Auch zu Beginn des Java Kurses vor einem halben Jahr hatten wir einige Probleme. Die Auswirkungen auf die Teilnehmer waren zwar sehr ähnlich, die Ursachen waren aber Andere. Zwischen den beiden Kursen haben wir CodeOcean so erweitert, dass es nun möglich ist mit den laufenden, selbstgeschriebenen Programmen zu interagieren. Klingt vielleicht nach nicht viel, im Hintergrund steckt da aber schon einiges an Arbeit drin.

Diese Forschung und Entwicklung ist nur durch die aktive Mithilfe der vielen Teilnehmenden im Kurs machbar.
Dafür möchten wir uns an dieser Stelle bei Allen bedanken, die trotz der Startschwierigkeiten dabei bleiben und uns helfen die Kurse erfolgreich zu Ende zu bringen.
Vielen Dank auch an Alle, die uns immer wieder auf auftretende Fehler, Schwachstellen oder Ideen für zusätzliche Features auf openHPI hinweisen.
Nur durch Ihre Mitarbeit können wir es schaffen die Plattform kontinuierlich weiter zu verbessern.

No comments yet.

Schreibe einen Kommentar

Über openHPI

openHPI ist die Internet-Bildungsplattform des Potsdamer Hasso-Plattner-Instituts. Bei openHPI können Sie in einem weltweiten sozialen Lernnetzwerk an interaktiven Online-Kursen zu verschiedenen Themen der Informationstechnologie (IT) teilnehmen.