In diesem Modul stellen Sie Ihre Anwendung node.js als eine Reihe miteinander verbundener Services hinter einem Application Load Balancer (ALB) bereit. Dann nutzen Sie den ALB, um den Verkehr nahtlos vom Monolith zu den Microservices zu verlagern. Die Erstellung beginnen.

Dies ist der Prozess, dem Sie folgen, um Mikroservices aufzustellen und den Datenverkehr der Anwendung sicher vom Monolith zu entfernen.

Architektur-Übersicht
  1. Bereitgestellter Monolith
    Dies ist die Startkonfiguration. Die monolithische Anwendung node.js wird in einem Container auf Amazon ECS ausgeführt.
  2. Microservices starten
    Mit den drei Containerbildern, die Sie im vorherigen Modul erstellt und an Amazon ECR gesendet haben, starten Sie drei Microservices auf Ihrem vorhandenen Amazon ECS-Cluster.
  3. Zielgruppen konfigurieren
    Wie in Modul 2 fügen Sie eine Zielgruppe für jeden Service hinzu und aktualisieren Sie die ALB-Regeln, um die neuen Microservices zu verbinden.
  4. Den Datenverkehr verschieben und den Monolith ausschalten
    Wenn Sie eine Regel im ALB ändern, leiten Sie den Datenverkehr an die laufenden Microservices weiter. Sobald alles in Ordnung ist, schalten Sie den Monolith aus.

Folgen Sie der nachfolgenden Schritt-für-Schritt-Anleitung, um die Microservices bereitzustellen. Klicken Sie auf jede Schrittnummer, um den Abschnitt zu erweitern.

break-the-monolith
  • Schritt 1. Aufgabendefinitionen für Ihre Services schreiben

    Sie stellen drei neue Microservices auf demselben Cluster bereit, den Sie seit Modul 2 ausführen. Wie in Modul 2 schreiben Sie für jeden Service Aufgabendefinitionen.

    ⚐ HINWEIS: Es ist möglich, mehrere Container zu einer Aufgabendefinition hinzuzufügen. So könnten Sie alle drei Microservices als unterschiedliche Container in einem einzigen Service ausführen. Dies wäre jedoch immer noch monolithisch, da jeder Container linear mit dem Service skaliert werden müsste. Ihr Ziel ist es, drei unabhängige Services zu haben, und für jeden Service ist eine eigene Aufgabendefinition erforderlich, in der ein Container mit dem Bild für den jeweiligen Service ausgeführt wird.

    Sie können entweder diese Aufgabendefinitionen auf der Benutzeroberfläche der Konsole ausführen oder die Vorgänge beschleunigen, indem Sie sie als JSON schreiben. Um die Aufgabendefinition als JSON-Datei zu schreiben, wählen Sie am unteren Rand des Bildschirms der neuen Aufgabendefinition die Option "Konfigurieren über JSON" aus.

    Die Parameter für die Aufgabendefinition sind:

    • Name = [Servicename] 
    • Image = [service ECR repo URL]:latest 
    • cpu = 256 
    • memory = 256 
    • Container Port = 3000 
    • Host Post = 0



    Oder mit JSON:

    {
        "containerDefinitions": [
            {
                "name": "[service-name]",
                "image": "[account-id].dkr.ecr.us-west-2.amazonaws.com/[service-name]:[tag]",
                "memoryReservation": "256",
                "cpu": "256",
                "essential": true,
                "portMappings": [
                    {
                        "hostPort": "0",
                        "containerPort": "3000",
                        "protocol": "tcp"
                    }
                ]
            }
        ],
        "volumes": [],
        "networkMode": "bridge",
        "placementConstraints": [],
        "family": "[service-name]"
    }

    ♻ Wiederholen Sie diesen Vorgang, um eine Aufgabendefinition für jeden Service zu erstellen:

    • Beiträge
    • Threads
    • Benutzer
  • Schritt 2. Konfigurieren des Application Load Balancer: Zielgruppen

    Wie in Modul 2 konfigurieren Sie für jeden Ihrer Services Zielgruppen. Zielgruppen ermöglichen es dem Datenverkehr, jeden Service korrekt zu erreichen.

    Überprüfen Sie Ihren VPC-Namen: Der AWS CloudFormation-Stapel hat eine eigene VPC, die höchstwahrscheinlich nicht Ihre Standard-VPC ist. Es ist wichtig, dass Sie Ihre Zielgruppen mit der richtigen VPC konfigurieren.

    • Navigieren Sie zum Abschnitt des Load Balancers der EC2-Konsole.
    • Sie sollten sehen, dass ein Load Balancer mit dem Namen "demo" bereits existiert.
    • Wählen Sie das Kontrollkästchen aus, um die Details des Load Balancers anzuzeigen.
    • Notieren Sie den Wert für das VPC-Attribut auf der Detailseite.

     

    Konfigurieren Sie die Zielgruppen

    • Navigieren Sie zum Abschnitt der Zielgruppe der EC2-Konsole.
    • Wählen Sie "Zielgruppe erstellen".
    • Konfigurieren Sie die Zielgruppe (ändern Sie keine Standardwerte, wenn sie hier nicht angegeben sind): Name = [Servicename] Protokoll = HTTP Port = 80 VPC = Wählen Sie die VPC, die zu Ihrem Load Balancer aus dem vorherigen Schritt passt
      • Erweiterte Einstellungen für die Zustandsprüfung: Gesicherter Schwellenwert = 2 Ungesicherter Schwellenwert = 2 Timeout = 5 Intervall = 6
    • Wählen Sie Erstellen.

     

    ♻ Wiederholen Sie diesen Vorgang, um eine Zielgruppe für jeden Service zu erstellen:

    • Beiträge
    • Threads
    • Benutzer

     

    Zu guter Letzt erstellen Sie eine vierte Zielgruppe

    • drop-traffic

    Diese Zielgruppe ist ein Dummy-Ziel. Mit ihr verhindern Sie, dass der Datenverkehr Ihren Monolithen erreicht, nachdem Ihre Microservices vollständig ausgeführt wurden. Sie müssen insgesamt 5 Zielgruppen in Ihrer Tabelle haben.

    Zielgruppen
  • Schritt 3. Empfänger-Regeln konfigurieren

    Der Empfänger prüft eingehende Verbindungsanforderungen an Ihren ALB, um den Datenverkehr entsprechend weiterzuleiten.

    Im Moment laufen alle vier Ihrer Dienste (der Monolith und Ihre drei Microservices) hinter demselben Load Balancer. Um den Übergang vom Monolithen zu den Microservices zu schaffen, leiten Sie den Datenverkehr zu Ihren Microservices und stoppen Sie den Datenverkehr zu Ihrem Monolithen.

    Öffnen Sie Ihren Empfänger

    • Navigieren Sie zum Abschnitt des Load Balancers der EC2-Konsole.
    • Sie sollten sehen, dass ein Load Balancer mit dem Namen "demo" bereits existiert.
    • Wählen Sie das Kontrollkästchen aus, um die Details des Load Balancers anzuzeigen.
    • Wählen Sie die Registerkarte "Empfänger" aus.

     

    Aktualisieren Sie die Empfänger-Regeln

    • Wählen Sie Regeln anzeigen/bearbeiten > für den Empfänger.
    • Wählen Sie das + und fügen Sie die Regel ein.
    • Die Regelkriterien sind:
      • IF Path = /api/[Servicename]* THEN Forward to [Servicename]
      • Zum Beispiel: Path = /api/posts* wird weitergeleitet zu den Beiträgen (posts)
    • Erstellen Sie vier neue Regeln, eine für die Aufrechterhaltung des Datenverkehrs zum Monolith und eine für jeden Service. Sie haben insgesamt fünf Regeln, einschließlich der Standardregel. Stellen Sie sicher, dass Sie Ihre Regeln in dieser Reihenfolge hinzufügen:
      • API: /api* wird weitergeleitet zu api
      • Benutzer: /api/users* wird weitergeleitet zu den Benutzern (users)
      • Threads: /api/threads* wird weitergeleitet zu den Threads
      • Beiträge: /api/posts* wird weitergeleitet zu den Beiträgen (posts)
    • Wählen Sie den Zurück-Pfeil oben links auf der Seite aus, um zur Konsole des Load Balancers zurückzukehren.
    Empfänger-Regeln konfigurieren
  • Schritt 4. Bereitstellen Ihrer Microservices

    Nun stellen Sie Ihre drei Dienste auf Ihrem Cluster bereit. Wiederholen Sie diese Schritte für jeden Ihrer drei Services:

    • Navigieren Sie auf der linken Seite der Amazon ECS-Konsole zum Menü "Cluster".
    • Wählen Sie Ihren Cluster: BreakTheMonolith-Demo-ECSCluster.
    • Wählen Sie auf der Registerkarte "Services" die Option "Erstellen" aus.
    • Konfigurieren Sie den Service (ändern Sie keine Standardwerte) Aufgabendefinition = wählen Sie den höchsten Wert für X: [Servicename]: X (X sollte in den meisten Fällen = 1 sein) Servicename = [Servicename] Anzahl der Aufgaben = 1
    • Wählen Sie "ELB konfigurieren".
      • ELB-Typ = Application Load Balancer
      • Wählen Sie für die IAM-Rolle BreakTheMonolith-Demo-ECSServiceRole.
      • Wählen Sie Ihre Load Balancer-Demo aus.
      • Wählen Sie "Zu ELB hinzufügen" aus.
    • Fügen Sie Ihren Service zur Zielgruppe hinzu:
      • Empfänger-Port = 80:HTTP
      • Zielgruppenname = Wählen Sie Ihre Gruppe: [Servicename].
    • Wählen Sie "Speichern".
    • Wählen Sie "Service erstellen".
    • Wählen Sie "Service anzeigen".


    Es dauert nur ein paar Sekunden, bis alle Services gestartet sind. Vergewissern Sie sich, dass alle Services und Aufgaben ordnungsgemäß ausgeführt werden, bevor Sie fortfahren.

    Microservices bereitstellen
  • Schritt 5. Datenverkehr zu Ihren Microservices umleiten

    Momentan laufen Ihre Microservices, aber der gesamte Datenverkehr fließt noch zu Ihrem Monolith-Service.

    Aktualisieren Sie die Empfänger-Regeln, um den Datenverkehr an die Microservices weiterzuleiten:

    • Navigieren Sie zum Abschnitt des Load Balancers der EC2-Konsole.
    • Wählen Sie in der Load Balancer-Demo Regeln anzeigen/bearbeiten > für den Empfänger.
    • Löschen Sie die erste Regel (/api* wird weitergeleitet zu api).
    • Aktualisieren Sie die Standardregel, um sie an drop-traffic weiterzuleiten.

    Ihre Regeln müssen folgendermaßen aussehen:

    Datenverkehr zu Ihren Microservices umleiten

    Schalten Sie den Monolith aus: Jetzt fließt der Datenverkehr zu Ihren Microservices und Sie können den Monolith-Service herunterfahren.

    • Navigieren Sie zu Ihrem Amazon ECS-Cluster BreakTheMonolith-Demo-ECSCluster zurück.
    • Wählen Sie den api-Service und dann "Aktualisieren".
    • Ändern Sie die Anzahl der Aufgaben auf 0.
    • Wählen Sie "Service aktualisieren".

     

    Amazon ECS leert nun alle Verbindungen aus den Containern, die der Service auf dem Cluster bereitgestellt hat, und stoppt danach die Container. Wenn Sie die Bereitstellungs- oder Aufgabenlisten nach etwa 30 Sekunden aktualisieren, erkennen Sie, dass die Anzahl der Aufgaben auf 0 eingestellt ist. Der Service ist immer noch aktiv. Wenn Sie aus irgendeinem Grund eine Wiederherstellung durchführen müssen, können Sie ihn einfach aktualisieren, um weitere Aufgaben bereitzustellen.

    • Wählen Sie den api-Service und dann "Löschen". Bestätigen Sie den Löschvorgang.


    Sie haben Ihre node.js nun ohne Ausfallzeiten vollständig vom Monolithen auf die Microservices umgeleitet.

  • Schritt 6. Ihre Bereitstellung prüfen

    Suchen Sie Ihre Service-URL: Es ist die gleiche URL, die Sie in Modul 2 dieses Tutorials verwendet haben.

    • Navigieren Sie zum Abschnitt des Load Balancers der EC2-Konsole.
    • Wählen Sie Ihre Load Balancer Demo-Microservices aus.
    • Kopieren Sie den Wert für den DNS-Namen und fügen Sie ihn in Ihren Browser ein.
    • Sie sollten nun die Nachricht "Bereit zum Empfangen von Anforderungen" sehen.

     

    Beachten Sie die Werte für jeden Microservice: Ihr ALB leitet den Datenverkehr aufgrund der Anfrage-URL weiter. Um die einzelnen Services anzuzeigen, fügen Sie einfach den Servicenamen am Ende Ihres DNS-Namens wie folgt hinzu:

    • http://[DNS name]/api/users
    • http://[DNS name]/api/threads
    • http://[DNS name]/api/posts
    Beachten Sie die Werte für jeden Microservice

    ⚐ HINWEIS: Diese URLs funktionieren ebenso genau wie bei der Bereitstellung des Monolithen. Dies ist sehr wichtig, da alle APIs oder Endverbraucher, die eine Verbindung zu dieser Anwendung erwarten würden, nicht von den vorgenommenen Änderungen betroffen sind. Der Übergang vom Monolithen zu den Microservices erforderte keine Änderungen an anderen Teilen Ihrer Infrastruktur.

    Sie können auch Tools wie Postman zum Testen Ihrer APIs verwenden.