Vai al contenuto

Migrazioni dati

Esegue le migrazioni dati in Go incluse in ogni rilascio.

Come funziona

Alcune modifiche non possono essere espresse in SQL: la riscrittura dei payload degli eventi in un nuovo formato binario, la normalizzazione dei dati legacy, il ricalcolo dei campi derivati. Ogni modifica di questo tipo viene inclusa nel sistema come migrazione codificata. Il job esegue ogni migrazione registrata, nell’ordine:

  1. Verifica se ogni migrazione ha lavoro residuo — ogni migrazione fornisce un controllo “in attesa?” di basso costo
  2. Esegue quelle in attesa — ogni migrazione analizza le righe candidate e le riscrive. Le letture tollerano lo stato precedente alla migrazione, pertanto il deploy e la migrazione non devono essere sincronizzati
  3. Ricostruisce le proiezioni (opzionale) — una migrazione che modifica i payload degli eventi in modo tale da richiedere una nuova osservazione da parte delle proiezioni lo dichiara come operazione successiva. Al termine del batch di migrazioni, il worker pianifica Ricostruzione proiezioni dipendenti come nuova esecuzione. L’esecuzione concatenata appare nell’interfaccia di amministrazione come voce separata avviata rigorosamente dopo il completamento delle migrazioni

Quando viene eseguito

Il job è guidato dall’operatore. È registrato presso il worker ma non si attiva autonomamente — l’API non lo esegue automaticamente all’avvio. Va avviato manualmente una volta per ogni deploy quando è necessaria una migrazione, da AmministrazioneEsecuzioni job.

L’avvio automatico è stato disabilitato poiché le repliche API in autoscaling accoderebbero ciascuna un’esecuzione duplicata, e l’esecuzione concorrente sulle stesse righe genera contesa sul database e un’ondata di eventi di replay.

Parametri

Il job non prevede parametri. L’insieme delle migrazioni da eseguire è determinato dalla versione dell’applicazione distribuita.

Risultati del job

La mappa dei risultati contiene una chiave per ogni migrazione registrata:

ValoreSignificato
"skipped" (stringa)Il controllo “in attesa?” della migrazione ha restituito false — nessuna operazione da eseguire
Mappa annidataLa migrazione è stata eseguita; la mappa contiene i relativi contatori (ad es. righe elaborate, errori)

Quando viene eseguita almeno una migrazione contrassegnata come “ricostruisce le proiezioni”, il risultato include anche next_jobs: ["rebuild-employee-projections"] e il worker pianifica automaticamente quel job.

Riesecuzione

Le migrazioni sono idempotenti: la query candidata di ogni migrazione esclude le righe già migrate. Rieseguire il job dopo un successo parziale riprende dal punto in cui si era interrotta l’esecuzione precedente.

Risoluzione dei problemi

ProblemaSoluzione
Il risultato della migrazione indica “skipped”La migrazione non ha righe in attesa — è la condizione normale una volta completata
Errori durante una migrazioneAprire i dettagli dell’esecuzione. Gli errori per singola riga vengono mostrati; il fallimento dell’intera esecuzione indica solitamente una condizione fatale. Correggere i dati e rieseguire
Il job successivo di ricostruzione proiezioni non è stato eseguitoSe l’esecuzione delle migrazioni non ha raggiunto lo stato “completato” (fallita a metà), il dispatcher successivo viene ignorato. Correggere il fallimento, rieseguire le migrazioni, quindi rieseguire manualmente Ricostruzione proiezioni dipendenti se necessario