In diesem Modul werden Sie die Anwendung "node.js" in mehrere miteinander verbundene Dienste aufteilen und das Bild jedes Dienstes in ein Amazon ECR-Repository übertragen. Die Erstellung beginnen.
Die Endanwendungsarchitektur nutzt Amazon Elastic Container Service und den Application Load Balancer.
a. Client
Der Client führt Datenübertragungsanfragen über Port 80 durch.
b. Load Balancer
Der Application Load Balancer (ALB) leitet den externen Datenverkehr an den richtigen Dienst. Der ALB prüft die Clientanforderung und leitet die Anforderung mithilfe der Routingregeln an eine Instanz und einen Port für die Zielgruppe weiter, die der Regel entsprechen.
c. Zielgruppen
Jeder Dienst ist mit einer Zielgruppe verknüpft, welche die Instanzen und Ports jedes Containers für diesen Dienst ausführt.
d. Containerisierte Dienste
Amazon Elastic Container Service (Amazon ECS) stellt jeden Dienst in einem Container über einen EC2-Cluster bereit. Jeder Container beinhaltet nur ein einzelnes Feature.
Isolierung von Abstürzen
Selbst die besten Entwicklerorganisationen können verheerende Abstürze in der Produktion nicht immer vermeiden. Neben der Befolgung aller empfohlenen Standardmethoden für die ordnungsgemäße Behandlung von Abstürzen bietet die Einrichtung von Microservices einen Ansatz, der die Auswirkungen solcher Abstürze begrenzen kann. Eine gute Microservice-Architektur bedeutet, dass nur ein Teil Ihres Dienstes ausfällt, wenn ein Teil Ihres Dienstes abstürzt. Der Rest Ihres Dienstes arbeitet uneingeschränkt weiter.
Isolation als Sicherheit
Wenn in einer monolithischen Anwendung eine Funktion der Anwendung eine Sicherheitsverletzung aufweist, zum Beispiel eine Schwachstelle, die Remote-Code-Ausführung ermöglicht, dann müssen Sie davon ausgehen, dass ein Angreifer auch Zugriff auf jede andere Funktion des Systems haben könnte. Das kann zum Beispiel gefährlich sein, wenn Ihr Feature zum Uploaden eines Profilbilds ein Sicherheitsproblem hat, was sich dann auf Ihre gesamte Datenbank mit Benutzerpasswörtern auswirkt. Wenn Sie Features in Microservices mithilfe von Amazon ECS aufteilen, haben Sie sicheren Zugriff auf die AWS-Resources, wenn Sie jedem Service eine IAM-Rolle zuweisen. Wenn die bewährten Methoden für Microservices befolgt werden, hat das zur Folge, dass ein Angreifer, der einen Service beeinträchtigt, nur Zugriff auf die Ressourcen dieses Services hat und von diesem Service aus nicht auf weitere Services zugreifen kann ohne sich dort erneut Zugriff zu verschaffen.
Unabhängige Skalierung
Wenn Funktionen in Microservices aufgeteilt sind, ist es möglich, die Infrastruktur und die Anzahl der Vorgänge jeder einzelnen Microservice-Klasse unabhängig von den anderen zu skalieren. Dies erleichtert die Kostenbemessung einzelner Funktionen, Funktionen, die möglicherweise zunächst optimiert werden müssen, zu erkennen sowie die zuverlässige Erhaltung der Leistung anderer Funktionen, wenn eine bestimmte Funktion beim Ressourcenbedarf nicht unter Kontrolle ist.
Entwicklungsgeschwindigkeit
Microservices senken die Risiken bei der Entwicklung, wodurch ein Team schneller vorwärts kommen kann. Bei einem Monolith kann sich jede neu hinzugefügte Funktion potenziell auf andere Funktionen auswirken, die der Monolith enthält. Entwickler müssen die Auswirkungen von jeglichem Code sorgfältig abwägen, den sie hinzufügen, und sicherstellen, dass sie nichts beeinträchtigen. Eine ordnungsgemäße Microservice-Architektur, andererseits, besteht aus neuem Code für jede neue Funktion, die Teil eines neuen Diensts wird. Entwickler können sich sicher sein, dass der Code, den sie schreiben, keine Auswirkungen auf den vorhandenen Code haben kann, außer sie erstellen wissentlich eine Verbindung zwischen zwei Microservices.