È abbastanza facile quando le cose sono raggruppate e trasmesse tramite proxy. Perché hai molti nodi in grado di svolgere lo stesso lavoro (o diversi nel caso di archivi di dati come motori di ricerca, file system Hadoop ecc.)
Fai una ricerca sul web. Hai colpito www.altavista.com. La voce DNS elenca una mezza dozzina di indirizzi IP e il tuo client ne colpisce uno a caso. Ogni IP è un router Cisco, che gestisce il traffico verso uno degli 8 server front-end fisici (48 in totale) su indirizzi IP interni. Quel server normalizza la tua query (rimuove gli spazi, ecc.) Quindi ne prende un hash MD5. L'MD5 decide a quale dei 300 server proxy deve essere indirizzata la query. La query viene inviata al proxy tramite un protocollo standard come SOAP.
I server front-end sono intercambiabili perché gestiscono solo le richieste transitorie di una singola query. Al di fuori dei casi peggiori, un cliente ottiene la sua richiesta abbandonata. I dati RRD o altre raccolte dati vengono utilizzati per il watchdog quando un server front-end inizia a non funzionare e il traffico viene reindirizzato a un server di standby. Lo stesso si può dire dei router Cisco.
Il proxy controlla prima la sua cache . Per un riscontro nella cache, esegue la fusione della localizzazione e restituisce la risposta; fatto. Se si tratta di un "errore nella cache", il proxy distribuisce la query ai cluster di ricerca.
Se un proxy non funziona, di nuovo un'altra macchina fisica può essere sostituita con quel proxy. È un po 'più critico ora, perché i proxy non sono intercambiabili; ognuno "possiede" una piccola fetta dello spettro dei risultati della ricerca. Quindi, se la macchina 0x0000-0x00d9 si arresta, il sostituto deve sapere di intervenire per quell'intervallo. E peggio ancora, quella macchina sostitutiva avrà una cache vuota, quindi ogni query di ricerca sarà una cache mancante . Ciò aumenterà il carico sui cluster di ricerca appropriati di un po ' per proxy disattivato . Ciò significa che se rimbalzi su tutti i proxy contemporaneamente, non farlo durante le ore di punta della ricerca !
I cluster di ricerca hanno livelli simili e la ridondanza, ovviamente, e ogni segmento del database di ricerca risiede su diversi nodi, quindi se un nodo si interrompe, altri nodi possono fornire quella fetta dei risultati.
Mi sto concentrando sul proxy come esempio. La comunicazione in esso avviene tramite SOAP, la comunicazione in uscita avviene tramite un protocollo simile di alto livello. I dati in entrata e in uscita sono temporanei, ad eccezione della cache che è importante per bilanciare il carico del cluster del motore di ricerca. Il punto è che può essere scambiato istantaneamente in qualsiasi momento, con il peggior risultato di alcune ricerche che scadono. Questo è qualcosa che il server front-end noterebbe e potrebbe semplicemente inviare di nuovo la sua query, a quel punto il nuovo proxy sarebbe attivo.
Quindi se hai 300 proxy e ci vuole mezz'ora per un proxy per recuperare la sua cache e puoi sopportare che il carico del motore di ricerca aumenti del 20%, quindi puoi scambiare 1 proxy ogni 30 secondi, quindi in qualsiasi periodo di 30 minuti, 60 proxy (20%) stanno ricostruendo le cache. Supponendo che ci sia persino un urgente bisogno di andare così velocemente.
Questo esempio richiede 2-1 / 2 ore per l'implementazione e se una minaccia emergente richiede una risposta più rapida, allora o sopporti il dolore di più errori nella cache o interrompi il servizio abbastanza a lungo da applicare la patch (ma nella ricerca esempio di motore la mancata riuscita della cache sarà ancora un problema quando torni su. Ho guardato i grafici RRD dopo un ricaricamento di emergenza del DB e il necessario svuotamento della cache, è qualcosa da vedere.)
Ovviamente di solito il processo può essere corretto, interrotto e riavviato senza un riavvio completo. Ho visto tempi di attività di 2 anni sui nodi di produzione.