Comment se fait-il que des sites comme Google / Facebook / etc. n'obtiennent pas DDOS même s'ils reçoivent autant de demandes?

14

Quelque chose que je ne comprends pas:

(Des dizaines / centaines de?) Des milliers de personnes essaient simultanément de se connecter à un site comme facebook.com ou google.com.

D'après ce que je comprends, ils doivent tous nécessairement se connecter au même serveur initial (parce que DNS retournera la même IP à beaucoup d'entre eux, et donc toutes les demandes vont à la même destination cible).

Ainsi, une seule machine / routeur doit gérer toutes les demandes initiales, même si elle prévoit de les transmettre à d'autres machines.

Comment se fait-il que cet appareil unique ne soit pas surchargé lorsque cela se produit?

user541686
la source
8
Votre hypothèse sur le DNS est incorrecte: en.wikipedia.org/wiki/Round-robin_DNS
Der Hochstapler
@OliverSalzburg: Merci pour le lien, c'est utile.
user541686

Réponses:

20

Votre compréhension du fait qu'ils se connectent tous au même serveur est erronée, bien que les détails sur la façon dont vous obtenez ces résultats soient complexes. http://highscalability.com/ a un travail de référence sur la façon dont certaines des solutions d'évolutivité sont mises en jeu.

Ils ont bien plus qu'un "seul" serveur auquel les clients se connectent, même si l'adresse IP publique est la même. Google, par exemple, fait un usage intensif de l'adressage anycast pour diriger les gens, et généralement ils n'ont pas seulement une adresse IP pour chaque client - même s'ils ne renvoient qu'une seule adresse lorsque vous le demandez.

Daniel Pittman
la source
+1 merci d'avoir signalé l'erreur. Je ne peux pas m'empêcher de me demander, cependant: si les demandes suivantes sont envoyées à un serveur différent à chaque fois, alors comment un serveur continue-t-il une session de serveur différente? Ou le caractère aléatoire est-il par machine / par session? (J'imagine qu'ils se synchronisent tous au niveau du backend, mais il semblerait très lent de synchroniser simultanément des milliers de serveurs contenant des informations sur des millions d'utilisateurs.)
user541686
1
La réponse est compliquée et dépend de l'implémentation, mais une approche consiste à avoir un pool de machines qui ne font rien mais envoyer les paquets à la bonne destination sans jamais réellement établir de connexion TCP. Consultez F5 et d'autres fournisseurs d'équilibreurs de charge pour en savoir plus. Google, je pense, utilise quelque chose qu'ils ont construit eux-mêmes.
Daniel Pittman
Vous pouvez également utiliser une méthodologie de session partagée. Il existe une session entre l'utilisateur et le serveur auquel il est directement connecté, et une "session logique maître" entre l'utilisateur et le service logique. Si l'utilisateur se déplace vers un autre serveur, ce serveur reprend simplement la même session logique principale au service logique.
David Schwartz