Aggiornamento coerente di un'applicazione server distribuita


0

Dato

Eseguo più server applicazioni in esecuzione facoltativamente dietro un bilanciamento del carico. I server delle applicazioni condividono un singolo Db SQL. Penso che una configurazione abbastanza convenzionale.

Immagina che un pacchetto di aggiornamento sw sia reso disponibile per l'app. L'aggiornamento include modifiche sia all'app che allo schema Db.

Problema

Un amministratore avvia l'installazione dell'aggiornamento sul primo server delle applicazioni. Ciò comporta l'aggiornamento dell'app server e dello schema Db alla nuova versione.

Una volta in esecuzione l'aggiornamento Db, i server delle app rimanenti devono essere in qualche modo avvisati che dovrebbero smettere di usare il Db fino a quando non ricevono l'aggiornamento. Mi chiedo ci siano soluzioni note a questo?

Tecnologia in uso

  • Server applicazioni: demoni Linux in esecuzione dietro lighttpd-1.4.35 su Ubuntu 16
  • Db: MySQL-5.7 su Ubuntu 16
  • Load balancer: non ancora deciso (i suggerimenti sono ben accetti)

Risposte:


2

Non è possibile rispondere a questa domanda in modo generale. Dipende dall'applicazione stessa e dal tipo di modifiche che stai facendo. Ad esempio, alcune modifiche al DB non dovrebbero influire su un'applicazione in esecuzione (se eseguita in modo appropriato) come l'aggiunta di una nuova colonna a una tabella esistente o l'aggiunta di una nuova tabella. Altri possono influire come rimuovere una colonna esistente o rinominarla.

Naturalmente, la soluzione più sicura è quella di arrestare completamente l'applicazione, apportare le modifiche necessarie all'applicazione e al DB e riavviare l'applicazione. Questo può o non può essere fattibile in base alle vostre esigenze.

Se non si desidera alcun tempo di inattività minimo o minimo, è necessario fornire due copie indipendenti in esecuzione contemporaneamente. Esegui l'aggiornamento su una copia (applicazione + DB + eventuali altre dipendenze) mantenendo l'accesso degli utenti alla seconda copia. Aggiorna la seconda copia dopo aver avviato la prima copia e reindirizzato gli utenti alla prima copia aggiornata.


Ho anche pensato all'approccio di duplicazione Db che hai descritto. Tuttavia, potrebbe verificarsi uno stato incoerente tra la nuova app (aggiornata) e la vecchia app. Un po 'di tempo morto arrestando completamente le app sarebbe più accettabile di uno stato così incoerente.
Vitaly P
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.