Cloud Native

Cloud Native ist ein Ansatz in der Entwicklung von Anwendungen oder Applikationen unter BerĂŒcksichtigung der cloudbasierten Anwendungsumgebung. Insbesondere steht die Container-Orchestrierung im Mittelpunkt.
Sinnbildlich fĂŒr die Cloud Native wird ein USB-Kabel von einer Hand eine Cloud gesteckt.
© Photocreo Bednarek

Was bedeutet Cloud?

Der Begriff „Cloud“ ist lediglich eine Kurzform von Cloud Computing. Dies verdeutlicht den technologischen Aspekt der Cloud. Allgemein wird von Cloud gesprochen, wenn es sich um eine netzwerkbasierte Infrastruktur handelt. Dies kann in Form von SpeicherkapazitĂ€t, Rechenleistung oder auch Software erfolgen. Im Gegensatz zum Abruf von Daten eines physischen Servers erfolgt bei einer Cloud ein Zugriff auf virtuell bereitgestellte Dienste.

Seit der Etablierung dieser digitalen Server, hielten immer mehr Innovationen Einzug. Neben Cloud Software und Cloud Anwendungen, stieg auch die Zahl der sogenannten Native Cloud Applications – kurz NCA.

Cloud Native Computing

Doch was genau macht Applikationen oder Anwendungen „cloud native“? Cloud Native ist als Perspektive zu verstehen. Im Zuge der Digitalisierung und der EinfĂŒhrung von Cloud Technologien wurden neue Potentiale entdeckt und ausgebaut. Eine möglichst effiziente Nutzung der Cloud Mechanismen, um sowohl eine Verbesserung auf Seiten der Entwickler als auch der Nutzer zu erreichen. Diese Perspektive schafft ein GerĂŒst, eine Art Bauanleitung fĂŒr kĂŒnftige cloudbasierte Anwendungen.

Die Arbeit durch den Cloud-Native-Ansatz setzt gewisse strukturelle Bedingungen voraus, auf welche im Folgenden noch eingegangen wird. GrundsĂ€tzlich wird dadurch jedoch ein agiles und dynamisches Entwickeln bereitgestellt, welches im weiteren Sinne die Implementierung und das AusfĂŒhren von modernen und vor allem skalierbaren Anwendung ermöglicht.

Dies erfolgt unabhÀngig von der Art der Cloud (Public Cloud, Private Cloud und Hybrid Cloud), welche eingesetzt wird. Im Kern steht die Infrastruktur samt ihrer Kommunikationsschnittstellen durch beispielsweise APIs.

Cloud Native Computing Foundation

Im Zusammenhang mit Cloud Native ist auch die Cloud Native Computing Foundation – kurz CNCF – unausweichlich. Die CNCF hat sich als ein Projekt der Linux Foundation entwickelt und steht seit 2015 im Zusammenspiel mit den wachsenden Möglichkeiten in der Cloud Native Technologie. Mit GrĂŒndung der CNCF wurde auch eine Technologie von Google bereitgestellt, welche in den letzten Jahren immer mehr fĂŒr Schlagzeilen sorgte – Kubernetes. Der Verband wĂ€chst kontinuierlich weiter und auch Kubernetes findet seit jeher immer mehr Anklang. Durch das Open Source Projekt wird eine stetige Verbesserung im Bereich der Container Orchestrierung ermöglicht und in vielen Fachbereichen gilt es trotz hoher KomplexitĂ€t als state of the art.

Die 4 SĂ€ulen von Cloud Native

Um die Entwicklung von Cloud Native Applications besser verstehen zu können, lohnt sich ein Blick tiefer in die Materie. Eine strikte Trennung ist zwar nur schwer möglich, da es sich um ein Zusammenspiel aus vielen Teilbereichen handelt. Dennoch kristallisierten sich im Laufe der Zeit vier essenzielle Aspekte heraus, welche im Folgenden genauer betrachtet werden sollen:

  1. Microservices
  2. Container
  3. Continuous Integration / Continuous Development
  4. DevOps

Microservices

Microservices beschreiben im Grunde das Herunterbrechen von komplexen Softwareanforderungen in kleinere Teilschritte. So werden in sich geschlossene Aufgaben einzeln betrachtet.

Zur Verdeutlichung kann man sich die industrielle Revolution ins GedÀchtnis rufen. Durch Arbeitsteilung wurde ein kompletter Prozess in kleinere Teilaufgaben zerlegt. Diese Teilsysteme funktionierten autark und waren durch die hohe Spezialisierung weniger fehleranfÀllig.

FrĂŒher und insbesondere vor EinfĂŒhrung der Cloud Architektur, war ein monolithischer Ansatz der Programmierung gĂ€ngig. Die Software wurde nur fĂŒr einen speziellen Anwendungsfall entwickelt und dementsprechend „von Kopf bis Fuß“ dahingehend durchdekliniert.

Im Zuge einer Modularisierung werden nun Teile davon herausgerissen und im Endprodukt an den richtigen Stellen miteinander wieder verbunden. Beispielsweise könnte man bei einer Onlineplattform folgende Microservices unterscheiden:

  • Datenbank mit Kundeninformationen
  • Bestellmodul
  • Versandmodul
  • Bezahlmöglichkeiten
  • Frontend

Jeder dieser Services wird nun einzeln betrachtet und als eigenstĂ€ndiger Service entwickelt. Im Endprodukt hingegen erfolgt eine VerknĂŒpfung, dass diese Services miteinander im Austausch stehen können.

Container

Die Container sind im Grunde die HĂŒlle um die Microservices. Diese HĂŒlle kann als Isolierungsumgebung verstanden werden. Sie bietet Spielraum fĂŒr den integrierten Service, inklusive des gesamten Dateisystems, wie beispielsweise Library Files oder auch Konfigurationseinstellungen, welches benötigt wird, um den Prozess auszufĂŒhren.

Ein weiterer Bestandteil dieser Container ist eine API-Schnittstelle. Gerade in Verbindung mit Cloud Native werden vermehrt REST-APIs eingesetzt, welche eine Punkt-zu-Punkt-Kommunikation ermöglichen. Diese ist ausschlaggebend dafĂŒr, dass im spĂ€teren Verlauf die verschiedenen Teilprozesse miteinander kommunizieren können.

Außerdem wird durch die Container sichergestellt, dass der Prozess, so wie er programmiert wurde, unabhĂ€ngig vom OS Kernel lĂ€uft. Verschiedenen Container teilen sich sozusagen einen einzelnen Kern. Deutlicher wird dies, wenn man sich im Vergleich VMs oder auch Virtuelle Maschinen ansieht. Diese haben pro erstellte Einheit ein eigens installiertes Betriebssystem. Dies fĂŒhrt zu höheren Datenmengen und möglichen KompatibilitĂ€tsproblemen bei einem spĂ€teren Überspielen der Anwendungen.

DevOps

DevOps ist ein Akronym aus den Wörtern Development und Operations. Hierbei stehen also sowohl die Entwickler – Developer – als auch der ausfĂŒhrende Part – Operator – im Fokus. Wenn ein Unternehmen eine DevOps Strategie fĂ€hrt, werden beide Aspekte bereits bei der Programmierung zusammengelegt. Eine enge Zusammenarbeit fĂŒhrt zu schnelleren Entwicklungszeiten und einer besseren Kommunikation. DevOps ist aber im Zusammenhang mit Cloud Native auch bedingt durch die Container-Arbeitsweise bzw. das Separieren in Microservices. Durch die Container wird ein schneller und effizienter Datenaustausch ermöglicht. Und dadurch, dass Prozesse einzeln betrachtet und programmiert werden, ist auch das Gesamtsystem fehlertoleranter und einfacher zu warten.

Die Arbeit als DevOps-Team kann zusĂ€tzlich ĂŒber den Einsatz von Software wie Microsoft Azure stattfinden. Hierbei wird nach der SCRUM Methode ein Projekt agil und dynamisch zum gewĂŒnschten Erfolg getrieben. Im Mittelpunkt steht dabei das Ausnutzen individueller StĂ€rken in Kombination mit regelmĂ€ĂŸigen Feedbackschleifen.

Continuous Integration & Continuous Deployment

Mit dem Wissen um Cloud, DevOps, Microservices und Container ist die letzte SĂ€ule einfach herzuleiten. Bei der Continuous Integration – kurz CI – geht es genauso wie beim Continuous Deployment – abgekĂŒrzt CD – zunĂ€chst um eine KontinuitĂ€t. Die Standardisierung stellt sich hierbei als SchlĂŒssel zum Erfolg heraus. Durch geringe Datenmengen und den Einsatz von Containern ist auch der Betrieb von mehreren Prozessen parallel keine große Herausforderung. Auch durch die kleinen Teilsysteme oder Services wird ein Ausspielen von beispielsweise Updates im Falle eines Bugfixes erleichtert.

Insbesondere durch die enge Zusammenarbeit im DevOps-Team erfolgt auch die Entwicklung effizienter hinsichtlich des Software Life Cycle – SDLC. Vom Coding ĂŒber die Integration neuer oder bestehender Inhalte, bis hin zu den Fehlerschleifen lĂ€sst sich der Prozess nun einfacher durchlaufen und gegebenenfalls optimieren.

Ein Hauptaspekt von Cloud Native im Zusammenhang mit CI und CD ist die Automatisierung. Dadurch, dass ein Kommunikationssystem eingepflegt wird und die Prozesse einem standardisiertem Verfahren nach abgehandelt werden, wird auch eine RegelmĂ€ĂŸigkeit bei der Weiterentwicklung gewĂ€hrleistet.

Cluster

Prozesse können nun also einfach als Service erstellt und Container verpackt werden. Ist dies geschehen, erfolgt das Deployment. Bereits hier kann auf Ausfallsicherheit geachtet werden. Durch die Containerbauweise ist es einfach, dass ein Prozess mehrfach ausgefĂŒhrt wird. Dies bildet ein Cluster, welches eine Cluster-IP erhĂ€lt. Somit lassen sich die gleichartigen Prozesse zeitgleich bedienen. FĂ€llt ein Teil des Clusters aus, so wird in der Regel automatisch ein Selbstreparatur-Prozess eingeleitet oder ein neues Replica auf den Weg geschickt.

Die Verteilung der Nutzeranfragen an eine Applikation wird ĂŒber einen Load Balancer an die Teile des Clusters reguliert.

Load Balancer

Skalierbarkeit ist ein wichtiger Faktor in Bezug auf cloudbasierten Anwendungen. Durch einen kontinuierlichen Datenaustausch kann eine horizontale Skalierung in Sekundenschnelle erfolgen. Diese erfolgt durch einen zwischengeschalteten Load Balancer. Seine Aufgabe ist die Verwaltung der Workloads auf einzelnen Prozessen. Wenn ein Prozess beispielsweise eine hohe Auslastung erfĂ€hrt, können weitere Prozesse mit Replicas des ursprĂŒnglichen Containers deployt werden. Dieses Deployment oder auch Bereitstellen sorgt dann dafĂŒr, dass die Arbeitslast ohne großen Mehraufwand auf unterschiedliche Knoten verteilt wird, die dennoch die gleiche FunktionalitĂ€t bieten.

Auch hier lohnt sich der Blick auf einen Fall ohne Cloud Native. WĂŒrde man einen Server mit monolithischen Daten bespielen, so mĂŒsste im Falle einer steigenden Auslastung ein weiterer Server angemietet werden und die komplette Datenmasse erneut aufgebaut werden.

Bei Cloud Native hingegen kann bereits in der Konfiguration festgelegt werden, dass im Falle von steigenden Besucherzahlen, beispielsweise bei einem Online-Shopping-Dienst, einfach ein weiteres Bestellmodul bereitgestellt werden, um den Anfragen gerecht zu werden. LĂ€sst die Anfrage nach, wird dieses Cluster wieder automatisch reduziert.

Es gibt verschiedene Arbeitsweisen eines Load Balancers:

  • Least-Connection: Die Anfragen werden an die Server mit den wenigsten Verbindungen geleitet
  • Weighted-Distribution: Server werden nach LeistungsstĂ€rke gewĂ€hlt
  • Least-Response-Time: Anfragen werden zum Server mit der kĂŒrzesten Antwortzeit vermittelt
  • Round Robin: In einer vordefinierten Sequenz werden die Anfragen den jeweilen Servern zugeordnet

APIs

APIs, auch Application Programming Interface genannt, bilden sozusagen das Bindegewebe zwischen den Containern. Sie sind durch die modulare Bauweise von hoher Bedeutung. Erst mit den Schnittstellen wird sichergestellt, dass in der Applikation spÀter alle benötigten Daten zum richtigen Zeitpunkt abrufbar sind und somit ein Zusammenspiel der Teilsysteme vonstattengeht.

Erst durch den Einsatz der APIs wird eine Steuerung der einzelnen Container, das Deployment und schlussendlich auch die Ausgabe an den User erzielt. Auch fungieren die APIs als wichtiges Tool fĂŒr die Arbeit des Load Balancers.

Vorteile von Cloud Native

FĂŒr Unternehmen birgt Cloud Native eine Vielzahl an Möglichkeiten durch die neue Architektur der Programmierung auf Basis von Cloud Technologien. Viele der Aspekte wurden bereits durch die einzelnen Teildisziplinen herausgestellt. Dennoch stechen einige VorzĂŒge heraus:

  • Die horizontale Skalierbarkeit bietet einen großen Vorteil, da ein dynamisches und agiles System in nur wenigen Schritten ausgeweitet oder reduziert werden kann.
  • Auch die Automatisierung ist in diesem Zusammenhang zu nennen, da nur einmal Bedingungen geschaffen werden mĂŒssen, welche dann das System selbst regulieren.
  • Durch die Unterteilung in verschiedene Microservices ist das Gesamtsystem sehr belastbar und fehlertolerant, da man im Falle einer Fehlfunktion nur einen einzelnen Service genauer betrachten muss, von welchem ein Problem ausgeht. Dies erleichtert die Wartung ungemein.
  • Die Aufgliederung in Teilsysteme bietet zusĂ€tzlich eine ModularitĂ€t, welche es ermöglicht, bestehende Systeme in neuen Projekten erneut zum Einsatz bringen zu können.
  • Auch der DevOps-Ansatz glĂ€nzt, da durch die enge Zusammenarbeit der entwickelnden und ausfĂŒhrenden Kraft eine Synergie genutzt werden kann, welche beispielsweise die Time-to-Market erheblich reduzieren kann. Außerdem werden Systeme durch die Container-Isolierung einfacher ausgetauscht und sind nicht so fehleranfĂ€llig, da sie in dem geschlossenen System immer so funktionieren werden.

Cloud Native bei TenMedia

Die Arbeit mit cloudbasierten LösungsansĂ€tzen ist auch bei TenMedia ein Schwerpunkt der tĂ€glichen Arbeit. Als Digitalagentur im Herzen von Berlin lĂ€sst TenMedia seit 2011 keine WĂŒnsche bezĂŒglich individueller Softwareentwicklung, Online-Plattformen aber auch Cloud Software offen. Die technische Expertise unserer Entwickler beruht auf jahrelanger Erfahrung und kann von der Beratung ĂŒber die Konzeption oder auch der Implementierung von Software-Dienstleistungen als treuer Begleiter zur Seite stehen. Auch zusĂ€tzliche Services wie die Betreuung oder Hosting und Monitoring können bei Bedarf mit abgedeckt werden.