È piuttosto facile quando le cose sono raggruppate e con proxy. Perché hai molti nodi in grado di eseguire lo stesso lavoro (o diversi nel caso di archivi di dati come motori di ricerca, file system Hadoop, ecc.)
Fai una ricerca sul web. Colpisci www.altavista.com. La voce DNS elenca una mezza dozzina di indirizzi IP e il tuo cliente ne colpisce uno a caso. Ogni IP è un router Cisco, che invia i fan a uno casuale di 8 server fisici front-end (48 in totale) su indirizzi IP interni. Quel server normalizza la tua query (rimuove gli spazi bianchi ecc.) Poi prende un hash MD5 di esso. L'MD5 decide quale dei 300 server proxy a cui accede la query. Quella 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 perde la sua richiesta. I dati RRD o altre raccolte di dati vengono utilizzati come watchdog quando un server front-end inizia a non funzionare e si reindirizza il traffico a un server di standby. Lo stesso si può dire dei router Cisco.
Il proxy prima controlla la sua cache . Per un colpo di cache, esegue il blending della localizzazione e restituisce la risposta; fatto. Se si tratta di un "cache miss", il proxy invia la query ai cluster di ricerca.
Se un proxy va giù, di nuovo un'altra macchina fisica può essere scambiata per quel proxy. È un po 'più critico ora, perché i proxy non sono intercambiabili; ognuno "possiede" una piccola porzione dello spettro dei risultati della ricerca. Quindi, se la macchina 0x0000-0x00d9 si arresta, il sostituto deve sapere intervenire per quell'intervallo. E peggio ancora, quella macchina sostitutiva avrà una cache vuota, quindi ogni query di ricerca sarà una mancanza di cache . Ciò aumenterà il carico sui cluster di ricerca appropriati da un piccolo bit per proxy downed . Ciò significa che se rimbalzi tutti i proxy allo stesso tempo, non farlo durante le ore di punta della ricerca !
I cluster di ricerca hanno una stratificazione e ridondanza simile, ovviamente, e ogni segmento del database di ricerca risiede su diversi nodi, quindi se un nodo scende, altri nodi possono servire quella porzione dei risultati.
Mi sto concentrando sul proxy come esempio. La comunicazione in esso avviene tramite SOAP, la comunicazione fuori da esso avviene tramite un protocollo di alto livello simile. I dati in entrata e in uscita sono transitori, ad eccezione della cache che è importante per bilanciare il carico del motore dei motori di ricerca. Il punto è che può essere scambiato all'istante in qualsiasi momento, con il peggior risultato di poche ricerche. Questo è qualcosa che il server front-end noterebbe e potrebbe semplicemente inviare nuovamente la sua query, entro la quale il nuovo proxy sarebbe attivo.
Quindi se hai 300 proxy e ci vuole 1/2 ora per un proxy per recuperare la cache, e puoi aspettare che il carico del motore di ricerca aumenti del 20%, allora puoi scambiare 1 proxy ogni 30 secondi, quindi qualsiasi periodo di 30 minuti di scorrimento, 60 proxy (20%) stanno ricostruendo le cache. Supponendo che sia anche urgente andare così velocemente.
Questo esempio richiede 2-1 / 2 ore per l'implementazione, e se una minaccia emergente richiede una risposta più rapida, allora si può sopportare il dolore di più errori di cache, o si scende il servizio abbastanza a lungo da patch (ma nella ricerca esempio di motore, i problemi di cache continueranno a essere un problema quando si ritorna in su. Ho visto i grafici RRD dopo un ricarico del DB di emergenza e lo svuotamento della cache necessario, è qualcosa da vedere.)
Naturalmente di solito il processo può essere riparato, fermato e riavviato senza un riavvio completo. Ho visto uptime di 2 anni sui nodi di produzione.