Come mai siti come Google / Facebook / ecc. non ricevi DDOS anche se ricevono così tante richieste?


14

Qualcosa che non capisco:

(Decine / centinaia di?) Migliaia di persone cercano contemporaneamente di connettersi a un sito come facebook.com o google.com.

Da quanto ho capito, devono necessariamente collegarsi tutti allo stesso server iniziale (poiché il DNS restituirà lo stesso IP a molti di essi e quindi tutte le richieste vanno alla stessa destinazione di destinazione).

Pertanto, un singolo computer / router deve gestire tutte le richieste iniziali, anche se prevede di inoltrarle ad altri computer.

Come mai quel singolo dispositivo non viene sovraccaricato quando ciò accade?


8
La tua ipotesi sul DNS non è corretta: en.wikipedia.org/wiki/Round-robin_DNS
Der Hochstapler,

@OliverSalzburg: Grazie per il link, è utile.
user541686,

Risposte:


20

La tua comprensione del fatto che tutti si collegano allo stesso server è errata, anche se i dettagli su come ottenere questi risultati sono complessi. http://highscalability.com/ ha un lavoro di riferimento su come vengono messe in gioco alcune delle soluzioni di scalabilità.

Hanno ben più di un "solo" server a cui i client si connettono, anche se l'indirizzo IP pubblico è lo stesso. Google, ad esempio, fa un uso intensivo degli indirizzi anycast per indirizzare le persone e di solito non hanno un solo indirizzo IP per ciascun client, anche se restituiscono un solo indirizzo quando lo chiedi.


+1 grazie per aver segnalato l'errore. Non posso fare a meno di chiedermi, però: se le richieste successive vanno sempre a un server diverso, come fa un server a continuare una sessione diversa? Oppure la casualità è per macchina / per sessione? (Immagino che si sincronizzino tutti al backend, ma sembrerebbe molto lento sincronizzare migliaia di server che contengono contemporaneamente informazioni su milioni di utenti.)
user541686,

1
La risposta è complicata e dipende dall'implementazione, ma un approccio è quello di avere un pool di macchine che non fanno altro che inviare i pacchetti alla destinazione giusta senza mai realmente stabilire una connessione TCP. Guarda F5 e altri fornitori di bilanciamento del carico, per la piccola fine di come. Google, penso, usa qualcosa che si sono costruiti da soli.
Daniel Pittman,

È inoltre possibile utilizzare una metodologia a sessione divisa. Esiste una sessione tra l'utente e il server a cui sono direttamente collegati e una "sessione logica principale" tra l'utente e il servizio logico. Se l'utente si sposta su un altro server, quel server riprende la stessa sessione logica principale al servizio logico.
David Schwartz,
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.