Distribuzione verde blu con un singolo database

4

Sto provando ad analizzare la strategia di implementazione del verde blu per fornire zero aggiornamenti di downtime per i nostri clienti. Abbiamo un'applicazione web monolitica basata su Java aziendale che utilizza Oracle come archivio dati. Ci sono alcune sfide che mi piacerebbe ottenere input esperti

  1. Con ogni tipo di oggetto di database (procedure, tabelle, indici, vincoli, ecc.) abbiamo bisogno di una gestione speciale, la maggior parte di essi è dichiarata qui . Questo alla fine richiede una buona gestione del codice per ogni caso d'uso.

  2. Con le distribuzioni in verde blu, come gestiamo sessioni web utente attive? Rileviamo eventi di chiusura della sessione?

Lo sforzo di implementazione per un tale approccio richiede tempo (circa un anno, come suggerisce il post) e va curato per assicurarci di farlo bene. Ci sono alternative più semplici e migliori a questo?

Grazie!

    
posta Andy Dufresne 22.12.2018 - 07:20
fonte

1 risposta

4

Load Balancer

Per il secondo punto, utilizzare un bilanciatore di carico adatto. È possibile spostare una parte del traffico attraverso, prima per dimostrare la nuova implementazione, quindi accelerare lentamente. Permette anche una rapida strategia di backout.

Controllo delle versioni del database

Ci sono due modi per farlo:

  1. Rendi compatibile il modulo dati autoritativo (lo schema SQL) con versioni precedenti di Green / Blue (qualsiasi versione precedente dello schema / procs / etc può essere abbandonata / cancellata / scaricata).
  2. Spostare l'origine autorevole dei dati altrove e trattare lo schema SQL come una vista aggiornata dinamicamente. È sufficiente ricreare quella vista su ogni distribuzione con tutti i procs / schema / ecc con un prefisso di versione di qualche tipo.

Nel primo metodo, potrebbe essere opportuno distanziare l'applicazione dalla rappresentazione dei dati e spostare tutti i trasferimenti di dati tramite le stored procedure. Ciò garantisce un'interfaccia pulita che può essere portata in avanti. Ciò consente al percorso di migrazione di essere come:

  1. Crea nuovi tipi / tabelle e aggiungi solo nuove colonne alle tabelle correnti, effettua qualsiasi pulizia della vecchia versione.
  2. Distribuire stored procedure in grado di gestire strutture di dati vecchie e nuove. Leggi tutto, scrivi nuovo.
  3. Eseguire la migrazione dei dati e il massaggio essenziali per la nuova distribuzione.
  4. Scambia il traffico sull'applicazione appena distribuita.
  5. Esegui qualsiasi ulteriore migrazione e massaggio dei dati per eseguire il porting alla nuova struttura dati.
  6. Attendi una nuova distribuzione o distribuisci stored procedure in grado di gestire solo le nuove strutture dati.
  7. se non in attesa esegue la pulizia di vecchi dati, processi memorizzati, tabelle, ecc ...

Se questo sembra troppo complesso, o eseguire manipolazioni su dati in tempo reale è troppo pericoloso, spostare la definizione di ciò che è autorevole in un'altra fonte di dati potrebbe essere ciò di cui hai bisogno. Con questo non importa più cosa ci sia nell'archivio dati sql (a meno che non stia memorizzando il registro eventi nel qual caso tranne quella parte). La distribuzione ora sembra:

  1. Crea nuovo schema, proc stored, tipi, ecc. con un nuovo spazio dei nomi o con un prefisso.
  2. Esegui la scansione del registro eventi dal primo record, aggiorna lo schema come pertinente.
  3. Una volta raggiunti in gran parte, passa lentamente il traffico alla nuova distribuzione.
    • gli utenti della vecchia distribuzione possono ancora interagire con gli utenti nella nuova distribuzione, entrambi leggono il registro eventi e ricevono gli aggiornamenti.
  4. Se sei felice che tutti siano nella nuova distribuzione e non sia necessario eseguire il rollback, interrompi il vecchio sistema.
  5. cancella il vecchio schema, procs, ecc ...

L'applicazione dovrà inserire i dati due volte, prima nel registro eventi, quindi dovrà leggere il registro eventi e aggiornare i dati della tabella associati. Tra l'altro, questo permetterà a diverse versioni del prodotto di lavorare insieme per un po 'di tempo a costo di un lavoro extra.

    
risposta data 24.12.2018 - 06:37
fonte

Leggi altre domande sui tag