Was sind Microservices?

Microservices beschreiben einen Cloud-nativen Architekturansatz für die Softwareentwicklung, der eine Anwendung aus lose gekoppelten Diensten strukturiert, die über APIs oder Messaging-Protokolle miteinander kommunizieren. Jeder Dienst ist autonom und eigenständig und führt einen eigenen Prozess aus. Da Entwickler versuchen, skalierbare und stabile Anwendungen zu erstellen, sind Microservices immer beliebter geworden.

 

Microservices erklärt

Microservices, auch bekannt als Microservices-Architektur, ist eine Art von Software-Architektur, die in der cloud-nativen Anwendungsentwicklunggverwendet wird. Anwendungen, die nach diesem Design entwickelt werden, bestehen aus kleinen, unabhängigen und lose gekoppelten, bereitstellbaren Komponenten, die zusammen die Fähigkeiten der Anwendung bieten.

Jeder Dienst in der Microservices-Architektur führt eine bestimmte Geschäftsfunktion aus und kommuniziert mit anderen Microservices über genau definierte Schnittstellen, meist über RESTful APIs.

Im Gegensatz zur monolithischen Anwendung, die als eine Einheit entwickelt wird, können Entwickler mit Microservices Module erstellen, die sie unabhängig voneinander entwickeln, testen und bereitstellen können, was die Markteinführung beschleunigt. Da die Entkopplung von Microservices es Entwicklern ermöglicht, neuen Code und neue Funktionen häufiger als sonst zu veröffentlichen, können moderne Anwendungen mit den sich ändernden Kundenanforderungen Schritt halten.

Mehr als Drei Viertel der Unternehmen sind auf Microservices umgestiegenund haben ihre monolithischen Anwendungen, die von einzelnen Webservern gehostet werden, durch containerisierte, cloudnative Anwendungen ersetzt, die über einen Cluster von Hostservern verteilt sind.

 

Von serviceorientierter Architektur zu Microservices

Die serviceorientierte Architektur (SOA) gibt es seit den frühen 2000er Jahren als Möglichkeit, große, verteilte Systeme zu erstellen, indem sie in kleinere, lose gekoppelte Dienste zerlegt werden. Die Microservices-Architektur hat sich als natürliche Weiterentwicklung von SOA entwickelt.

Das Konzept der Microservices wurde 2011 von Fred George in einem Workshop über Softwarearchitektur vorgestellt. George hatte bei der Arbeit an einer E-Commerce-Website versucht, Skalierbarkeitsprobleme mit SOA zu lösen und kam auf die Idee, kleine, autonome Dienste aufzubauen.

Die Microservices-Architektur hat die SOA-Prinzipien der Service-Orientierung aufgegriffen und sie für moderne Cloud-native Anwendungen verfeinert. Aus den grobkörnigen Diensten der SOA wurden feinkörnige, granulare "Mikro"-Dienste, die sie hocheffizient machten und die Flexibilität boten, einen Technologie-Stack an einen bestimmten Dienst anzupassen. Die Microservices-Architektur reduzierte sogar die Kommunikationslast, indem sie schwerfällige SOAP APIs durch leichtgewichtige Optionen wie REST APIs oder Message Queues ersetzte.

Microservices wurden unter Softwarearchitekten schnell populär, und Unternehmen wie Netflix, Amazon, The Guardian und Spotify begannen, diese Architektur zu übernehmen.

Die Microservices-Architektur ist die Grundlage für die Vorteile, die mit einer modernen, Cloud-nativen Anwendung verbunden sind.

Abbildung 1: Die Microservices-Architektur ist die Grundlage für die Vorteile, die mit einer modernen, Cloud-nativen Anwendung verbunden sind.

 

Vorteile von Microservices

Microservices bieten ein Framework für den Aufbau Cloud-nativer Anwendungen, die sich an wechselnde Anforderungen anpassen können. Die unzähligen Vorteile ergeben sich aus der Architektur der Anwendung.

Gewandtheit

Die Microservices-Architektur eignet sich für die unabhängige Entwicklung und Bereitstellung. Im Gegensatz zu monolithischen Anwendungen, bei denen die Änderung einer Codezeile die Aktualisierung der gesamten Anwendung nach sich zieht, können Entwickler Dienste ändern oder ersetzen, ohne das verteilte System zu beeinträchtigen. Die Möglichkeit, einzelne Dienste bereitzustellen, macht es einfach, neue Funktionen hinzuzufügen oder Änderungen an einer Anwendung zurückzunehmen.

Skalierbarkeit

Die Skalierung einer gesamten Anwendung ist nicht optimal. Bei Microservices werden nur die Komponenten skaliert, die skaliert werden müssen. Entwickler können einen einzelnen Dienst nach Bedarf adressieren, was letztlich eine bessere Leistung bei hoher Belastung, die effiziente Nutzung von Ressourcen und niedrigere Infrastrukturkosten ermöglicht.

Auswahl

In der Microservices-Architektur hat die Cloud-native Anwendung keinen gemeinsamen Stack und keine gemeinsame Datenbank. Die Entwickler können die von ihnen bevorzugten Tools und Technologien auswählen, um die unterschiedlichen Anforderungen der einzelnen Dienste zu erfüllen.

Integration

Entwickler können Microservices in jeder beliebigen Sprache schreiben - und sie mit Microservices verbinden, die in einer beliebigen Sprache programmiert wurden. Darüber hinaus können Microservices auf jeder Plattform ausgeführt werden, was sie für die Integration mit Legacy-Systemen verfügbar macht.

Code-Wiederverwendung

Die Microservices-Architektur ermöglicht es Entwicklern, modulare Dienste zu erstellen, die sie in verschiedenen Anwendungen wiederverwenden können. Durch die Arbeit mit wiederverwendbaren Komponenten verkürzen Programmierer die Entwicklungszeit und verbessern die Qualität des Codes, da sie in eine Kultur der einmaligen und häufigen Wiederverwendung investieren.

Fehlertoleranz

Die Microservices-Architektur fördert die Ausfallsicherheit. Bei Diensten, die so konzipiert sind, dass sie autonom arbeiten, führt der Ausfall eines einzelnen Dienstes selten zum Stillstand der Anwendung, wie es bei monolithischen Anwendungen der Fall ist.

Zusammenarbeit

Die Microservices-Architektur ermöglicht es den Teams, gleichzeitig an verschiedenen Diensten zu arbeiten, was sich in einer schnelleren Markteinführung niederschlägt. Während Entwickler Entscheidungen treffen, ohne sich mit anderen Teams abstimmen zu müssen, fördern Microservices auch die teamübergreifende Zusammenarbeit, da jedes Team für die Entwicklung und Pflege eines Teils des Ganzen verantwortlich ist. Dies kann zu einer besseren Ausrichtung auf die Unternehmensziele und einer effizienteren Nutzung der Ressourcen führen.

Kontinuierliche Iteration

Die mit Microservices erstellte Anwendung ist so konzipiert, dass sie sich weiterentwickeln kann. Entwickler können die Kern-Microservices schnell als Minimum Viable Product bereitstellen und die Anwendung aktualisieren, wenn Teams zusätzliche Services fertigstellen. Neue Technologien können in das Design integriert werden, sobald sie auftauchen. Die auf Microservices basierende Anwendung bleibt in Arbeit und bewegt sich kontinuierlich auf die theoretische Perfektion zu.

 

Wann Sie Microservices verwenden sollten

Container-basierte Microservices bieten zwar viele Vorteile, aber sie sind nicht immer die richtige Anwendungsarchitektur für Sie. Wenn Sie softwaretechnische Entscheidungen treffen, denken Sie an Ihre Ziele für die Anwendung sowie an die Entwicklungshürden und Anforderungen, die Sie im Hinblick auf die Lebensdauer der Anwendung voraussehen. Microservices funktionieren am besten bei komplexen Anwendungen. Zu den Szenarien für den Einsatz von Microservices gehören:

Große Anwendungen

Wenn Sie eine große und komplexe Anwendung erstellen, können Sie die Anwendung mit Hilfe von Microservices in überschaubare Teile aufteilen und so die Entwicklung, Bereitstellung und Wartung erleichtern.

Komplexität der Zeitachse

Die Microservices-Architektur kann unabhängige Dienste mit unterschiedlichen Entwicklungsgeschwindigkeiten beherbergen. Selbst wenn es bei einem Dienst zu einer unerwarteten Verzögerung kommt, kann das Projekt fortgesetzt werden, ohne dass dies globale Auswirkungen auf den Zeitplan der Anwendungsentwicklung hat.

Häufige Updates

Die Microservice-Architektur ist ideal für Anwendungen, die häufig aktualisiert werden müssen, da unabhängige Dienste es den Entwicklern ermöglichen, das Modul und nicht die Anwendung zu ändern.

Hohe Skalierbarkeit

Wenn Ihre Anwendung ein hohes Verkehrsaufkommen bewältigen oder schnell skalieren muss, sind Microservices unerlässlich. Dies gilt insbesondere, wenn Sie bestimmte Teile der Anwendung skalieren müssen, anstatt die gesamte Anwendung zu skalieren.

Mehrere Teams

Wenn Sie mehrere Entwicklungsteams an derselben Anwendung arbeiten lassen, helfen Ihnen Microservices dabei, Flexibilität und Effizienz zu erhalten. Jedes Team kann an seinem Microservice arbeiten und dabei den Technologie-Stack verwenden, der für sie am besten geeignet ist, ohne sich um den Rest der Anwendung zu kümmern.

Dezentralisierte Architektur

Wenn Sie eine Anwendung mit einer dezentralisierten Architektur erstellen möchten, sind Microservices autonom und können an verschiedenen Orten bereitgestellt werden, sogar bei verschiedenen Cloud-Dienstanbietern.

Hybrid Cloud

Wenn Sie eine hybride Cloud-Architektur planen, bei der einige Dienste weiterhin vor Ort und andere in der Cloud ausgeführt werden, helfen Ihnen Microservices dabei, die Komplexität der Anwendung zu bewältigen.

API-Aufrufe, die Client-Anfragen darstellen, die vom API Gateway an die Endpunkte der internen Microservices weitergeleitet werden

Abbildung 2: API-Aufrufe, die Client-Anfragen darstellen, die vom API gateway an die Endpunkte der internen Microservices weitergeleitet werden.

 

Erstellung und Bereitstellung von Microservices-basierten Apps

Die Architektur von Microservices erfordert eine sorgfältige Planung. Bestimmte Technologien und Praktiken, die in der Produktionsumgebung üblich sind, ermöglichen es Entwicklern, Microservices-basierte Anwendungen effektiv zu entwickeln, zu pflegen und zu betreiben.

DevOps

DevOps-Praktiken, einschließlich CI/CD, sind für den Architekturansatz von Microservices unerlässlich. Im Gegensatz zu monolithischen Anwendungen sind Microservices von Natur aus komplexe verteilte Systeme mit zahlreichen beweglichen Teilen und unabhängigen Technologie-Stacks. Diese Komplexität erfordert eine häufige Zusammenarbeit zwischen Entwicklungs- und Betriebsteams, um sicherzustellen, dass die Komponenten nahtlos integriert werden.

DevOps Praktiken bieten die notwendigen Tools für Zusammenarbeit, Kommunikation und Automatisierung, um Teams während des gesamten Lebenszyklus der Softwareentwicklungeffektiv zusammenzubringen.

Kontinuierliche Lieferung

Die kontinuierliche Bereitstellung geht Hand in Hand mit Microservices und ermöglicht es Entwicklern, Software-Updates häufig und zuverlässig zu veröffentlichen, indem sie Tools zur Infrastrukturautomatisierung wie Continuous Integration Server, Bereitstellungs-Pipelines und automatisierte Test-Frameworks nutzen, um den CI/CD-Prozess zu rationalisieren.

Kontinuierliche Bereitstellung ist besonders wichtig, um sicherzustellen, dass jeder Dienst unabhängig von den anderen Microservices aktualisiert und freigegeben werden kann.

REST

Microservices kommunizieren mit Microservices - und die meisten tun dies innerhalb von Webanwendungen - was REST komplementär macht. REST (Representational State Transfer) ist ein architektonisches Entwurfsmuster für den Aufbau von RESTful APIs, mit denen Dienste über HTTP in Standardformaten wie XML, HTML und JSON kommunizieren können. Aber REST APIs sind aus mehreren Gründen die Grundlage für Microservice-basierte Anwendungen.

REST APIs sind leichtgewichtig und plattformunabhängig, d.h. sie bieten eine standardisierte Schnittstelle, über die Microservices unabhängig von der zugrunde liegenden Technologie kommunizieren können. Da Anfragen die Informationen enthalten, die für die Ausführung der Anfrage erforderlich sind, benötigen REST-APIs keinen auf dem Server gespeicherten Kontext. Sie können große Mengen an Anfragen bewältigen, ohne die Leistung zu beeinträchtigen, und die Dienste in einer REST-basierten Microservices-Architektur können sich unabhängig voneinander weiterentwickeln und effizient zustandslos kommunizieren.

Containers

Während Microservices den Teams die Möglichkeit geben, die Sprache und das Framework ihres Dienstes zu wählen, stellt die Arbeit mit verschiedenen Sprachen in derselben CD-Pipeline eine Herausforderung dar. Container abstrahieren die Varianz zwischen den Diensten, da jeder Microservice zu einer in sich geschlossenen Einheit wird, die mit ihrer Codebasis, ihrer Datenbank und ihren Abhängigkeiten verpackt ist. Die CD-Pipeline, die nun homogen ist, kann konsistente Tests für jeden Container durchführen.

Dienste können miteinander interagieren, ohne sich gegenseitig zu behindern, wenn sie durch Container getrennt sind. Sobald sie bereitgestellt sind, bieten Container eine leichtgewichtige, portable Laufzeitumgebung, die es den Diensten ermöglicht, plattformübergreifend konsistent zu funktionieren. Tools wie Docker und Kubernetes werden häufig zur Verwaltung von containerisierten Microservices eingesetzt.

Kubernetes Orchestrator

Ein Orchestrierungswerkzeug wie Kubernetes kann die zugrunde liegende Infrastruktur abstrahieren und die Verwaltung, Bereitstellung und Skalierung von Containern über mehrere Server hinweg automatisieren. Seine Erweiterbarkeit ermöglicht es Entwicklern und Betreibern außerdem, ihre bevorzugten Open-Source- und kommerziellen Software-Tools zu verwenden und so die manuelle Arbeit der Containerverwaltung zu reduzieren.

Serverlos

Serverloses Computing ist eine weitere Option für die Bereitstellung von Microservices. Serverlose Architekturen nutzen Functions as a Service (FaaS)-Plattformen, um noch kleinere Einheiten der Bereitstellung zu schaffen und bei Bedarf zu skalieren. Obwohl serverlose Architekturen die Abhängigkeit von Anbietern erhöhen können, bieten sie geringere Betriebskosten, geringere Komplexität und kürzere Entwicklungszeiten.

 

Microservices Bewährte Praktiken

Der Entwurf einer Microservice-Architektur erfordert sorgfältige Planung und Überlegung. Um erfolgreiche Microservices-basierte Anwendungen zu erstellen, sollten Entwickler die folgenden Best Practices beachten:

  • Bereichsorientiertes Design: Domain-driven Design (DDD) ist ein Designansatz, der sich auf die Geschäftsdomäne und das Verhalten der Anwendung konzentriert. Es hilft den Entwicklern, die Anwendung in kleinere, besser verwaltbare Komponenten aufzuteilen, was die Erstellung, Bereitstellung und Wartung erleichtert.
  • Dienstgrenzen: Bei der Entwicklung einer Microservice-Architektur ist es wichtig, klare Service-Grenzen zu definieren. Jeder Microservice sollte eine klar definierte Verantwortung haben.
  • Kleine Dienstleistungen: Halten Sie die Dienste "mikro", konzentrieren Sie sich auf eine einzige Aufgabe. Wenn Sie dieses Grundprinzip aus den Augen verlieren, leidet die Verwaltbarkeit.
  • API design: Microservices kommunizieren über APIs. Verwenden Sie daher konsistente, skalierbare und sichere APIs, die den Datenzugriff auf autorisierte Anwendungen, Benutzer und Server beschränken.
  • Dezentralisierte Datenverwaltung: Microservices-Anwendungen erfordern eine Vielzahl von Speicher- und Datenbankoptionen. Jeder Microservice sollte seinen eigenen Datenspeicher haben. Dieser Ansatz hilft Ihnen, Dateninkonsistenzen zu vermeiden und ermöglicht es Ihnen, jeden Microservice autonom zu skalieren. Sie möchten, dass das Entwicklungsteam die Datenbank für jeden Dienst auswählt, um sicherzustellen, dass sie am besten zu ihrem Projekt passt.
  • CI/CD pipeline: Die Implementierung von CI/CD wird Ihnen helfen, Fehler schnell zu finden und zu beheben, was besonders wertvoll ist, wenn Sie mehrere Codebases in einer Microservices-Architektur verwalten müssen.
  • Vorsätzliche Resilienz: Schützen Sie die Anwendung vor Shutdowns aufgrund von Abhängigkeitsfehlern. Verwenden Sie nach Möglichkeit keine Remote Procedure Calls (RPCs) zwischen Microservices und integrieren Sie Funktionen wie Circuit Breaker, um kaskadierende Ausfälle zu verhindern.
  • SOP: Entwickeln Sie Standardbetriebsverfahren, die Codierungskonventionen, Verzeichnisstrukturen und Kommunikationsprotokolle definieren. Die Einhaltung einer Reihe von Standards führt zu konsistenten und verwaltbaren Microservices.

 

Einführung von Microservices

eBay, Etsy, Uber - unzählige Unternehmen haben ihre monolithischen Anwendungen aufgelöst und in Microservices-basierte Architekturen umgewandelt, um Skalierungsvorteile, geschäftliche Agilität und finanzielle Gewinne zu erzielen.

Organisationen, die den Übergang zu Microservices planen, sollten zunächst DevOpseinführen, um für die Bewältigung der damit verbundenen Komplexität gerüstet zu sein. Rechnen Sie bei der Planung Ihres Projekts grundsätzlich mit den unten beschriebenen Schritten.

Identifizieren Sie die Geschäftsfähigkeiten

Der erste Schritt bei der Umstellung auf eine Microservices-Architektur besteht darin, die geschäftlichen Fähigkeiten oder Funktionen zu ermitteln, die Ihre Anwendung unterstützen soll. Dies wird Ihnen helfen, den Umfang Ihrer Anwendung zu definieren und Ihre Entscheidungen darüber zu treffen, welche Funktionen für die Entwicklung priorisiert werden sollten und wie diese Microservices gestaltet und miteinander integriert werden sollten.

Zerlegen Sie die monolithische Anwendung

Die meisten Organisationen verwenden domain-driven Design oder feature-basierte Dekomposition, um ihre monolithischen Anwendungen zu zerlegen.

Nachdem Sie die Geschäftsfunktionen der Anwendung identifiziert haben, definieren Sie die Servicegrenzen für jeden Microservice und stellen sicher, dass jeder Microservice eine eindeutige, klar definierte Verantwortung hat. Sie möchten die Abhängigkeiten zwischen den Geschäftsfunktionen, Datenspeichern und externen Systemen abbilden. Definieren Sie auf der Grundlage der begrenzten Kontexte und Abhängigkeiten die Microservices, die die monolithische Anwendung ersetzen werden.

Jeder Microservice, der sich auf eine einzelne Geschäftsfunktion konzentriert, sollte über klare Schnittstellen verfügen. Überprüfen Sie, wie auf die Dateneinheiten zugegriffen wird, und überlegen Sie schließlich, wie Sie die Daten partitionieren können, um Abhängigkeiten zwischen den Diensten zu verringern.

Definieren Sie Service-Schnittstellen

Implementieren Sie die Serviceschnittstellen für jeden Microservice und stellen Sie sicher, dass die Schnittstelle die alleinige Verantwortung des Microservices widerspiegelt. Sie können verschiedene Techniken wie RESTful APIs oder Messaging-Protokolle verwenden, um die Service-Schnittstellen zu definieren.

Implementierung und Test der Dienste

Je nach Ihren Anforderungen und Ihrer Erfahrung wählen Sie die Programmiersprachen und Frameworks für die Implementierung der Dienste. Iterieren Sie das Design nach Bedarf, einschließlich des Testens der neuen Schnittstellen, Kommunikationsprotokolle und Datenspeicher.

Containerisierung der Dienste

Sobald Sie die Dienste implementiert und getestet haben, sollten Sie sie mithilfe von Container-Technologien wie Docker oder Kubernetes containerisieren. Die Containerisierung ermöglicht es Ihnen, die Dienste unabhängig bereitzustellen und zu verwalten.

Automatisieren Sie die Bereitstellung und Orchestrierung

Automatisieren Sie die Orchestrierung der Dienste mit Tools wie Kubernetes oder Docker Swarm. Neben der effizienten Rationalisierung der Bereitstellung von Diensten verbessert die Automatisierung durch Kubernetes oder Docker die Zuverlässigkeit und Verfügbarkeit der Anwendung. Beide Plattformen können erkennen, wenn eine Serviceinstanz ausfällt oder nicht mehr reagiert und Maßnahmen zur Behebung des Problems ergreifen. Kubernetes zum Beispiel kann ausgefallene Instanzen neu starten oder auf andere Knoten verlagern, während Docker den ausgefallenen Container automatisch auf einen anderen Knoten migrieren kann.

Überwachen und Verwalten der Dienste

Die Dekomposition einer monolithischen Anwendung ist kein einmaliger Vorgang. Sie muss gewartet und aktualisiert werden, wenn sich die Anforderungen der Anwendung und ihrer Benutzer weiterentwickeln. Überwachen Sie die neuen Microservices und verfolgen Sie wichtige Metriken wie Reaktionszeit und Ressourcenauslastung.

 

Absicherung von Microservices

Hochgradig verteilte, Cloud-native Microservices-Anwendungen bringen komplexe Sicherheitsprobleme mit sich. Anstelle eines einzigen Einstiegspunktes gibt es Dutzende, wenn nicht Hunderte von potenziellen Schwachstellen - und jede davon muss gesichert werden. APIs und Code-Abhängigkeiten sind nur zwei Risikoquellen in der wachsenden Angriffsfläche moderner Anwendungen.

Sicherheit von Webanwendungen und APIs

Moderne Anwendungen verarbeiten Daten aus einer Vielzahl von Quellen - Standard-Webanfragen, API-Aufrufe von Mobilgeräten, Cloud-Ereignisse, Telemetrie-Kommunikation von IoT-Geräten, Cloud-Speicher, usw. Darüber hinaus kann eine einzige Webanfrage eines Kunden (d.h. Nord-Süd-Verkehr) Hunderte von API-Aufrufen zwischen internen Microservices (d.h. Ost-West-Verkehr) auslösen.

Die Komplexität von API-zentrierten Webanwendungen erfordert skalierbare, flexible und mehrschichtige Strategien, die für jede Art von Arbeitslast in jeder Art von Umgebung oder Cloud-Architektur funktionieren. Die Absicherung der Frontend-Weboberfläche der Cloud-nativen Anwendung reicht nicht aus. Cloud-native Anwendungen erfordern Schutz auf der Anwendungsebene für Cloud-native APIs.Webanwendungs- und API-Sicherheit (WAAS) ist unerlässlich.

Code-Abhängigkeiten und Analyse der Software-Zusammensetzung

Open-Source-Softwarekomponenten machen etwa 70% der Cloud-nativen Anwendungen aus. Dies beschleunigt zwar die Entwicklung, aber viele Open-Source-Pakete und ihre Abhängigkeiten enthalten Sicherheitslücken. Außerdem kann jede Version eines abhängigen OSS-Pakets wichtige Funktionen ändern. Ohne vollständige Transparenz bleiben Schwachstellen unentdeckt.

Eigenständige Software Composition Analysis (SCA) -Tools decken Open-Source-Risiken zu spät im Entwicklungszyklus auf, was zu einem Rückstau von Schwachstellen führt, die nicht immer behoben werden können. Getrennte Tools für SCA und IaC-Sicherheit führen zu verrauschten Alarmen ohne Kontext und Wissen über zusammenhängende Risiken. Da Lücken ohne Laufzeit- und Workload-Abdeckung unvermeidlich sind, ist es am besten, Cloud-native Anwendungen mit integrierter cloud-nativer Sicherheitzu sichern.

Code-to-Cloud CNAPP

Eine cloud-native Plattform für den Anwendungsschutz (CNAPP) identifiziert und priorisiert kritische Risiken der gesamten Cloud-nativen Anwendung und integriert mehrere Arten von Sicherheit, um einen umfassenden Code-to-Cloud-Schutz zu bieten - Cloud Security Posture Management (CSPM), Cloud Workload Protection, Cloud Infrastructure Entitlement Management (CIEM), Kubernetes Security Posture Management (KSPM), Infrastructure-as-Code-Sicherheit, WAAS, SCA und mehr.

Führungskräfte im Bereich Cloud-Sicherheit, die sich mit der Frage beschäftigen, wie sie die schnelle Entwicklung von Anwendungen mit Cloud-nativen Technologien wie Containern, Microservices und serverlosen Funktionen am besten absichern können, sollten die Einführung einer CNAPP in Betracht ziehen.

 

Microservices FAQs

Alle Cloud-nativen Anwendungen sind Microservices-Anwendungen, aber nicht alle Microservices-Anwendungen sind Cloud-nativ. Die Microservices-Architektur kann vor Ort oder in der Cloud implementiert werden und erfordert nicht unbedingt Cloud-spezifische Technologien oder Tools.
Microservices kommunizieren über APIs, und ein API Gateway wird oft als Zwischenschicht verwendet, insbesondere wenn die Anzahl der Dienste in einer Anwendung wächst. Das API Gateway befindet sich am äußeren Rand Ihrer Microservices und fungiert als Proxy, der den gesamten eingehenden Datenverkehr verwaltet, indem er einen einzigen Zugangspunkt bietet und alle Anfragen weiterleitet.
Ein Service Mesh ist eine spezielle Infrastrukturschicht, die auf ein Microservice-basiertes System angewendet wird und es den Entwicklern ermöglicht, die Kommunikation von Service zu Service innerhalb einer Microservice-Architektur zu trennen und zu verwalten. Die Service-Mesh-Technologie kann Dinge wie Service-Erkennung, Lastausgleich und Verkehrsmanagement übernehmen, so dass sich die Entwickler auf das Schreiben von Code konzentrieren können, anstatt die Infrastruktur zu verwalten.
Da es sich bei Microservices um verteilte Systeme mit mehreren Komponenten und Diensten handelt, spielen Protokollierung und Überwachung eine wesentliche Rolle bei der Aufrechterhaltung des Gesamtzustands und der Leistung des Systems. Jeder Microservice erzeugt ein Protokoll, das aggregiert und analysiert werden muss, um Probleme im System zu identifizieren.
Zustandslose Microservices halten keine Zustandsinformationen zwischen Anfragen aufrecht. Sie sind so konzipiert, dass sie autonom arbeiten und sich nicht auf zuvor gespeicherte Daten verlassen, um eingehende Anfragen zu bearbeiten. Zustandslose Microservices sind einfacher zu verwalten und zu skalieren, können aber zusätzliche Komplexität erfordern, um die Datenkonsistenz über mehrere Anfragen hinweg zu erhalten. Zustandslose Microservices werden häufig für einfache und unabhängige Aufgaben wie Datenvalidierung oder Autorisierung verwendet, für die keine zustandsabhängigen Operationen erforderlich sind.
Stateful Microservices sind eine Art von Microservice, der den Zustand einer Anwendung verwaltet. Das bedeutet, dass der Microservice Zugriff auf Daten hat und diese ändern kann, die zwischen den Anfragen aufbewahrt werden, z.B. Benutzersitzungsdaten, Datenbankverbindungen oder andere zustandsbezogene Informationen. Stateful Microservices bieten Vorteile wie höhere Leistung, bessere Datenkonsistenz und geringere Komplexität des Anwendungsdesigns. Sie erfordern jedoch eine zusätzliche Verwaltung und können schwer horizontal skalierbar sein.
Wenn eine Domäne ein Problem darstellt, das es zu lösen gilt - wie es beim domänenorientierten Design (DDD) der Fall ist - ist das Domänenmodell das Modell, das die Lösung des Problems implementiert.
Bounded Context stellt eine Reihe von funktionalen Merkmalen, ein Domänenmodell, innerhalb der Grenzen einer Domäne dar. Mit anderen Worten: So wie eine Unterdomäne ein Segment der Domäne ist, ist ein begrenzter Kontext ein Segment der Lösung. Ein Microservice ist also ein begrenzter Kontext - aber nicht alle begrenzten Kontexte sind Microservices. Begrenzte Kontexte sind in der Tat nicht unbedingt voneinander isoliert.
Verteiltes Tracing ist eine Technik, die es Entwicklern ermöglicht, eine Anfrage durch mehrere Microservices zu verfolgen und alle Probleme im Anfragefluss zu identifizieren. Verteilte Tracing-Tools ermöglichen es den Entwicklern, den Fluss der Anfragen durch das System zu verfolgen und etwaige Engpässe oder Probleme im Anfragefluss zu erkennen.
Microservices-Architekturen werden mit der Microservices-Pattern-Sprache entworfen und implementiert. Zu den Mustersprachen gehören Muster für die Ereignisbeschaffung, die Datenverwaltung, die Kommunikation und mehr.
Service Discovery Patterns helfen Anwendungen und Diensten, sich in einer verteilten Microservices-Umgebung gegenseitig zu finden. Service-Instanzen ändern sich aufgrund von Skalierung, Upgrades und Service-Ausfällen dynamisch, und diese Muster bieten Erkennungsmechanismen, um mit der Vergänglichkeit umzugehen. Der Lastausgleich kann Muster zur Erkennung von Diensten nutzen, indem Gesundheitsprüfungen und Dienstausfälle als Auslöser für die Neuverteilung des Datenverkehrs verwendet werden.
Adapter-Microservices-Muster übersetzen Beziehungen zwischen ansonsten inkompatiblen Klassen oder Objekten. Eine Anwendung, die auf APIs von Drittanbietern angewiesen ist, kann ein Adaptermuster verwenden, um die Kommunikation zwischen der Anwendung und den APIs sicherzustellen.
Strangler-Anwendungsmuster helfen dabei, den Prozess der Umstrukturierung einer monolithischen Anwendung in Microservices zu steuern, indem Teile des Monolithen langsam durch Microservices ersetzt werden.
Backend-for-Frontend (BFF)-Muster geben an, wie die Daten zwischen dem Server und den Clients abgerufen werden. Die BFF fügt eine Schicht zwischen der Benutzeroberfläche und den Ressourcen ein, die die Schnittstelle aufruft. Dies ermöglicht es Entwicklern, einen Backend-Typ pro Benutzeroberfläche zu erstellen und zu unterstützen und dabei die besten Optionen für diese Schnittstelle zu verwenden. Dies wiederum verbessert die Leistung des Frontends, da die Ressourcen auf die Bedürfnisse der Benutzeroberfläche zugeschnitten werden.
Entitäts- und Aggregatmuster klassifizieren Daten auf sinnvolle Weise. Eine E-Commerce-Website könnte beispielsweise das Entity-Muster verwenden, um einzelne Produkte darzustellen, und das Aggregat-Muster, um Bestellungen darzustellen, die Sammlungen von Produkten sind, die von einem Käufer bestellt wurden.
Caching ist ein wichtiger Bestandteil vieler Microservices-Anwendungen, da es dazu beitragen kann, die Leistung zu verbessern und die Belastung des Backends zu verringern. Die meisten Cloud Service Provider (CSPs) bieten ihren Kunden einen verwalteten Caching-Service an.
Objektspeicher sind ein wesentlicher Bestandteil vieler Microservices-Anwendungen, da sie das Speichern und Abrufen großer Dateien und Datenobjekte ermöglichen. Die meisten CSPs bieten einen verwalteten Objektspeicherdienst an, der zum Speichern und Abrufen von Objekten für Microservices-Anwendungen verwendet werden kann.