zum Inhalt springen
Kontakt

Das Ding mit Cloud-Native Apps

Michael Ingold
noun_0_1200 x 600 px

Alles in der Informatik scheint dem Gartner Hype-Cycle zu folgen – ebenso scheinbar auch Cloud-Native Apps. Es handelt sich dabei um Applikation welche von Beginn weg für den Betrieb in skalierbaren Clouds ausgelegt werden. Das erstaunliche dabei ist, wie planlos und unüberlegt dabei oft vorgegangen wird. In dieser Serie von kurzen Post möchte ich darlegen warum wir ein grundlegendes Umdenken brauchen, wenn wir uns an die Cloud-Native Entwicklung wagen und aufzeigen worauf man sich in dieser Welt einlassen muss. Der Preis ist erstaunlich hoch.

Eine veränderte Ausgangslage

Unser Umfeld in der Applikationsentwicklung ist im Begriff sich radikaler zu ändern, als was wir bisher sehen oder annehmen zu verstehen. Betriebssysteme verändern sich rasant und werden dabei zunehmend irrelevant. Der Browser ist das neue Betriebssystem. Unsere Rechenzentren leeren sich rasant. Azure wächst aktuell jedes Jahr mit 25-35% – weitaus schneller als der Markführer Amazon. Virtualisierung – vor kurzem noch eine Neuheit – wird gerade von Docker und ähnlichen Tools komplett umgekrempelt. Unsere Zielgruppen ändern sich – wir bieten unsere Produkte kaum mehr „zu Hause“ an – sondern weltweit. Ansprüche unserer Nutzer steigen. Downtime wird nicht hingenommen – langsam ist alles was sich etwas langsamer anfühlt als das Versenden einer Whatsapp Nachricht.

Um dieser Entwicklung zu begegenen, haben uns viele grosse (vornehmlich US-amerikanische) Firmen vorgemacht, wie man Applikationen bauen und betrieben kann, welche diesen hohen Ansprüchen gerecht werden. Damit nicht genug, diese Firmen geizen nicht damit, ihr Wissen und ihren Code mit uns zu teilen. Unsere Antwort darauf: Nein Danke – ich kann’s besser!

Die harte Warheit

Orchestration, Logging, Tracing, Load-Balancing, Ingress, Routing, Immutablility, Event-Sourcing, Metrics, Persistence, SDN, oder Service-Discovery. Ist ein unbekannter Begriff darunter? Lass dir Finger von Cloud-Native – mach dich zuerst ans Selbststudium! Weshalb ich das weiss: Weil es meine eignen gesammelten Erfahrungen sind, welche ich hier teile! Du glaubst mir nicht? Nur zu: Tu was wir Softwareentwickler am besten tun – zweimal denselben Fehler machen!

Umdenken

Wir müssen umdenken um erfolgreich Cloud-Native Apps entwickeln zu können. Dazu gehört ein organisatorisches als auch umfangreiches technisches Umdenken welches meist auch ein Neu-Denken ist. Wir können nicht länger mit denselben organisatorischen Hemmnissen moderne Applikationen entwickeln. Wir können in der Cloud nicht mehr Konsolen-Logs Fehler suchen. Skalierbarkeit des kleinsten einfachsten Services darf nicht länger eine optionale Anforderung sein, denn nach vielen Jahren, sollten wir gelernt haben, dass schlussendlich auch das kleinste Glied unseres Systems das Problem sein kann.

Ein Lichtblick ist, dass dieses Umdenken oft schon stattfindet, angestossen durch neue Technologien, welche uns gewisse zuvor wenig beachtete Probleme, schmerzhaft vor Augen führen. Es ist mühsam, an die Logs eines Docker-Containers heran zu kömmen – das war bisher einfacher. Es ist mühsam, dass die in Docker-Containern gespeicherten Daten verloren gehen, wenn wir  den Container stoppen. So erfreulich die Tatsache, dass insbesondere Container uns neue und alte Probleme vor Augen führen, so ernüchternd ist die Erkenntniss, dass als Reaktion darauf Symptombekämpfung stattfindet, anstatt dem Problem auf den Grund zu gehen und die eigenen Erkenntniss zu grundlegenden Sachverhalten zu schärfen. Persistenz ungleich Datenbank. Networking ist nicht nur TCP-IP, Configuration-Managemet ist nicht nur Assembly-Versionierung, Schnittstellen nicht Sprachkonstrukte, Konsolen keine Log-Systeme, Webserver keine Applikationsserver und Docker keine Virtualisierungstechnologie.

In dieser Blog-Serie gehe ich einigen Cloud-Native Problemen auf den Grund und zeige konkrete Good / Bad Practices auf:

  • Kultur
  • Architektur
  • Logging
  • Tracing
  • Configuration Management
  • Secrets
  • Monitoring
  • Networking

Einige dieser Themen sind organisatorischer Form, andere sehr technisch. Genau das sollte unser Ansatz bei Cloud-Native Apps sein: Nur wenn wir unsere organisatorischen UND technischen Mängel adressieren, können wir erfolgreiche Applikationen bauen! Die Herausforderungen welche ich beschreibe, sind Grundlegend und werden von keinem noch so flashigen Tool gelöst. Trotzdem haben wir erkannt, dass gewisse Tools unsere Probleme überhaupt erst lösbar machen. Daher sind meine Ausführunge stark durch die von uns eingesetzen Umgebungen (.net core, C# et. al.) und unserer Orchestrationsplatform (Kubernetes) geprägt .

Ich freue mich darauf, mein Wissen mit Ihnen zu teilen und hoffe Sie finden die folgenden Posts meiner Cloud-Native Series hilfreich und interessant!

Dieser Artikel ist Teil der Cloud-Native Serie:

  1. Intro: Das Ding mit den Cloud-Native Apps
  2. Entwickler-Kultur
  3. Architektur
  4. Logging & Tracing
  5. Metriken