Migrazione ai microservizi da un'app monolitica

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

Separare le funzionalità in un'app monolitica

Puoi adottare due approcci per separare la tua app:

  • Cerca nella tua applicazione la logica di business che può essere separata.
  • Trova il codice isolato in modo naturale, ad esempio utilizzando strumenti di analisi del codice statico per identificare le sezioni.
  • Esamina la tua applicazione per individuare la logica che potrebbe trarre vantaggio da impostazioni di configurazione di 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.

Potresti dover eseguire il refactoring del codice per rimuovere le dipendenze non naturali. Ti consigliamo di eseguire il refactoring all'interno del codice legacy e di implementarlo in produzione prima di tentare di separare l'app in servizi separati.

Le aree comuni per i microservizi includono:

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

Passaggi per la migrazione di un'app

Una volta identificato un insieme di classi come candidato a diventare un microservizio, i passaggi successivi includono:

  • Lasciando il codice esistente in posizione e operativo nell'applicazione legacy per facilitare il rollback.
  • Creazione di un nuovo repository di codice o almeno di una sottodirectory nel repository esistente.
  • Copia dei corsi nella nuova posizione.
  • Scrivere un livello di visualizzazione che fornisca gli hook dell'API HTTP e formatti i documenti di risposta nel modo corretto.
  • Formulando il nuovo codice come applicazione separata (crea un app.yaml).
  • Deployment del nuovo microservizio come servizio o progetto separato.
  • Test del codice per assicurarsi che funzioni correttamente.
  • Eseguire la migrazione dei dati dall'app legacy al nuovo microservizio. Continua a leggere per una discussione.
  • Modifica dell'applicazione legacy esistente per utilizzare la nuova applicazione di microservizi.
  • Deployment dell'applicazione legacy modificata
  • Verificando che tutto funzioni come previsto e che non sia necessario eseguire il rollback all'applicazione precedente.
  • Rimozione di qualsiasi codice inutilizzato dall'applicazione legacy.

Migrazione dei dati su un'applicazione live

La migrazione dei dati su un'applicazione live può essere complicata e dipende molto dalla tua situazione. Spesso, per facilitare il roll forward e il rollback, devi scrivere codice che popola le entità Cloud Datastore vecchie e nuove, possibilmente utilizzando un'API temporanea sul microservizio, e poi scrivere codice che esegue la migrazione del set di dati esistente, ad esempio come MapReduce. Questa procedura di solito comporta una certa quantità di codice temporaneo e dati ridondanti. A seconda delle specifiche della tua situazione, potresti anche dover 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 un lavoro lungo, è un evento comune ed è importante per consentire il roll forward e il rollback nel caso in cui il cutover al nuovo microservizio non vada a buon fine. Puoi rimuovere il codice temporaneo ed eliminare i dati dalla vecchia posizione di archiviazione solo dopo aver verificato che la migrazione sia stata eseguita correttamente e che tutto funzioni come previsto. Assicurati di eseguire backup durante il percorso.

Passaggi successivi