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.
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.