Wie kommt es, dass Websites wie Google / Facebook / etc. Erhalten Sie kein DDOS, obwohl sie so viele Anfragen erhalten?


14

Was ich nicht verstehe:

(Zehntausende / Hunderte?) Tausende von Menschen versuchen gleichzeitig, eine Verbindung zu einer Website wie facebook.com oder google.com herzustellen.

Soweit ich weiß, müssen sie alle unbedingt eine Verbindung zum gleichen anfänglichen Server herstellen (da DNS für viele von ihnen dieselbe IP-Adresse zurückgibt und alle Anforderungen an dasselbe Ziel gesendet werden).

Ein einzelner Computer / Router muss daher alle anfänglichen Anforderungen verarbeiten, auch wenn er plant, sie an andere Computer weiterzuleiten.

Wie kommt es, dass ein einzelnes Gerät in diesem Fall nicht überlastet wird?


8
Ihre Annahme bezüglich DNS ist falsch: en.wikipedia.org/wiki/Round-robin_DNS
Der Hochstapler

@OliverSalzburg: Danke für den Link, das ist hilfreich.
user541686

Antworten:


20

Ihr Verständnis, dass sie alle mit demselben Server verbunden sind, ist falsch, obwohl die Details, wie Sie diese Ergebnisse erzielen, komplex sind. Unter http://highscalability.com/ finden Sie Nachschlagewerke zur Umsetzung einiger der Skalierbarkeitslösungen.

Sie haben weit mehr als nur "einen" Server, zu dem Clients eine Verbindung herstellen, auch wenn die öffentliche IP-Adresse gleich aussieht. Google nutzt beispielsweise die Anycast-Adressierung, um Personen zu leiten. In der Regel haben diese nicht nur eine IP-Adresse für jeden Client - auch wenn sie nur eine Adresse zurückgeben, wenn Sie danach fragen.


+1 Danke für den Hinweis auf den Fehler. Ich frage mich jedoch: Wenn nachfolgende Anforderungen jedes Mal an einen anderen Server gesendet werden, wie setzt ein Server die Sitzung eines anderen Servers fort? Oder ist die Zufälligkeit pro Maschine / pro Sitzung? (Ich würde mir vorstellen, dass sie alle im Backend synchronisieren, aber es scheint sehr langsam zu sein, Tausende von Servern mit Informationen über Millionen von Benutzern gleichzeitig zu synchronisieren.)
user541686

1
Die Antwort ist kompliziert und hängt von der Implementierung ab. Ein Ansatz besteht jedoch darin, über einen Pool von Computern zu verfügen, die nur die Pakete an das richtige Ziel senden, ohne jemals eine TCP-Verbindung herzustellen. Schauen Sie sich F5 und andere Load-Balancer-Anbieter an, um mehr darüber zu erfahren. Ich denke, Google verwendet etwas, das sie selbst gebaut haben.
Daniel Pittman

Sie können auch eine Methode für getrennte Sitzungen verwenden. Es gibt eine Sitzung zwischen dem Benutzer und dem Server, mit dem sie direkt verbunden sind, und eine "logische Mastersitzung" zwischen dem Benutzer und dem logischen Dienst. Wenn der Benutzer auf einen anderen Server wechselt, nimmt dieser Server dieselbe logische Mastersitzung für den logischen Dienst wieder auf.
David Schwartz
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.