2018
Dezember
11
2018

Umgang mit Fehlern in Control-Panel und API

Manchmal klappen Dinge nicht, das gilt in der IT genauso wie im Alltag. Je komplexer die Abläufe, umso eher verhält sich irgend eine Komponente nicht wie anfangs erwartet. Bei cloudscale.ch legen wir viel Wert auf eine einfache und konsistente Benutzung. Dazu gehört für uns auch das Abfangen all der Eventualitäten, die hinter den Kulissen auftreten können – schliesslich sollen unsere Interfaces nicht nur intuitiv benutzbar sein, sondern Sie auch bestmöglich zum Ziel führen.

Was bei unserer Cloud unter der Haube steckt

Erster Kontaktpunkt beim Benutzen von cloudscale.ch ist unser selbst entwickeltes Cloud-Control-Panel. Diese in Python geschriebene Software stellt Ihnen das Webinterface sowie die API zur Verwaltung Ihrer Server zur Verfügung und verarbeitet die Abrechnung bezogener Services. Im Hintergrund stützt sich unser Control-Panel stark auf OpenStack: als eines der führenden Open-Source-Projekte in diesem Bereich verwaltet die Cloud-Plattform unter anderem die physisch vorhandene Rechenpower, teilt IP-Adressen zu und konfiguriert interne Netze zwischen Ihren Servern.

Genauso zentral ist Ceph: die verteilte Storage-Lösung wird ebenfalls als Open-Source gepflegt und sorgt für die replizierte und performante Speicherung Ihrer Volumes und Objects. Aber auch die "kleineren" Bausteine in unserem Setup sind essenziell, z.B. unser DNS-System, ExaBGP für die dynamische Zuweisung von Floating IPs, oder RabbitMQ, das eine Art Bindeglied zwischen unserem Control-Panel und anderen involvierten Systemen darstellt.

Beispiele von potenziellen Fehlerquellen

Vieles, was aus User-Perspektive als eine zusammenhängende Aktion erscheint, bedingt im Hintergrund mehrere separate Schritte. Nebst dem eigentlichen Anlegen eines neuen virtuellen Servers wird für diesen bspw. ein Netzwerk-Port erstellt, eine IP-Adresse zugewiesen, ein Volume mit dem gewählten Betriebssystem eingerichtet und ein Reverse-DNS-Eintrag gesetzt. Egal, wie gut alles getestet ist: dass man in irgend einer beteiligten Softwarekomponente auf einen unerwarteten Fehler stösst, lässt sich nie ganz ausschliessen.

Eine weitere mögliche Fehlerquelle sind sog. Race-Conditions. Um Inkonsistenzen zu vermeiden können bestimmte (Teil-)Aktionen nur ein Mal zur gleichen Zeit ausgeführt werden; wird der selbe Schritt durch eine parallele Aktion ebenfalls benötigt, schlägt eine der beiden Aktionen fehl. Darüber hinaus sind einige Schritte von zusätzlichen Bedingungen abhängig, z.B. dass bestimmte Sicherheitslimiten ("Quotas") eingehalten werden.

Säulen des Error-Handlings bei cloudscale.ch

Im Rahmen des Error-Handlings bei cloudscale.ch ist es unser vorrangiges Ziel, dass am Ende jeder Aktion ein nutzbarer Zustand resultiert. Wo sinnvoll haben wir daher vorbereitete Rollbacks mit eingebaut: Würde ein Fehler in einem Teilschritt z.B. zu einem Server führen, der nicht funktioniert und durch einen Folgefehler möglicherweise auch nicht mehr gelöscht werden kann, kommt die Rollback-Funktion zum Zug. Sie stellt sicher, dass bereits abgeschlossene Teilschritte rückgängig gemacht werden, so dass – trotz Fehler – am Ende wieder ein sauberer Zustand vorliegt.

Noch besser ist es natürlich, Fehler soweit als möglich zu vermeiden. Dazu überwachen wir unsere Systeme permanent auf Fehlermeldungen und prüfen in jedem Einzelfall, ob sich dieser in Zukunft durch einen bestimmten Patch oder andere Verbesserungen vermeiden lässt. Zudem haben wir Transaktionen, die zu Race-Conditions führen können, nach Möglichkeit so optimiert, dass die Wahrscheinlichkeit einer tatsächlichen parallelen Ausführung minimiert wird. Sollte dennoch einmal eine Transaktion abgebrochen werden müssen, weil sie mit einer anderen parallelen Operation zeitlich zusammenfällt, wird dieser Fall abgefangen und die Transaktion bis zu einer definierten Anzahl Versuche wiederholt. So kann die Aktion, die der Benutzer gewählt hat, unter Umständen doch noch erfolgreich abgeschlossen werden.


Seit jeher ist die Benutzerfreundlichkeit eines der zentralen Anliegen bei cloudscale.ch. Auch wenn die Systeme hinter den Kulissen komplex sind und immer etwas schiefgehen kann, sollen Aktionen in unserem Cloud-Control-Panel und der API wann immer möglich zum gewünschten Ergebnis führen. Und selbst wenn nicht: Ihren weiteren/anderen Aktionen steht nichts im Wege.

Gut vorbereitet,
Ihr cloudscale.ch-Team

Zurück zur Übersicht