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.