Strategie per gestire ambienti di sistema indisciplinati

2

Nel nostro reparto IT sviluppiamo più sistemi in parallelo, i sistemi vengono distribuiti in diversi ambienti e si parlano tra loro utilizzando SOAP e REST. È tutto ASP.NET ma non siamo nel cloud. Sto cercando di trovare un modo per ottimizzare gli ambienti per ridurre la complessità.

Vista semplificata, diciamo che ci sono 3 sistemi in produzione: A, B, C. Comunicano così:

  • Prod: A 1.0 = > B 1.0 = > C 1.0

Lo specifichiamo in un ambiente di test come questo:

  • Test: A 1.0 = > B 1.0 = > C 1.0

Se c'è un bug di produzione urgente in B, faremo una correzione a B e la distribuiremo nell'ambiente di test.

  • Test: A 1.0 = > B 1.1 = > C 1.0

e se i test di integrazione passano, possiamo rilasciarlo in produzione:

  • Prod: A 1.0 = > B 1.1 = > C 1.0

Ora diciamo che sviluppiamo una nuova funzione che significa che A e B devono entrambi cambiare. Sia A che B vengono distribuiti per testare.

  • Test: A 2.0 = > B 2.0 = > C 1.0

Durante questo periodo di sviluppo, se un bug di produzione urgente viene trovato in B, dovremmo apportare una correzione a B e distribuirla nell'ambiente di test:

  • Test: A 2.0 = > B 1.2 = > C 1.0

Ovviamente questo è un punto debole ora perché l'ambiente di test non assomiglia alla produzione. E che dire di quando B 2.0 ha un cambio di rottura - in questo caso A 2.0 fallirà quando si punta a B 1.2.

Quindi quello che abbiamo fatto è creare un altro ambiente per le riparazioni di emergenza, chiamato Patch. Quindi possiamo avere:

  • Test: A 2.0 = > B 2.0 = > C 1.0
  • Patch: A 1.0 = > B 1.2 = > C 1.0

Ora A, B e C hanno cicli di consegna diversi, quindi ciò che tende ad accadere è che in diverse fasi del progetto, l'ambiente Patch viene abusato al fine di testare diverse versioni di ciascun componente per la versione corrente o per il prossima versione. Finiamo per fare cose pazzesche come puntare il Test A alla Patch B, o puntare la Patch B al Test C. E questo ovviamente genera enorme confusione. Senza contare che questa è una versione notevolmente semplificata, in realtà abbiamo almeno 8 sistemi coinvolti qui, con 6 ambienti. La pagina di riepilogo di TeamCity è simile a spaghetti junction. Anche alcuni ambienti parlano tra loro (nel mio esempio sopra sarebbe come A = > B = > C = > A).

Aiutami a capire come può funzionare questo tipo di scenario.

    
posta demoncodemonkey 26.05.2017 - 17:26
fonte

0 risposte