Wie kommen Seiten wie Google / Facebook / etc. DDOS nicht erhalten, obwohl sie so viele Anfragen erhalten?

1127
Mehrdad

Was ich nicht verstehe:

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

Soweit ich weiß, müssen sie sich notwendigerweise mit demselben Anfangsserver verbinden (da DNS die gleiche IP an viele von ihnen zurückgibt und alle Anforderungen an dasselbe Zielziel gehen).

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

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

14
Ihre Annahme zu DNS ist falsch: http://en.wikipedia.org/wiki/Round-robin_DNS Der Hochstapler vor 12 Jahren 8
@OliverSalzburg: Danke für den Link, das ist hilfreich. Mehrdad vor 12 Jahren 0

1 Antwort auf die Frage

20
Daniel Pittman

Ihr Verständnis, dass alle eine Verbindung zu demselben Server herstellen, ist falsch, obwohl die Details, wie Sie diese Ergebnisse erzielen, komplex sind. http://highscalability.com/ enthält Nachschlagewerke, wie einige der Skalierbarkeitslösungen eingesetzt werden.

Sie haben weit mehr als nur einen Server, mit dem sich die Clients verbinden, auch wenn die öffentliche IP-Adresse gleich aussieht. Google nutzt beispielsweise die Anycast-Adressierung intensiv, um Personen anzuleiten, und normalerweise haben sie nicht nur eine IP-Adresse für jeden Client - selbst wenn sie nur eine Adresse zurückgeben, wenn Sie danach fragen.

+1 Danke für den Hinweis. Ich kann mir jedoch nicht wundern: Wenn nachfolgende Anfragen jedes Mal an einen anderen Server gesendet werden, wie führt dann ein Server die Sitzung eines anderen Servers fort? Oder ist die Zufälligkeit pro Maschine / pro Sitzung? (Ich könnte mir vorstellen, dass alle im Backend synchronisiert werden, aber es scheint sehr langsam zu sein, Tausende von Servern zu synchronisieren, die gleichzeitig Informationen über Millionen von Benutzern enthalten.) Mehrdad vor 12 Jahren 0
Die Antwort ist kompliziert und hängt von der Implementierung ab. Ein Ansatz besteht jedoch darin, einen Pool von Maschinen zu haben, die nichts anderes tun, als die Pakete an das richtige Ziel zu senden, ohne jemals eine TCP-Verbindung herzustellen. Schauen Sie sich F5 und andere Load Balancer-Anbieter für das kleine Ende an. Ich denke, Google benutzt etwas, das sie selbst gebaut haben. Daniel Pittman vor 12 Jahren 1
Cool, danke für die Erklärung! Mehrdad vor 12 Jahren 0
Sie können auch eine Split-Session-Methode verwenden. Es gibt eine Sitzung zwischen dem Benutzer und dem Server, mit dem er direkt verbunden ist, und eine "logische Master-Sitzung" zwischen dem Benutzer und dem logischen Dienst. Wenn der Benutzer zu einem anderen Server wechselt, setzt der Server dieselbe logische Master-Sitzung für den logischen Dienst fort. David Schwartz vor 12 Jahren 0