Warum Go und nicht Python?

Warum Go und nicht Python?

By Nils Marti, CTO
#development#backend#go

Warum wir uns bei LearningLevels für Go und gegen Python entschieden haben

Zu Beginn der Entwicklung von LearningLevels war für uns Python die erste Wahl. Die Sprache ist einfach zu lesen, gut dokumentiert und mit Frameworks wie FastAPI sehr beliebt für Webservices. Unser erster Prototyp lief sogar erfolgreich mit einigen FastAPI-Microservices.

Doch als wir uns auf den produktiven Einsatz vorbereiteten, stießen wir auf mehrere Herausforderungen:

🚧 Performance zählt – auch bei Lernplattformen

FastAPI ist elegant, aber Python hat im Vergleich zu kompilierten Sprachen wie Go bei der Single Thread Performance Nachteile. Als wir erste Lasttests durchführten, etwa mit Hunderten gleichzeitiger Auswertungen von Freitextantworten, stießen wir schnell an Grenzen. Zwar gibt es mit asyncio gute Werkzeuge, aber die Komplexität nahm schnell zu – vor allem im Zusammenspiel mit begrenztem RAM in Containern.

🐋 Schlankere und schnellere Container mit Go

Ein weiteres Problem war die Größe unserer Docker-Images. Die Python-Services brauchten große Basis-Images, zusätzliche Abhängigkeiten wie uvicorn und sogar Systempakete. Das führte zu langen Build-Zeiten und unnötiger Komplexität in unseren CI/CD-Pipelines.

Mit Go konnten wir:

  • Dank Multi-Stage-Builds minimalistische Images ohne Runtime-Abhängigkeiten erzeugen

  • Alles in ein statisch kompiliertes Binary packen

  • Startzeiten und Speicherverbrauch drastisch senken

🔁 Der Umstieg

Der Rewrite war kein Selbstläufer, aber er bot uns die Gelegenheit, unsere APIs zu überdenken, Fehlerbehandlung zu vereinheitlichen und Logging & Monitoring konsistent zu gestalten. Am Ende war unser Backend robuster, leichter wartbar und besser für die Zukunft gerüstet.

📌 Fazit

FastAPI war ein großartiger Startpunkt – aber Go gibt uns die Performance, Stabilität und Einfachheit im Betrieb, die wir brauchen, um LearningLevels in echten Klassenzimmern skalieren zu können.

Dieser Beitrag ist Teil einer kurzen Serie über technische Entscheidungen bei LearningLevels. Mehr folgt bald!