Cloud-Ready mit Go (Golang)
Digitalisierung ist ein großes Thema der heutigen Zeit. Immer mehr Unternehmen wollen beispielsweise ihre internen Prozesse oder Services für Kunden und Kundinnen digitalisieren und optimieren. Oft müssen sie dem wachsenden Kundschaftsstrom durch Skalierbarkeit ihrer Anwendungen standhalten. Dabei fallen im Erstgespräch oft die Wörter Cloud und Kubernetes. Über einen Microservice-orientierten bzw. Cloud-nativen Entwicklungsansatz, beispielsweise mit Go (oft auch als Golang bezeichnet), wird gar nicht erst gesprochen.
Einleitung
Doch so einfach ist das nicht mit der Cloud (und schon gar nicht mit Kubernetes). Schnell sollen bestehende Altsysteme „Cloud-Ready“ gemacht werden, und bei der ersten Konzeption der notwendigen Systemlandschaft sieht man schnell eine Kostenexplosion, die sich anbahnt. Zudem weisen viele Altsysteme kritische Komponenten auf, die nicht ohne weiteres in einer Cloud landen dürfen.
Es lohnt sich also, erstmal einen Blick auf die Anwendung selbst zu richten. Dabei sollte man unter anderem folgende Punkte beachten:
-
Wie hoch ist der Ressourcenverbrauch der Anwendung?
-
Ist die Anwendung skalierbar?
-
Kann die Anwendung in ihrer jetzigen Form überhaupt in einer öffentlichen Cloud betrieben werden?
-
Wie gut lässt sich die aktuelle Anwendung warten?
Es gibt noch viele weitere wichtige Punkte, die beachtet werden müssen, jedoch kann man anhand dieser einfachen Fragen schnell herausfinden, ob die Anwendung Cloud-Ready ist und wie sinnvoll dabei der Einsatz von einem Orchestrator wie Kubernetes ist. Die Konsequenz ist oftmals eine Neu- oder Weiterentwicklung der Anwendung, um einen reibungslosen Einsatz in der Cloud zu ermöglichen.
Wieso Cloud-nativ programmieren?
Wenn wir in die Cloud gehen, dann wollen wir uns auch die Vorteile der Cloud zunutze machen. Ansonsten könnten wir auch zwei weitere Server in die Firma stellen. Es ist wichtig, dass wir ein Bewusstsein dafür schaffen, dass die Cloud keine eierlegende Wollmilchsau ist und außerdem nicht jede Software direkt in ihr funktioniert.
Durch einen Cloud-nativen Entwicklungsansatz möchten wir sicherstellen, dass unsere Anwendungen unter anderem hochverfügbar, besser wartbar und ressourcenschonender sind. Solch ein Ansatz erhöht die Wahrscheinlichkeit, dass unsere Anwendung auf Dauer erfolgreich in der Cloud läuft, signifikant. Eine beliebte Cloud-native Programmiersprache ist dabei Go.
Was bringt mir Golang?
Go ist eine kompilierte Programmiersprache mit schneller Startlaufzeit, die ohne eine virtuelle Maschine auskommt. Sie eignet sich dabei besonders gut für skalierbare Systemlandschaften wie Kubernetes und wird gerne für die Entwicklung von Cloud-nativen Microservices genutzt. Dabei lässt sich Golang für alle gängigen Architekturen und Betriebssysteme kompilieren. So lässt sich die Anwendung direkt in dem benötigten System starten, ohne dass wir sicherstellen müssen, dass dort zum Beispiel eine notwendige virtuelle Maschine (z.B. JVM) zum Ausführen installiert ist. Ein weiterer Vorteil ist, dass durch das Weglassen einer solchen virtuelle Maschine beispielsweise Docker Builds wesentlich schlanker werden.
Beispiel 1 zeigt einen einfachen API Service in Go:
Wie wir sehen, kann man mit sehr wenigen Zeilen Code einen kleinen API Service entwickeln. Ein weiterer Vorteil ist, dass der Verbrauch dieses kleinen Go Microservice sehr niedrig ist und dieser ohne Vorlaufzeit startet. Die kurze Verbrauchsspitze wurde durch viele aufeinanderfolgende Anfragen erzeugt und ist weiterhin niedrig.
Natürlich fehlen hier einige Features eines vollwertigen und robusten API Service, wie das Unterscheiden zwischen GET/POST/PUT/DELETE; außerdem ist in den allerwenigsten Fällen eine Anwendung so klein.
Da wir in den gängigsten Programmiersprachen Frameworks benutzen, um solche Funktionalitäten hinzuzufügen, nehmen wir im Beispiel 2 ein Web Framework zur Hilfe, wie man es mit Spring Boot bei Java-Anwendungen macht. Wir haben uns für das Gin Web Framework entschieden (GitHub – gin-gonic/gin: Gin is a HTTP web framework written in Go (Golang). It features a Martini-like API with much better performance — up to 40 times faster. If you need smashing performance, get yourself some Gin.):
Wir sehen, dass unser Code nicht wesentlich größer geworden ist. Der Funktionsumfang hat sich jedoch stark erweitert. Zudem bleibt der Verbrauch auch mit einem Framework immer noch niedrig.
Was kann Golang noch alles?
Wir haben festgestellt, wie schnell ein einfacher API Service in Go realisierbar ist. Golang kann aber noch viel mehr und besticht beispielsweise mit einer einfach zu erlernenden Syntax, Nebenläufigkeit und einer einfachen Fehlerbehandlung.
Für alle, die jetzt neugierig geworden sind und mehr über die Programmiersprache Go erfahren wollen, bieten wir eine Schulung an. Die Trainer und Trainerinnen zeigen auf, wie Go in zukünftigen Projekten integriert werden kann und die Teilnehmer:innen können das neu erlangte Wissen in spannenden Übungen anwenden.
Daniel Meng
Neueste Artikel von Daniel Meng (alle ansehen)
- Cloud-Ready mit Go (Golang) - 21. April 2023
- Logging in Kubernetes mit Fluent Bit und OpenSearch - 7. Februar 2023