Como sites como Google / Facebook / etc. não recebem DDOS mesmo que recebam tantos pedidos?

14

Algo que eu não entendo:

(Dezenas / centenas de?) Milhares de pessoas simultaneamente tentam se conectar a um site como facebook.com ou google.com.

Pelo que entendi, todos devem necessariamente se conectar ao mesmo servidor inicial (porque o DNS retornará o mesmo IP para muitos deles e, portanto, todas as solicitações vão para o mesmo destino de destino).

Portanto, uma única máquina / roteador deve lidar com todas as solicitações iniciais, mesmo que planeje encaminhá-las para outras máquinas.

Como esse dispositivo único não fica sobrecarregado quando isso acontece?

user541686
fonte
8
Sua suposição sobre o DNS está incorreta: en.wikipedia.org/wiki/Round-robin_DNS
Der Hochstapler
@OliverSalzburg: Obrigado pelo link, isso é útil.
user541686

Respostas:

20

Seu entendimento de que todos eles se conectam ao mesmo servidor está errado, embora os detalhes de como você alcance esses resultados sejam complexos. http://highscalability.com/ tem um trabalho de referência sobre como algumas das soluções de escalabilidade são colocadas em prática.

Eles têm muito mais do que apenas um servidor ao qual os clientes se conectam, mesmo que o endereço IP público pareça o mesmo. O Google, por exemplo, utiliza muito o endereçamento anycast para direcionar as pessoas, e geralmente elas não têm apenas um endereço IP para cada cliente - mesmo que retornem apenas um endereço quando você solicitar.

Daniel Pittman
fonte
+1 obrigado por apontar o erro. Não posso deixar de pensar: se solicitações subsequentes vão para um servidor diferente todas as vezes, como um servidor continua a sessão de um servidor diferente? Ou a aleatoriedade é feita por máquina / por sessão? (Eu imagino que todos eles sincronizar no backend, mas parece muito lento para milhares Sincronizar de servidores que contêm informações sobre milhões de usuários simultaneamente.)
user541686
1
A resposta é complicada e depende da implementação, mas uma abordagem é ter um pool de máquinas que não fazem nada além de enviar os pacotes para o destino certo sem nunca fazer uma conexão TCP. Procure no F5 e em outros fornecedores do balanceador de carga o pequeno final de como. Acho que o Google usa algo que eles mesmos construíram.
Daniel Pittman
Você também pode usar uma metodologia de sessão dividida. Há uma sessão entre o usuário e o servidor ao qual estão diretamente conectados e uma "sessão lógica principal" entre o usuário e o serviço lógico. Se o usuário se mudar para um servidor diferente, esse servidor continuará a mesma sessão lógica principal para o serviço lógico.
David Schwartz