Erste Schritte für die Entwicklung nativer Cloud-Anwendungen

Cloud-native Anwendungen sind allgegenwärtig. Erfahren Sie, was es braucht, um Cloud-basierte Anwendungen zu erstellen und welche Entwicklungs-Tools zur verfügbar sind.

Nicht alle Unternehmen definieren Cloud-native Anwendungen auf die gleiche Weise. Oft werden Microservices und Container in einem Atemzug mit der Cloud-nativen Anwendungsentwicklung genannt. Das hängt damit zusammen, dass in der beziehungsweise für die Cloud entwickelte Anwendungen gern auch mit modernen Entwicklungsmethoden programmiert werden. Außerdem werden Projekte für Cloud-native Anwendungen, im Gegensatz zum traditionellen Wasserfall-Prinzip der Projektumsetzung, mit agilen Methoden entwickelt. Änderungen werden häufig über automatisierte Pipelines für eine Produktionsumgebung freigeschaltet. Auch die Infrastruktur wird auf Code-Ebene verwaltet.

Cloud-nativ-Grundlagen

Das schnelllebige Naturell der Cloud erfordert automatisierte Entwicklungsabläufe, die bei Bedarf angeschoben und immer wieder verwendet werden können. Cloud-native Anwendungen müssen unter Berücksichtigung unterschiedlicher Infrastruktur (-Konzepte) entwickelt werden. Dies hat dazu geführt, dass sich Entwickler auf Tools wie Docker verlassen. Damit haben sie eine zuverlässige Plattform für die Ausführung ihrer Anwendungen, ohne sich um die Zuordnung der erforderlichen Ressourcen kümmern zu müssen. Unter dem Einfluss von Docker haben Entwickler Anwendungen mit dem Microservices-Modell entwickelt, das hoch fokussierte, lose gekoppelte Dienste ermöglicht, die sich leicht mit der Nachfrage skalieren lassen.

Und dann gibt es noch die „Twelve-Factor App“-Methodik. Sie enthält ein Referenzmodell für die Entwicklung von Applikationen für die Cloud. Die vier wichtigsten Elemente der zwölf Faktoren – sie entsprechen im Grunde den klassischen Programmierprinzipien wie sie schon Donald Knuth mit seiner Lehrprogrammiersprache Pascal angestrebt hatte – sollen im Folgenden erläutert werden. Die vollständige Liste umfasst:

  1. Codebase
  2. Abhängigkeiten
  3. Konfiguration
  4. Backing Services
  5. Erstellen, Freigeben, Ausführen
  6. Prozesse
  7. Port Binding
  8. Concurrency
  9. Disponierbarkeit
  10. Development/Production Parity
  11. Logs
  12. Administrationsprozesse

Erstellen, Freigeben, Ausführen

Die Phasen Build, Release, Run staffeln die Entwicklung und Bereitstellung von Cloud-basierten Anwendungen. Zuerst durchläuft die Code-Basis einer Anwendung den Build-Status, wo sie vom rohen Quellcode in ein ausführbares Bundle umgewandelt wird, das als Build bekannt ist. Der Build wird dann mit allen notwendigen Konfigurationswerten kombiniert, die für den Betrieb in der Zielumgebung erforderlich sind – und dies wird als Release bezeichnet. Schließlich wird die ausführbare Release-Datei in der Produktionsumgebung ausgeführt.

Planen Sie unerwartete Ausfälle ein und entwickeln Sie reibungslose Abschaltprozesse.

Dieser klar definierte Workflow ist oft mit einem Bereitstellungs- und CI-Tool wie Jenkins oder Capistrano gekoppelt, die automatisierte Tests durchführen, zu früheren Builds zurückkehren und noch mehr können. Wenn etwas schief geht, kann eine vorkonfigurierte Version in einer neuen Umgebung oder auf einer anderen Infrastruktur erneut ausgeführt werden, ohne die gesamte Anwendung neu verteilen zu müssen.

Prozesse

Im Cloud Computing sind entkoppelte, zustandslose Prozesse weitaus skalierbarer und verwaltbarer als zustandsorientierte. Obwohl es nicht gerade intuitiv wirkt, einen zustandslosen Prozess zu entwickeln, betont es die Abhängigkeit von zustandsbehafteten Backup-Diensten, die es den zustandslosen Prozessen ermöglichen, mit minimalem Risiko für die Qualität der Anwendung hoch- und herunterzustufen – oder sie ganz neu zu starten.

Während Sie Cloud-native Prozesse auf vielfältige Weise ausführen können, bieten einige Zielumgebungen – wie zum Beispiel Heroku – eigene Laufzeit-Umgebungen an, die auf vom Entwickler bereitgestellten Konfigurationswerten basieren. Dies geschieht in der Regel durch den Einsatz von Containertechnologien wie Docker. Container sind eine optimale Lösung zum Kapseln einzelner Prozesse zur Ausführung einer bestimmten Anwendung. Container fördern zudem die Verwendung von zustandslosen Anwendungen.

So sieht eine CI/CD-Pipeline aus.
Abbildung 1: So sieht eine CI/CD-Pipeline aus.

Gleichzeitig Ausführung: Concurrency

Cloud-native Anwendungen sind fest verdrahtet, um horizontal skalierbar zu sein. Sie isolieren Dienste in einzelnen zustandslosen Prozessen, die bestimmte Workloads gleichzeitig verarbeiten können. Prozesse werden effizient skalierbar, wenn sie zustandslos sind und die anderen unabhängigen Prozesse nicht kennen.

Die gleichzeitige Ausführung (englisch: Concurrency) ist ein gutes Beispiel dafür, warum sich so viele Cloud-native Anwendungen im Sinne serviceorientierter Architekturen angelegt werden. Monolithische Anwendungen können nur beschränkt und nur vertikal skalieren. Durch die Concurrency kann jede Komponente effektiver skalieren, um die Last zu bewältigen. Dazu zerlegt ein Entwickler die monolithische Anwendung in mehrere gezielte Prozesse. Zur Automatisierung der Verwaltung und Skalierung dieser Prozesse gibt es zahlreiche Tools, darunter Kubernetes und andere proprietäre Dienste von Cloud-Service-Providern.

Disponierbarkeit

Mehrere Cloud-Anbieter bieten kurzlebige, volatile Infrastrukturen zu reduzierten Kosten an. Das führt zu einer Skalierbarkeit ohne große Kosten, birgt aber das Risiko einer plötzlichen Entsorgung von Prozessen. Obwohl dies nicht immer der Fall ist, betonen die Entwickler Cloud-basierter Anwendungen, die hoch verfügbar sein sollen, die Bedeutung von selbstheilenden Anwendungen, die zum Beispiel im Falle eines Crashs an anderer Stelle weiterarbeiten.

Planen Sie also unerwartete Ausfälle ein und entwickeln Sie reibungslose Abschaltprozesse. Speichern dazu Sie alle zustandsbehafteten Daten außerhalb der Maschine, auf der der isolierte Prozess läuft. Es ist jedoch einfacher, ein selbstreparierendes System mit Orchestrierungswerkzeugen wie Kubernetes und robusten Backends mit Job-Warteschlangen wie Beanstalkd oder RabbitMQ zu bauen.

Erfahren Sie mehr über Cloud Computing