Esecuzione e mantenimento di un mega progetto "live"

0

Mi sono guardato intorno ma non sono riuscito a trovare una risposta alle mie esigenze di gestione di un grande progetto online . Per grandi, intendo un servizio basato sul web che dipende da più tecnologie di back-end, una quantità enorme di calcoli diversi al volo, un sacco di requisiti di archiviazione; e dal vivo, voglio dire che sul front-end prova a servire una base di utenti enorme e deve essere sempre attivo (penso che Google sarebbe un esempio perfetto).

Nel mio caso, sto sviluppando uno strumento forense e devo soddisfare almeno due requisiti:

  1. Il mio strumento / servizio è sempre attivo e disponibile.
  2. Che io o il mio strumento possa continuare a migliorare lo strumento / servizio stesso.

In questo momento, non riesco a soddisfare entrambi i punti sopra insieme; se faccio uno, violento l'altro, ma sono sicuro che c'è un "standard" . Sono sicuro che le mie esigenze (anche se al momento mi sembrano contraddittorie) non sono diverse da quelle che Google e Facebook fanno regolarmente.

Spero sia chiaro ormai che non sto chiedendo come gestire le complessità / correzioni che devono essere affrontate in quanto i progetti software tendono a ingrandirsi. Penso che questa domanda risponda abbastanza bene- Come mantenere un prodotto software grande e complesso mantenibile negli anni?

    
posta DaveIdito 09.07.2018 - 11:27
fonte

1 risposta

2

Un modo "standard" di distribuzione senza tempi di inattività è utilizzare le distribuzioni in verde-blu

Hai bisogno di

  • un minimo di due server che eseguono il tuo sito web / app
  • bilanciamento del carico delle richieste tra i server

Quindi fai quanto segue

  1. divide i tuoi server in due gruppi, verde e blu
  2. elimina il carico del gruppo verde e attendi che le connessioni scendano
  3. distribuisci la tua versione aggiornata sui server verdi.
  4. rimetti i server verdi in carica
  5. elimina i server blu dal carico
  6. distribuisci la tua versione aggiornata ai server blu.
  7. rimetti i server blu in carica

Ora c'è qualche difficoltà intorno al punto 4/5 in cui entrambe le versioni dell'applicazione sono attive nello stesso momento. Ciò può causare problemi con richieste dello stesso cliente che colpiscono diverse versioni del servizio

Puoi gestire questa situazione in diversi modi

  • Sessioni adesive. una volta che un utente è connesso a un gruppo, rimane con quel gruppo.

  • Compatibilità con le versioni precedenti. La nuova risposta del server è retrocompatibile con la vecchia versione

  • Routing per versione richiesta. Il client aggiunge una versione alla richiesta, consentendo al servizio di bilanciamento del carico di instradare le vecchie richieste ai vecchi server delle versioni e le nuove richieste alla nuova versione.

    In questo modello lasci il vecchio gruppo non aggiornato fino a quando i client non sono tutti aggiornati.

Un paio di note:

Due non è davvero sufficiente, se si desidera eseguire il failover durante la distribuzione, è necessario più di un box live in un dato momento. Ma di solito con applicazioni di grandi dimensioni stiamo parlando di 10 di server in qualsiasi gruppo.

Nel mio esempio ho caricato sia il verde che il blu nello stesso momento durante il normale funzionamento. Ma credo che il metodo tradizionale sia quello di avere uno solo dei due dal vivo. Ovviamente questo può significare avere scatole costose che giacciono inutilizzate. Ma in questi giorni inebrianti di "The Cloud" puoi fare trucchi intelligenti come spremere una nuova serie di scatole "blu" e ritirare le tue "verdi"

    
risposta data 09.07.2018 - 11:55
fonte

Leggi altre domande sui tag