¿Cómo es que sitios como Google / Facebook / etc. ¿No te dan DDOS a pesar de que reciben tantas solicitudes?

14

Algo que no entiendo:

(¿Decenas / cientos de?) Miles de personas intentan conectarse simultáneamente a un sitio como facebook.com o google.com.

Por lo que entiendo, todos deben conectarse necesariamente al mismo servidor inicial (porque DNS devolverá la misma IP a muchos de ellos, por lo que todas las solicitudes van al mismo destino).

Por lo tanto, una sola máquina / enrutador debe manejar todas las solicitudes iniciales, incluso si planea reenviarlas a otras máquinas.

¿Cómo es que ese único dispositivo no se sobrecarga cuando esto sucede?

usuario541686
fuente
8
Su suposición sobre DNS es incorrecta: en.wikipedia.org/wiki/Round-robin_DNS
Der Hochstapler
@OliverSalzburg: Gracias por el enlace, es útil.
user541686

Respuestas:

20

Su comprensión de que todos se conectan al mismo servidor es incorrecta, aunque los detalles de cómo lograr esos resultados son complejos. http://highscalability.com/ tiene un trabajo de referencia sobre cómo se ponen en juego algunas de las soluciones de escalabilidad.

Tienen mucho más que solo "un" servidor al que se conectan los clientes, incluso si la dirección IP pública se ve igual. Google, por ejemplo, hace un uso intensivo del direccionamiento anycast para dirigir a las personas y, por lo general, no solo tienen una dirección IP para cada cliente, incluso si devuelven solo una dirección cuando usted lo solicita.

Daniel Pittman
fuente
+1 gracias por señalar el error. Sin embargo, no puedo evitar preguntarme: si las solicitudes posteriores van a un servidor diferente cada vez, ¿cómo continúa un servidor una sesión de servidor diferente? ¿O es la aleatoriedad por máquina / por sesión? (Me imagino que todos los sincronizar en el backend, pero parecería muy lento para sincronizar miles de servidores que contienen información de millones de usuarios al mismo tiempo.)
user541686
1
La respuesta es complicada y depende de la implementación, pero un enfoque es tener un grupo de máquinas que no hagan nada más que enviar los paquetes al destino correcto sin hacer una conexión TCP. Mire a F5, y a otros proveedores de equilibradores de carga, para ver el pequeño detalle de cómo hacerlo. Google, creo, usa algo que ellos mismos construyeron.
Daniel Pittman
También puede usar una metodología de sesión dividida. Hay una sesión entre el usuario y el servidor al que están conectados directamente, y una "sesión lógica maestra" entre el usuario y el servicio lógico. Si el usuario se muda a un servidor diferente, ese servidor simplemente reanuda la misma sesión lógica maestra al servicio lógico.
David Schwartz