Progetta un'applicazione basata su microservizi

Quando progetti un'applicazione utilizzando l'architettura dei microservizi, considera di aderire alle best practice sui microservizi e ai 12 modelli di successo per lo sviluppo dei microservizi. Questi modelli incorporano le considerazioni sull'applicazione a 12 fattori e si basano sull'esperienza nelle distribuzioni di microservizi insieme a un database convergente.

Scopri le best practice per la progettazione di microservizi

Seguendo alcune best practice durante la progettazione di microservizi, puoi assicurarti che la tua applicazione sia facile da scalare, distribuire e gestire. Tenere presente che non tutte le procedure ottimali descritte qui potrebbero essere rilevanti per l'applicazione.

Ogni microservizio deve implementare un'unica parte delle funzionalità dell'applicazione. I team di sviluppo devono definire i limiti e le responsabilità di ogni microservizio. Un approccio consiste nel definire un microservizio per ogni task richiesto di frequente nell'applicazione. Un approccio alternativo consiste nel dividere la funzionalità per attività aziendali e quindi definire un microservizio per ogni area.

Considerare i seguenti requisiti nella progettazione:

  • Microservizi reattivi: i microservizi devono restituire una risposta ai client richiedenti, anche quando il servizio non riesce.
  • Compatibilità con le versioni precedenti: quando si aggiunge o si aggiorna la funzionalità di un microservizio, le modifiche ai metodi e ai parametri API non devono influire sui client. L'API REST deve rimanere compatibile con le versioni precedenti.
  • Comunicazione flessibile: ogni microservizio può specificare il protocollo da utilizzare per la comunicazione tra i client e il gateway API e per la comunicazione tra i microservizi.
  • Idempotenza: se un client chiama più volte un microservizio, dovrebbe produrre lo stesso risultato.
  • Operazione efficiente: la progettazione deve facilitare il monitoraggio e la risoluzione dei problemi. Per implementare questo requisito viene comunemente utilizzato un sistema di log.

Scopri i 12 modelli per il successo nei microservizi

I microservizi sono difficili da implementare e questi 12 modelli semplificano l'utilizzo dei vantaggi di agilità e semplicità di un'architettura mircoservices utilizzando una piattaforma di database convergente insieme a container e Kubernetes.

  1. Contesti limitati: progetta in anticipo o suddividi i monoliti in microservizi con un consulente per la rifattorizzazione dei dati.
  2. Accoppiamento lento: separa i dati isolando lo schema dal microservizio e utilizzando una mesh di eventi affidabile.
  3. CI/CD per i microservizi: un database multi-tenant lo rende una soluzione naturale per i microservizi. Aggiungi un database collegabile (PDB) per distribuire e creare in modo indipendente. Un'applicazione (con Jenkins) e uno schema (Liquibase, Flyway ed EBR nel database) sono anche buone scelte.
  4. Sicurezza per i microservizi: proteggi ogni endpoint dal gateway API, al load balancer, alla mesh degli eventi e al database.
  5. Osservabilità unificata per i microservizi: metriche, log e trace in un unico dashboard per l'ottimizzazione e la risoluzione automatica dei problemi.
  6. Posta in uscita transazionale: invio di un messaggio e di un'operazione di manipolazione dei dati in una singola transazione locale.
  7. Reliable event mesh: mesh evento per tutti gli eventi con messaggistica transazionale ad alto throughput e pubblicazione e sub; con trasformazioni degli eventi e instradamento degli eventi.
  8. Aggregazione degli eventi: gli eventi sono effimeri e notificano o attivano azioni in tempo reale; dopo di che vengono aggregati nel database, il database è l'argomento compattato definitivo.
  9. CQRS (Command Query Responsibility Segregation): posizione in cui sono disponibili copie operative e analitiche dei dati per i microservizi.
  10. Sagas: transazioni tra microservizi, con il supporto di reti di eventi e scritture contabili di deposito a garanzia nel database.
  11. Programmazione poliglotta: supporto per microservizi e formati di messaggi in una vasta gamma di linguaggi, utilizzando JSON come payload.
  12. Back-end as a service (BaaS): un'infrastruttura di microservizi con le giuste dimensioni per le distribuzioni di test, sviluppo e produzione (da piccole a medie) su qualsiasi distribuzione cloud o on-premise per le applicazioni Spring Boot.

Inizia con un pattern contesto limitato

Il pattern consigliato per implementare la persistenza per un microservizio consiste nell'utilizzare un singolo pluggable database (PDB) in un container database. Per ogni microservizio, mantieni privati i dati persistenti e crea il pluggable database come parte dell'implementazione del microservizio.

In questo pattern, i dati persistenti privati sono accessibili solo tramite l'API del microservizio.

Nella seguente figura viene illustrata la progettazione della persistenza per i microservizi.

Segue la descrizione di microservices_persistence.png
Descrizione dell'immagine microservices_persistence.png
Le seguenti varianti di questa implementazione di microservizi si applicano ai database convergenti:
  • Tabelle private: ogni servizio possiede un set di tabelle o documenti.
  • Schema: ogni servizio possiede uno schema o una raccolta di database privati.
  • Database: ogni servizio possiede un pluggable database all'interno di un container database, come illustrato nella figura.

Un anti-pattern di persistenza per i tuoi microservizi consiste nel condividere uno schema di database tra più microservizi. Puoi implementare transazioni atomiche, coerenti, isolate e durature per garantire la coerenza dei dati. Un vantaggio di questo anti-pattern è che utilizza un semplice database. Gli svantaggi sono che i microservizi potrebbero interferire tra loro durante l'accesso al database e i cicli di sviluppo potrebbero rallentare perché gli sviluppatori di microservizi diversi devono coordinare le modifiche allo schema, il che aumenta anche le dipendenze tra i servizi.

I tuoi microservizi possono connettersi a un'istanza di Oracle Database in esecuzione su Oracle Cloud Infrastructure. Il database multi-tenant Oracle supporta più pluggable database (PDB) all'interno di un contenitore. Questa è la scelta migliore per il livello di persistenza per i microservizi, per l'isolamento del contesto limitato di dati, sicurezza e alta disponibilità. In molti casi, è possibile utilizzare un numero inferiore di PDB con isolamento a livello di schema.

Comprendi il valore dell'implementazione dei microservizi nei container

Dopo aver creato il microservizio, è necessario containerizzarlo. Un microservizio in esecuzione nel proprio container non influisce sui microservizi distribuiti negli altri container.

Un container è un'unità di software standardizzata, utilizzata per sviluppare, spedire e distribuire applicazioni.

I container vengono gestiti mediante un motore container, ad esempio Docker. Il motore container fornisce gli strumenti necessari per raggruppare tutte le dipendenze dell'applicazione come container.

Puoi utilizzare il motore Docker per creare, distribuire ed eseguire le applicazioni di microservizi nei container. I microservizi in esecuzione nei container Docker hanno le seguenti caratteristiche:

  • Standard: i microservizi sono portatili. Possono correre ovunque.
  • Leggero: Docker condivide il kernel del sistema operativo (OS), non richiede un sistema operativo per ogni istanza ed è eseguito come un processo leggero.
  • Sicuro: ogni container viene eseguito come un processo isolato. I microservizi sono quindi sicuri.

Il processo di containerizzazione di un microservizio prevede la creazione di un'immagine Dockerfile, la creazione e la creazione di un'immagine contenitore che includa le relative dipendenze e la configurazione ambientale, la distribuzione dell'immagine a un motore Docker e il caricamento dell'immagine in un registro container per lo storage e il recupero.

Segue la descrizione di docker_container_process.png
Descrizione dell'immagine docker_container_process.png

Informazioni sull'orchestrazione dei microservizi mediante Kubernetes

I microservizi in esecuzione nei container devono essere in grado di interagire e integrare per fornire le funzionalità dell'applicazione richieste. Questa integrazione può essere ottenuta tramite l'orchestrazione dei container.

L'orchestrazione dei container consente di avviare, arrestare e raggruppare i container nei cluster. Consente inoltre l'alta disponibilità e la scalabilità. Kubernetes è una delle piattaforme di orchestrazione dei container che puoi utilizzare per gestire i container.

Dopo aver containerizzato i tuoi microservizi, puoi distribuirli in Oracle Cloud Infrastructure Container Engine for Kubernetes.

Prima di distribuire l'applicazione di microservizi containerizzati nel cloud, devi distribuirla e testarla in un motore Kubernetes locale, come indicato di seguito:

  • Creare l'applicazione di microservizi.
  • Crea immagini Docker per containerizzare i tuoi microservizi.
  • Esegui i tuoi microservizi nel motore Docker locale.
  • Eseguire il push delle immagini del contenitore in un registro contenitore.
  • Distribuisci ed esegui i tuoi microservizi in un motore Kubernetes locale, come Minikube.

Dopo aver testato l'applicazione in un motore Kubernetes locale, distribuirla in Oracle Cloud Infrastructure Container Engine for Kubernetes come indicato di seguito.

  • Crea un cluster.
  • Scaricare il file kubeconfig.
  • Installare lo strumento kubectl su un dispositivo locale.
  • Preparare il file deployment.yaml.
  • Distribuire il microservizio nel cluster.
  • Testare il microservizio.

Il diagramma riportato di seguito mostra il processo di distribuzione di un'applicazione di microservizi containerizzati in Oracle Cloud Infrastructure Container Engine for Kubernetes.

Segue la descrizione di oke_deployment_process.png
Descrizione dell'immagine oke_deployment_process.png

Scopri di più su Oracle Backend for Spring Boot and Microservices

Spring Boot è il framework più diffuso per la creazione di microservizi in Java. Uno dei 12 modelli di successo nell'architettura dei microservizi che si distribuisce con successo è il modello Backend as a Service (BaaS). Oracle BaaS è disponibile nel Marketplace OCI per la distribuzione utilizzando Terraform e Ansible entro 30 minuti. Oracle BaaS fornisce un set di servizi di piattaforma necessari per distribuire e gestire i microservizi e sono parte integrante dell'ambiente Spring Boot. Il diagramma riportato di seguito mostra i dettagli della piattaforma Oracle Backend for Spring Boot and Microservices.