I microservizi dividono il sistema in piccoli servizi indipendenti. Per le app mobili, ciò significa API scalabili e in evoluzione. Questa guida illustra come implementare e utilizzare i microservizi per le applicazioni.
Cosa sono i microservizi
Definizione
Architettura in cui l'applicazione è composta da servizi piccoli e indipendenti.
Caratteristiche
- Indipendenza di distribuzione
- Unico responsabile del dominio
- Comunicazione tramite rete
- Può avere tecnologie diverse
Differenza monolitica
Monolite: tutti insieme. Microservizi: separati per responsabilità.
Vantaggi
Scalabilità indipendente
Ogni servizio è scalabile in base alla domanda.
Distribuzione indipendente
L'aggiornamento di uno non influisce sugli altri.
Resilienza
Fallirne uno non distrugge tutto.
Tecnologie multiple
Utilizza lo strumento migliore per ogni lavoro.
Squadre indipendenti
Proprietà chiara, meno dipendenze.
Svantaggi
Complessità operativa
Più parti da gestire.
Latenza di rete
La comunicazione tra i servizi aggiunge latenza.
Debug difficile
Tieni traccia dei problemi tra i servizi.
Coerenza dei dati
Le transazioni distribuite sono complesse.
In alto
Per i sistemi piccoli, potrebbe essere eccessivo.
Quando usarlo
Buono per
- Grandi squadre
- Domini complessi
- Necessità di scala indipendente
- Evoluzioni frequenti
Evita
- Piccole squadre
- MVP
- Domini semplici
Decomposizione
Per dominio
Contesti DDD limitati.
Per funzionalità
Autenticazione, pagamenti, catalogo, ecc.
Per caso d'uso
Flussi di utenti indipendenti.
Gateway API
Funzione
Punto di ingresso unico per i clienti.
Responsabilità
Routing, autenticazione, limitazione della velocità, aggregazione.
Strumenti
Kong, Gateway API AWS, Nginx.
BFF (Backend per Frontend)
Concetto
Gateway specifico per il tipo di client.
Utilizzo
BFF per dispositivi mobili, un altro per il web.
Vantaggi
Ottimizzato per ogni cliente.
Comunicazione
Sincrono
RESTO, gRPC. Richiesta/risposta.
Asincrono
Code di messaggi. Eventi.
Compromessi
Il sistema sincrono è semplice, il sistema asincrono è resiliente.
Scoperta del servizio
Problema
Come si trovano i servizi?
Soluzioni
Console, Kubernetes DNS, AWS Cloud Map.
Osservabilità
Registrazione
Log centralizzati con ID di correlazione.
Tracciamento
Tracciamento distribuito con Jaeger, X-Ray.
Metriche
Per servizio e aggregato.
##Resilienza
Interruttore automatico
Interrompere la chiamata al servizio non riuscito.
Riprova
Riprovare con il backoff.
Tempo scaduto
Non aspettare per sempre.
###Paratia
Isolare le risorse.
Gestione dei dati
Database per servizio
Ogni servizio con la sua banca.
Coerenza finale
Transazioni distribuite evitate.
Eventi
Comunicare i cambiamenti tramite eventi.
Saghe
Transazioni lunghe tramite compensazione.
Distribuzione
Contenitori
Docker per incapsulare i servizi.
Orchestrazione
Kubernetes da gestire.
###CI/CD
Conduttura per servizio.
Blu-Verde/Canarino
Distribuzioni sicure.
Per dispositivi mobili
API ottimizzata
Meno chiamate, dati aggregati.
Conserva
Caching CDN e API.
###Non in linea
Resilienza quando la rete fallisce.
Controllo delle versioni
API con versione per compatibilità.
Test
###Unità
Per il servizio.
Integrazione
Comunicazione tra servizi.
###Contratto
Consumatore e fornitore concordano il contratto.
Dall'inizio alla fine
Flussi completi attraverso i servizi.
Migrazione
Motivo Strangolatore
Sostituisce gradualmente monolite.
Inizia in piccolo
Inizia con un servizio.
###Estrai
Identificare domini ben definiti.
Errori comuni
Distribuzione prematura
Microservizi prima che tu ne abbia bisogno.
Nanoservizi
Servizi troppo piccoli.
Nessuna osservabilità
Impossibile eseguire il debug.
Ignora latenza
Più chiamate di rete.
Conclusione
I microservizi offrono scalabilità e flessibilità, ma con complessità. Valuta se necessario per il tuo contesto, investi in osservabilità e opera con disciplina. Per le app mobili, concentrati su API ottimizzate e resilienza.
##Domande frequenti
1) Ho bisogno di Kubernetes per microservizi? Non necessariamente. Ma aiuta molto su larga scala.
2) Quanti servizi sono troppi? Non esiste un numero magico. Se la squadra non riesce a gestirlo, è troppo.
3) Il cellulare deve chiamare direttamente microservizi? Generalmente no. Utilizza API Gateway o BFF.
4) I microservizi sono sempre migliori? No. Un monolite ben fatto può essere migliore in molti casi.
5) Come iniziare con microservizi? Inizia monolite modulare. Estrarre quando necessario.
Leggi anche
- Backend per applicazioni: architettura, tecnologie e best practice
- Monolito vs Microservizi: quale architettura scegliere
- Architettura software scalabile: come costruire sistemi che crescono
- Architettura software scalabile - Best practice per la scalabilità
- Architettura software scalabile - Migliori pratiche per startup
- Architettura software scalabile - Best practice per piccoli team
