Migrazione ai microservizi da un'app monolitica

Quando inizi con un'applicazione legacy e monolitica, devi trovare parti che possono essere ritagliate e spostate in microservizi separati. Spesso, un'app monolitica ben strutturata avrà divisioni molto naturali e una classe di servizio funzionerà già da interfaccia per un livello di archiviazione dei dati e logica di business. Queste classi sono la posizione ideale per connettere le chiamate client al microservizio.

Separazione delle funzionalità in un'app monolitica

Per la separazione delle app puoi scegliere tra due approcci:

  • Cerca nell'applicazione una logica di business che possa essere separata.
  • Trova il codice naturalmente isolato, ad esempio usando strumenti di analisi del codice statico per identificare le sezioni.
  • Esamina la tua applicazione per individuare la logica che potresti trarre vantaggio da impostazioni di configurazione della scalabilità o requisiti di memoria diversi rispetto al resto dell'applicazione. Ciò potrebbe comportare risparmi sui costi che potrebbero portare a un migliore utilizzo delle risorse.

Potrebbe essere necessario refactoring del codice per rimuovere le dipendenze non naturali. Ti consigliamo di eseguire il refactoring all'interno del codice legacy e di eseguirne il deployment in produzione prima di tentare di separare l'app in servizi separati.

Le aree comuni dei microservizi includono:

  • Dati dell'utente o dell'account
  • Gestione di autorizzazioni e sessioni
  • Preferenze o impostazioni di configurazione
  • Servizi di notifica e comunicazione
  • Foto e contenuti multimediali, in particolare i metadati
  • Worker coda di attività

Passaggi per la migrazione di un'app

Dopo che una serie di classi è stata identificata come candidata a diventare un microservizio, i passaggi successivi includono:

  • Lasciare il codice esistente attivo e operativo nell'applicazione legacy per facilitare il rollback.
  • Creando un nuovo repository di codice o almeno una sottodirectory nel tuo repository esistente.
  • Copia dei corsi nella nuova posizione.
  • Scrivere un livello di visualizzazione che fornisca gli hook dell'API HTTP e formatta i documenti della risposta nel modo corretto.
  • Formula del nuovo codice come applicazione separata (crea un app.yaml).
  • Deployment del nuovo microservizio come servizio o di un progetto separato.
  • Testare il codice per assicurarsi che funzioni correttamente.
  • Migrazione dei dati dall'app legacy al nuovo microservizio. Vedi sotto per saperne di più.
  • Modifica dell'applicazione legacy esistente per utilizzare la nuova applicazione di microservizi.
  • Deployment dell'applicazione legacy modificata
  • Verifica che tutto funzioni come previsto e che non sia necessario eseguire il rollback all'applicazione legacy.
  • Rimozione di qualsiasi codice non valido dall'applicazione legacy.

Migrazione dei dati su un'applicazione attiva

La migrazione dei dati in un'applicazione attiva può essere complicata e dipendere molto dalla tua situazione. Spesso, per facilitare il rollback e il rollback, devi scrivere codice che completi le entità Cloud Datastore vecchie e nuove, possibilmente utilizzando un'API temporanea sul microservizio, quindi scrivere codice che esegua la migrazione del set di dati esistente, ad esempio come MapReduce. Questo processo di solito prevede una certa quantità di codice temporaneo e dati ridondanti. A seconda delle specifiche della tua situazione, potrebbe anche essere necessario eseguire una migrazione dei dati di recupero dopo il rilascio. Fai attenzione a non sovrascrivere i dati più recenti con quelli meno recenti.

Anche se sembra molto lavoro, si tratta di un'occorrenza comune ed è importante consentire il rollback e il rollback nel caso in cui il passaggio al nuovo microservizio non vada a buon fine. Puoi rimuovere il codice temporaneo ed eliminare i dati dalla posizione di archiviazione precedente solo dopo aver verificato che la migrazione di tutti gli elementi sia stata eseguita correttamente e che tutto funzioni come previsto. Assicurati di eseguire dei backup durante la procedura.

Passaggi successivi