In questo modulo suddividerai l’applicazione node.js in diversi servizi interconnessi e invierai ciascuna immagine a un repository Amazon ECR. Inizia a creare

L'architettura dell'applicazione finale usa Amazon Elastic Container Service e Application Load Balancer. 

panoramica dell'architettura

a. Client
Il client inoltra le richieste di traffico attraverso la porta 80.

b. Sistema di bilanciamento del carico
Application Load Balancer (ALB) consente di inoltrare il traffico esterno verso il servizio corretto. ALB ispeziona la richiesta del client e utilizza le regole di routing per indirizzare la richiesta all’istanza e alla porta per il gruppo di destinazione che soddisfa la regola.

c. Gruppi di destinazione
Ogni servizio ha un gruppo di destinazione che registra le istanze e le porte di ogni container in esecuzione per quel servizio.

d. Servizi che utilizzano i container
Amazon Elastic Container Service (Amazon ECS) consente di distribuire ciascun servizio in un container attraverso un cluster EC2. Ogni container gestisce una singola funzione.

Isolamento dei crash di sistema
Anche le organizzazioni più tecnologizzate possono subire crash di sistema anomali durante la produzione. Oltre alla messa in pratica di best practice standard per la gestione efficace di crash di sistema, un approccio che può limitarne l'impatto è la creazione di microservizi. Possedere una buona architettura di microservizi significa che, se si verifica un malfunzionamento in una micro parte del servizio, questa sarà l'unica a risentirne. Il resto del servizio sarà in grado di continuare a funzionare correttamente.

Isolamento per la sicurezza
Se un’applicazione monolitica subisce una violazione di sicurezza, ad esempio una vulnerabilità che consente l'esecuzione del codice in remoto, è probabile che chi ha compiuto la violazione abbia acquisito l'accesso a tutte le altre funzionalità del sistema. Questo può essere pericoloso se, ad esempio, la funzione di caricamento avatar presenta un problema di sicurezza che può compromettere il database con le password degli utenti. Suddividere le caratteristiche in microservizi con Amazon ECS consente di proteggere l’accesso alle risorse AWS mediante l’assegnazione del proprio ruolo IAM a ciascun servizio. Se le best practice per i microservizi vengono seguite e qualcuno viola la sicurezza compromettendo un servizio, avrà accesso solamente alle risorse di quel servizio e non potrà accedere orizzontalmente ad altre risorse senza violare la sicurezza anche di quei servizi.

Scaling indipendente
Quando le caratteristiche sono suddivise in microservizi la quantità di infrastruttura e il numero di istanze utilizzati da ogni classe di microservizi possono essere ridimensionati in modo indipendente. In questo modo è più semplice misurare il costo di una particolare funzionalità, identificare le caratteristiche che è necessario ottimizzare prima, oltre a mantenere le prestazioni affidabili per le altre caratteristiche se una determinata funzione sta eccedendo nell’utilizzo delle risorse.

Rapidità dello sviluppo
I microservizi riducono i rischi in fase di sviluppo, permettendo così a un team di lavorare più velocemente. In un monolito, l’aggiunta di una nuova caratteristica può incidere su tutte le altre caratteristiche in esso contenute. Gli sviluppatori devono valutare attentamente l’impatto di qualsiasi codice che viene aggiunto e assicurarsi di non compromettere niente. D’altro canto, un’architettura di microservizi corretta prevede un nuovo codice per ogni nuova caratteristica aggiunta a un nuovo servizio. In tal modo, gli sviluppatori hanno la certezza che qualsiasi codice che scriveranno non avrà un impatto sul codice esistente a meno che non stabiliscano una connessione esplicita tra due microservizi.

Tempo di completamento: 20 minuti

Servizi utilizzati:


Segui i passaggi indicati nelle istruzioni seguenti per suddividere il monolito. Fai clic sul numero della fase per espandere la sezione.

break-the-monolith
  • Fase 1. Effettua il provisioning dei repository ECR

    Nelle due fasi precedenti, hai distribuito la tua applicazione come un monolito utilizzando un unico servizio e un singolo repository container d’immagine. Per distribuire l’applicazione come tre microservizi dovrai effettuare il provisioning di tre repository (uno per ciascun servizio) in Amazon ECR.

    I nostri tre servizi sono:

    1. utenti
    2. thread
    3. post


    Crea il repository:

    • Passa a Console Amazon ECR.
    • Seleziona Create repository (Crea repository)
    • Nome del repository:
      • utenti
      • thread
      • post
    • Registra le informazioni del repository: [account-id].dkr.ecr.[region].amazonaws.com/[service-name]

    Ripeti questi passaggi per ogni microservizio.

    Ora dovresti avere quattro repository in Amazon ECR.

    repository
  • Fase 2. Autentica Docker con AWS (facoltativo)

    Puoi saltare questo passaggio se hai completato di recente il Modulo 1 di questo workshop.

    • Esegui aws ecr get-login --no-include-email --region [region]
      Esempio: ws ecr get-login --no-include-email --region us-west-2
    • Otterrai un consistente output che inizia con docker login -u AWS -p ... Copia questo intero output, incollalo ed eseguilo nel terminale.

    • Dovrebbe essere visualizzata la conferma “Login riuscito”

      ⚐ NOTA: se il login non è riuscito, è possibile che si disponga di una versione più recente di Docker che ha svalorizzato il flag -e none. Per risolvere il problema, incolla l’output nell’editor di testo, rimuovi -e none dalla fine dell’output ed esegui l’output aggiornato nel terminale.

  • Fase 3. Crea e invia immagini per ogni servizio

    Nella cartella del progetto amazon-ecs-nodejs-microservices/3-microservices/services, troverai le cartelle con i file per ciascun servizio. Si noti che ogni microservizio è sostanzialmente un clone del servizio monolitico precedente.

    È possibile vedere in che modo ciascun servizio è ora specializzato confrontando il file db.json in ciascun servizio e nel servizio api monolitico. In passato post, thread e utenti venivano memorizzati in un singolo file di database. Ora ognuno viene memorizzato nel file di database del suo servizio corrispondente.

    Apri il terminale e imposta il percorso per la sezione 3-microservizi/servizi del codice GitHub. ~/amazon-ecs-nodejs-microservices/3-microservices/services

    Crea e inserisci il tag in ogni immagine

    • Nel terminale, esegui docker build -t [service-name] ./[service-name] Esempio: docker build -t posts ./posts
    • Terminata la compilazione, inserisci il tag nell’immagine in modo che sia possibile inviarla al repository: docker tag [service-name]:latest [account-id].dkr.ecr.[region].amazonaws.com/[service-name]:v1 esempio: docker tag posts:latest [account-id].dkr.ecr.us-west-2.amazonaws.com/posts:v1
    • Esegui docker push per inviare la tua immagine a ECR: docker push [account-id].dkr.ecr.[region].amazonaws.com/[service-name]:v1

    Se passi al repository ECR, dovresti vedere le tue immagini con il tag v1. 

    ♻ Ripeti questi passaggi per ogni immagine di microservizio.  

    ⚐ NOTA: assicurati di creare e applicare il tag a tutte e tre le immagini.