„Cloud-native Computing“ – Versionsunterschied

aus Wikipedia, der freien Enzyklopädie
Zur Navigation springen Zur Suche springen
[ungesichtete Version][ungesichtete Version]
Inhalt gelöscht Inhalt hinzugefügt
tippo
Markierungen: Mobile Bearbeitung Mobile Web-Bearbeitung Erweiterte mobile Bearbeitung
Ergänzung wesentlicher Eigenschaften inkl. Definition Cloud-nativer Anwendungen
Zeile 1: Zeile 1:
'''Cloud-native Computing''' ist ein Ansatz in der [[Softwaretechnik|Softwareentwicklung]], der Cloud Computing nutzt, um "skalierbare Anwendungen in Cloud Infrastrukturen, Plattformen und Umgebungen zu erstellen und auszuführen. Dabei prägen diesen Remote-Computing-Ansatz insbesondere Technologien wie [[Containervirtualisierung|Container]], [[Microservices]] sowie [[Function as a Service|serverlose Funktionen]] und unveränderliche Infrastrukturen, die über deklarativen Code bereitgestellt werden<ref>{{Internetquelle |url=https://github.com/cncf/foundation/blob/8762d762d156af8e50e6d1246e2364e60c7952a8/charter.md |titel=☁️♮🏛Cloud Native Computing Foundation Policy Repo |hrsg=Cloud Native Computing Foundation (CNCF) |datum=2022-01-03 |abruf=2022-01-03}}</ref>.
'''Cloud-native Computing''' ist ein Ansatz in der [[Softwaretechnik|Softwareentwicklung]], der Cloud Computing nutzt, um "skalierbare Anwendungen in Cloud Infrastrukturen, Plattformen und Umgebungen zu erstellen und auszuführen. Dabei prägen diesen Remote-Computing-Ansatz insbesondere Technologien wie [[Containervirtualisierung|Container]], [[Microservices]] sowie [[Function as a Service|serverlose Funktionen]] und unveränderliche Infrastrukturen, die über deklarativen Code bereitgestellt werden<ref>{{Internetquelle |url=https://github.com/cncf/foundation/blob/8762d762d156af8e50e6d1246e2364e60c7952a8/charter.md |titel=☁️♮🏛Cloud Native Computing Foundation Policy Repo |hrsg=Cloud Native Computing Foundation (CNCF) |datum=2022-01-03 |abruf=2022-01-03}}</ref>.


=== Definition ===
Diese Techniken ermöglichen lose gekoppelte [[Software-System|Software-Systeme]], die [[Resilienz (Ingenieurwissenschaften)|resilient]], beobachtbar und in automatisierten Umgebungen betreibbar sind.
Diese Techniken ermöglichen lose gekoppelte [[Software-System|Software-Systeme]] (Cloud-native Applikationen), die [[Resilienz (Ingenieurwissenschaften)|resilient]], beobachtbar und in automatisierten Umgebungen betreibbar sind.<blockquote>"Eine '''Cloud-native Anwendung (CNA)''' ist ein verteiltes, beobachtbares, elastisches und auf horizontale Skalierbarkeit optimiertes Service-of-Services System, das seinen Zustand in (einem Minimum an) zustandsbehafteten Komponenten isoliert. Die Anwendung und jede in sich geschlossene Bereitstellungseinheit dieser Anwendung wird nach Cloud-fokussierten Designmustern entworfen und auf elastischen Self-Service-Plattformen betrieben." <ref>{{Internetquelle |url=https://cloud-native-computing.de/01-materialien/ |titel=Kapitel 1 bis 4 - Cloud-native Computing |abruf=2022-01-04}}</ref></blockquote>


=== Eigenschaften ===
Häufig werden Cloud-native Anwendungen daher als eine Reihe von Microservices erstellt, die in Containern ausgeführt werden. Sie können mittels  Container-Plattformen wie bspw. [[Kubernetes]] orchestriert und mit DevOps- und Git-basierten [[Continuous Integration|Continuous Integration und Deployment]]-Workflows verwaltet und bereitgestellt werden. Der Vorteil der Verwendung von Containern besteht darin, dass die gesamte Software inklusive aller Abhängigkeiten, die zur Ausführung benötigt wird, in einem einzigen ausführbaren Paket gepackt werden kann. Container werden in einer virtualisierten Umgebung ([[Betriebssystemvirtualisierung]]) ausgeführt, die die enthaltene Anwendung von ihrer Umgebung isoliert.<ref>{{Literatur |Autor=Nane Kratzke |Titel=Cloud-native Computing Software Engineering von Diensten und Applikationen für die Cloud |Auflage=1. Auflage |Ort=München |Datum=2021 |ISBN=978-3-446-46228-1 |Online= |Abruf=2022-01-03}}</ref>
Cloud-native Anwendungen sind daher durch folgende Eigenschaften charakterisiert:

* '''Beobachtbarkeit''' bei Software-Systemen bezieht sich typischerweise auf Telemetriedaten, die meist in drei Aspekte unterteilt werden: [[Ablaufverfolgung|Tracing]] (verteilte Ablaufverfolgung) ermöglicht Einblick in den Lebenszyklus von Requests in einem verteilten System. Metriken im Rahmen eines [[Monitoring|Monitorings]] liefern quantitative Informationen zu Prozessen, die im System ausgeführt werden. Mittels *[[Logging]]* (Protokollierung) lässt sich Einblick in anwendungsspezifische Nachrichten, die von Prozessen ausgegeben werden, gewinnen. Diese Beobachtbarkeit ist insbesondere für die [[DevOps]]-Prinzipien des Feedback essentiell.
* '''Elastizität''' ist ''"der Grad, in dem ein System in der Lage ist, sich an Workload-Änderungen anzupassen, indem es Ressourcen in einer autonomen Art und Weise provisioniert und deprovisioniert, so dass zu jedem Zeitpunkt die verfügbaren Ressourcen so gut wie möglich mit dem aktuellen Bedarf übereinstimmen"'' <ref>{{Literatur |Autor=Nikolas Roman Herbst, Samuel Kounev, Ralf Reussner |Titel=Elasticity in Cloud Computing: What It Is, and What It Is Not |Datum=2013 |ISBN=978-1-931971-02-7 |Seiten=23–27 |Online=https://www.usenix.org/conference/icac13/technical-sessions/presentation/herbst |Abruf=2022-01-04}}</ref>.
* '''[[Skalierbarkeit]]''' kann in strukturelle Skalierbarkeit und Lastskalierbarkeit unterschieden werden. ''"Strukturelle Skalierbarkeit ist die Fähigkeit eines Systems, sich in einer gewählten Dimension ohne größere Änderungen an seiner Architektur zu erweitern. Unter Lastskalierbarkeit ist die Fähigkeit eines Systems zu verstehen, auch steigendem Datenverkehr bewältigen zu können"''.
* Service-of-Services Systeme werden bei Cloud-nativen Anwendungen zumeist im Microservice-Architekturstil verstanden. Dieser Architekturstil versteht ''"eine einzelne Anwendung als eine Suite kleiner Services, die jeweils in einem eigenen Prozess laufen und mit leichtgewichtigen Mechanismen kommunizieren. Diese Services sind um Geschäftsfunktionen herum aufgebaut und können unabhängig voneinander von vollautomatischen Bereitstellungsmechanismen aktualisiert werden. Es gibt nur ein Minimum an zentraler Verwaltung dieser Dienste, die in verschiedenen Programmiersprachen ([[Polyglottes Programm|polyglotte Programmierung]]) geschrieben sein können und unterschiedliche Datenspeichertechnologien verwenden (polyglotte Datenhaltung)"'' <ref>{{Internetquelle |url=https://martinfowler.com/articles/microservices.html |titel=Microservices |abruf=2022-01-04}}</ref>.
* '''In sich geschlossene Bereitstellungseinheiten''' (Deployment Unit) sind ein Teil der Deployment-Topologie der Anwendung zur Realisierung einer bestimmten technischen Einheit. Immer häufiger wird eine Deployment Unit als ''"ein Standardcontainer verstanden. Das Ziel eines Standardcontainers ist es, eine Softwarekomponente und alle ihre Abhängigkeiten in einem Format zu kapseln, das selbstbeschreibend und portabel ist, so dass jede konforme Laufzeitumgebung sie ohne zusätzliche Abhängigkeiten ausführen kann, unabhängig von der zugrunde liegenden Maschine und dem Inhalt des Containers"'' <ref>{{Internetquelle |url=https://github.com/opencontainers/runtime-spec |titel=Open Container Initiative Runtime Specification |hrsg=Open Container Initiative |datum=2022-01-04 |abruf=2022-01-04}}</ref>.
* '''Zustandsbehaftete Komponenten''' (meist Datenbanken) werden für ''"mehrere Instanzen einer skalierten Anwendungskomponente verwendet, die ihren internen Zustand synchronisieren, um ein einheitliches Verhalten zu bieten"'' <ref>{{Literatur |Autor=Cristoph Fehling |Titel=Cloud computing patterns : fundamentals to design, build, and manage cloud applications |Ort=Wien |Datum=2014 |ISBN=978-3-7091-1568-8 |Online=https://www.worldcat.org/oclc/871183849 |Abruf=2022-01-04}}</ref>. Da die Skalierung zustandsbehafteter Komponenten meist aufwändiger ist, als die Skalierung zustandsloser Komponenten, versucht man Zustände in möglichst wenigen zustandsbehafteten Komponenten zu isolieren.
* Unter einer '''elastischen Plattform''' versteht man eine ''"Middleware für die Ausführung von benutzerdefinierten Anwendungen, deren Kommunikation und Datenspeicherung über eine Self-Service-Schnittstelle mittels eines Netzwerks angeboten wird"'' <ref>{{Literatur |Autor=Cristoph Fehling |Titel=Cloud computing patterns : fundamentals to design, build, and manage cloud applications |Ort=Wien |Datum=2014 |ISBN=978-3-7091-1568-8 |Online=https://www.worldcat.org/oclc/871183849 |Abruf=2022-01-04}}</ref>. Solche gut automatisierbaren Plattformen sind insbesondere für die [[DevOps]]-Prinzipien des Flow essentiell.

Häufig werden Cloud-native Anwendungen daher als eine Reihe von Microservices erstellt, die in Containern ausgeführt werden <ref>{{Literatur |Autor=Sam Newman |Titel=Building Microservices, 2nd Edition |Auflage=2nd edition |Datum=2021 |ISBN=1492034029 |Online=https://www.worldcat.org/oclc/1162606138 |Abruf=2022-01-04}}</ref>. Sie können mittels  Container-Plattformen wie bspw. [[Kubernetes]] orchestriert und mit DevOps- und Git-basierten [[Continuous Integration|Continuous Integration und Deployment]]-Workflows verwaltet und bereitgestellt werden. Der Vorteil der Verwendung von Containern besteht darin, dass die gesamte Software inklusive aller Abhängigkeiten, die zur Ausführung benötigt wird, in Form in sich geschlossener Bereitstellungseinheiten vorgehalten werden kann. Container werden hierzu in virtualisierten Umgebungen ([[Betriebssystemvirtualisierung]]) ausgeführt, die die enthaltene Anwendung von ihrer Umgebung isoliert.<ref>{{Literatur |Autor=Nane Kratzke |Titel=Cloud-native Computing Software Engineering von Diensten und Applikationen für die Cloud |Auflage=1. Auflage |Ort=München |Datum=2021 |ISBN=978-3-446-46228-1 |Online= |Abruf=2022-01-03}}</ref>


== Einzelnachweise ==
== Einzelnachweise ==

Version vom 4. Januar 2022, 15:58 Uhr

Cloud-native Computing ist ein Ansatz in der Softwareentwicklung, der Cloud Computing nutzt, um "skalierbare Anwendungen in Cloud Infrastrukturen, Plattformen und Umgebungen zu erstellen und auszuführen. Dabei prägen diesen Remote-Computing-Ansatz insbesondere Technologien wie Container, Microservices sowie serverlose Funktionen und unveränderliche Infrastrukturen, die über deklarativen Code bereitgestellt werden[1].

Definition

Diese Techniken ermöglichen lose gekoppelte Software-Systeme (Cloud-native Applikationen), die resilient, beobachtbar und in automatisierten Umgebungen betreibbar sind.

"Eine Cloud-native Anwendung (CNA) ist ein verteiltes, beobachtbares, elastisches und auf horizontale Skalierbarkeit optimiertes Service-of-Services System, das seinen Zustand in (einem Minimum an) zustandsbehafteten Komponenten isoliert. Die Anwendung und jede in sich geschlossene Bereitstellungseinheit dieser Anwendung wird nach Cloud-fokussierten Designmustern entworfen und auf elastischen Self-Service-Plattformen betrieben." [2]

Eigenschaften

Cloud-native Anwendungen sind daher durch folgende Eigenschaften charakterisiert:

  • Beobachtbarkeit bei Software-Systemen bezieht sich typischerweise auf Telemetriedaten, die meist in drei Aspekte unterteilt werden: Tracing (verteilte Ablaufverfolgung) ermöglicht Einblick in den Lebenszyklus von Requests in einem verteilten System. Metriken im Rahmen eines Monitorings liefern quantitative Informationen zu Prozessen, die im System ausgeführt werden. Mittels *Logging* (Protokollierung) lässt sich Einblick in anwendungsspezifische Nachrichten, die von Prozessen ausgegeben werden, gewinnen. Diese Beobachtbarkeit ist insbesondere für die DevOps-Prinzipien des Feedback essentiell.
  • Elastizität ist "der Grad, in dem ein System in der Lage ist, sich an Workload-Änderungen anzupassen, indem es Ressourcen in einer autonomen Art und Weise provisioniert und deprovisioniert, so dass zu jedem Zeitpunkt die verfügbaren Ressourcen so gut wie möglich mit dem aktuellen Bedarf übereinstimmen" [3].
  • Skalierbarkeit kann in strukturelle Skalierbarkeit und Lastskalierbarkeit unterschieden werden. "Strukturelle Skalierbarkeit ist die Fähigkeit eines Systems, sich in einer gewählten Dimension ohne größere Änderungen an seiner Architektur zu erweitern. Unter Lastskalierbarkeit ist die Fähigkeit eines Systems zu verstehen, auch steigendem Datenverkehr bewältigen zu können".
  • Service-of-Services Systeme werden bei Cloud-nativen Anwendungen zumeist im Microservice-Architekturstil verstanden. Dieser Architekturstil versteht "eine einzelne Anwendung als eine Suite kleiner Services, die jeweils in einem eigenen Prozess laufen und mit leichtgewichtigen Mechanismen kommunizieren. Diese Services sind um Geschäftsfunktionen herum aufgebaut und können unabhängig voneinander von vollautomatischen Bereitstellungsmechanismen aktualisiert werden. Es gibt nur ein Minimum an zentraler Verwaltung dieser Dienste, die in verschiedenen Programmiersprachen (polyglotte Programmierung) geschrieben sein können und unterschiedliche Datenspeichertechnologien verwenden (polyglotte Datenhaltung)" [4].
  • In sich geschlossene Bereitstellungseinheiten (Deployment Unit) sind ein Teil der Deployment-Topologie der Anwendung zur Realisierung einer bestimmten technischen Einheit. Immer häufiger wird eine Deployment Unit als "ein Standardcontainer verstanden. Das Ziel eines Standardcontainers ist es, eine Softwarekomponente und alle ihre Abhängigkeiten in einem Format zu kapseln, das selbstbeschreibend und portabel ist, so dass jede konforme Laufzeitumgebung sie ohne zusätzliche Abhängigkeiten ausführen kann, unabhängig von der zugrunde liegenden Maschine und dem Inhalt des Containers" [5].
  • Zustandsbehaftete Komponenten (meist Datenbanken) werden für "mehrere Instanzen einer skalierten Anwendungskomponente verwendet, die ihren internen Zustand synchronisieren, um ein einheitliches Verhalten zu bieten" [6]. Da die Skalierung zustandsbehafteter Komponenten meist aufwändiger ist, als die Skalierung zustandsloser Komponenten, versucht man Zustände in möglichst wenigen zustandsbehafteten Komponenten zu isolieren.
  • Unter einer elastischen Plattform versteht man eine "Middleware für die Ausführung von benutzerdefinierten Anwendungen, deren Kommunikation und Datenspeicherung über eine Self-Service-Schnittstelle mittels eines Netzwerks angeboten wird" [7]. Solche gut automatisierbaren Plattformen sind insbesondere für die DevOps-Prinzipien des Flow essentiell.

Häufig werden Cloud-native Anwendungen daher als eine Reihe von Microservices erstellt, die in Containern ausgeführt werden [8]. Sie können mittels  Container-Plattformen wie bspw. Kubernetes orchestriert und mit DevOps- und Git-basierten Continuous Integration und Deployment-Workflows verwaltet und bereitgestellt werden. Der Vorteil der Verwendung von Containern besteht darin, dass die gesamte Software inklusive aller Abhängigkeiten, die zur Ausführung benötigt wird, in Form in sich geschlossener Bereitstellungseinheiten vorgehalten werden kann. Container werden hierzu in virtualisierten Umgebungen (Betriebssystemvirtualisierung) ausgeführt, die die enthaltene Anwendung von ihrer Umgebung isoliert.[9]

Einzelnachweise

  1. ☁️♮🏛Cloud Native Computing Foundation Policy Repo. Cloud Native Computing Foundation (CNCF), 3. Januar 2022, abgerufen am 3. Januar 2022.
  2. Kapitel 1 bis 4 - Cloud-native Computing. Abgerufen am 4. Januar 2022.
  3. Nikolas Roman Herbst, Samuel Kounev, Ralf Reussner: Elasticity in Cloud Computing: What It Is, and What It Is Not. 2013, ISBN 978-1-931971-02-7, S. 23–27 (usenix.org [abgerufen am 4. Januar 2022]).
  4. Microservices. Abgerufen am 4. Januar 2022.
  5. Open Container Initiative Runtime Specification. Open Container Initiative, 4. Januar 2022, abgerufen am 4. Januar 2022.
  6. Cristoph Fehling: Cloud computing patterns : fundamentals to design, build, and manage cloud applications. Wien 2014, ISBN 978-3-7091-1568-8 (worldcat.org [abgerufen am 4. Januar 2022]).
  7. Cristoph Fehling: Cloud computing patterns : fundamentals to design, build, and manage cloud applications. Wien 2014, ISBN 978-3-7091-1568-8 (worldcat.org [abgerufen am 4. Januar 2022]).
  8. Sam Newman: Building Microservices, 2nd Edition. 2nd edition Auflage. 2021, ISBN 1-4920-3402-9 (worldcat.org [abgerufen am 4. Januar 2022]).
  9. Nane Kratzke: Cloud-native Computing Software Engineering von Diensten und Applikationen für die Cloud. 1. Auflage. München 2021, ISBN 978-3-446-46228-1.