Qual é o hardware que escuta no endereço IP do Facebook ou da Wikipedia?

32

Estou tentando entender como sites massivos como o Facebook ou a Wikipedia funcionam, por minha curiosidade intelectual. Eu li sobre várias técnicas para criar sites escaláveis, mas ainda estou intrigado com um detalhe específico.

A parte que me confunde é que, em última análise, o DNS mapeará todo o domínio para um único endereço IP ou para um punhado de endereços IP no caso de DNS de rodízio.

Por exemplo, o wikipedia.org possui apenas um registro DNS tipo A. Portanto, pessoas de todo o mundo que visitam a Wikipedia precisam enviar uma solicitação para o único endereço IP especificado no DNS.

Qual é o hardware que escuta no endereço IP de um site massivo e como ele pode lidar com toda a carga proveniente das solicitações de usuários em todo o mundo?

Edit 1: Obrigado por todas as respostas! Anycast parece ser uma resposta viável ... Alguém sabe como verificar se um endereço IP específico é roteado por anycast, para que eu possa verificar se esse é realmente o truque usado na prática por sites grandes?

Edit 2: Após mais leituras sobre o tópico, parece que o anycast não é normalmente usado para conteúdo dinâmico da web. O Anycast é geralmente usado para UDP (por exemplo, pesquisas de DNS) ou, às vezes, para conteúdo estático.

Uma coisa interessante a ser observada é que o Facebook usa profile.ak.fbcdn.net para hospedar conteúdo estático, como folhas de estilo e bibliotecas javascript. Cada vez que sigo esse nome, recebo uma resposta de um endereço IP diferente. No entanto, não sei dizer se isso é uma transmissão em ação ou uma técnica completamente diferente.

Voltando à minha pergunta original: até onde eu sei, mesmo um site grande terá uma única peça dispendiosa de hardware de balanceamento de carga que escuta vários endereços IP públicos.

Igor Ostrovsky
fonte
Ótimas perguntas, pena que a maioria das pessoas não entende. Espero que alguém tenha uma resposta com alguns detalhes. Talvez um balanceador de carga de 50 milhões de dólares da Cisco para computação quântica.
OliverS

Respostas:

9

Não é necessariamente uma peça de hardware fazendo isso, mas um sistema completo que foi projetado para escalar. Isso não apenas abrange o hardware, mas, mais importante, o design do aplicativo, o design do banco de dados (relacional ou não), a rede, o armazenamento e como eles se encaixam.

Um bom ponto de partida para a sua curiosidade em descobrir como alguns dos grandes sites são escaláveis: Alta Escalabilidade - Comece Aqui e Alta Escalabilidade na arquitetura Wikimedia , Facebook e Twitter como exemplos.

Com relação à sua pergunta sobre DNS e endereços IP únicos e round-robin, esses tipos de sites geralmente usam o balanceamento de carga como um método de apresentação de um único endereço IP. Isso pode ser feito por balanceadores de carga de hardware especializados ou por software executado em servidores de uso geral. As solicitações recebidas para o IP gerenciado pelo balanceador de carga são distribuídas em uma série de servidores de forma transparente para o usuário final.

Para uma boa explicação sobre este tópico, incluindo uma comparação de balanceadores / proxies de carga de hardware e software e como eles se comparam ao round robin DNS, leia os Aplicativos da Web de balanceamento de carga .

Sim
fonte
Obrigado Sim. Li a maioria desses artigos antes de fazer minha pergunta, mas não encontrei uma resposta concreta. Então, existe realmente um único balanceador de carga de hardware (ou uma única máquina executando software de balanceamento de carga) que é atingido toda vez que alguém visualiza uma página da Wikipedia? Ou existe outro truque em algum lugar para evitar o gargalo?
Igor Ostrovsky
Não sei ao certo o que a Wikipedia está fazendo agora, mas este artigo de 2008 fala sobre eles usando uma série de servidores de proxy reverso do Squid blogs.sun.com/WebScale/entry/scaling_wikipedia_with_lamp_7
Sim
2
Também existem endereços anycast nos quais você faz ping em um endereço IP, mas eles são distribuídos (aleatoriamente \ arbitrariamente \ intencionalmente) para um de um intervalo de pontos de extremidade "reais". Não tenho certeza se a Wikipedia \ Google usa isso, mas tenho certeza de que alguns dos servidores DNS raiz o fazem. Meus pings na Wikipedia correspondem aos seus (e eu estou na Irlanda), então eu suspeito que eles possam estar usando isso.
Helvick
1
O Anycast é usado na consulta DNS para obter o endereço IP mais próximo de você - então um balanceador de carga escuta esse endereço IP e distribui as solicitações aos servidores de backup.
Andy Shellam
2
A Wikipedia também usa o back-end geoip do pdns para grande parte de seu balanceamento de carga. mais informações aqui: wikitech.wikimedia.org/view/PowerDNS e aqui: wikitech.wikimedia.org/view/DNS
faultyserver
3

O Anycast também pode ser usado para conexões TCP, supondo que as conexões tenham vida curta, para que as rotas não sejam alteradas durante a vida útil da conexão. Essa é uma boa suposição com conexões HTTP (especialmente se o Connection: Keep-Alive for mantido com um tempo limite curto ou desativado).

Muitos CDNs (CacheFly, MaxCDN e provavelmente muitos outros) realmente usam anycast para conexões TCP (HTTP), e não apenas DNS. Quando você resolve um nome de host no CacheFly, obtém o mesmo endereço IP em todo o mundo, ele é simplesmente roteado para o cluster "mais próximo" do CacheFly. "Mais próximo" aqui seria em termos de comprimento e métricas do caminho BGP, que geralmente é a melhor maneira de medir a latência da rede do que a distância geográfica simples.

No caso da Wikipedia, especificamente: http://www.datacenterknowledge.com/archives/2008/06/24/a-look-inside-wikipedias-infrastructure/

rmalayter
fonte
3

A maneira mais fácil de verificar se um endereço IP está usando o Anycast é fazer um traceroute de um local diferente. Você pode tentar o seguinte: acesse traceroute.org, escolha um local e tente fazer um traceroute para o endereço IP 8.8.8.8 (DNS público do Google que usa anycast). Você poderá ver esse traceroute do servidor na Austrália para 8.8.8.8 permanecer na Austrália.

Em vez de executar ping, tente fazer a pesquisa de nome de host: por exemplo: http://network-tools.com/default.asp?prog=dnsrec&host=profile.ak.fbcdn.net

Você verá a lista de endereços IP por trás desse nome. Esses endereços IP serão usados ​​de maneira alternada quando você efetuar ping no servidor.

Rianto Wahyudi
fonte
Veja também: serverfault.com/q/178319/87017
Pacerier
2

Igor, sua pergunta é ótima e, como muitas perguntas inocentes, há muitas, muitas respostas, todas em diferentes níveis de detalhes.

O pedaço de hardware é um servidor web. Obviamente ;-)

O hardware é na verdade um cluster de balanceadores de carga, todos configurados para extrair do armazenamento compartilhado, para que sejam configurados de forma idêntica com material idêntico.

O hardware é na verdade um dos vários grupos de balanceadores de carga, dispersos geograficamente, e você foi direcionado para o mais próximo a você, uma decisão tomada pelo servidor DNS.

Matt Simmons
fonte
1

O Google lançou um pouco de sua arquitetura de hardware local no ano passado e é uma boa leitura .

squillman
fonte
Esta é uma leitura interessante, mas não responde à minha pergunta em particular. Estou especificamente curioso para saber qual é o hardware que escuta nos quatro endereços IP públicos do Google e distribui a carga entre os milhares de servidores.
Igor Ostrovsky
1

Um único endereço IP não significa necessariamente um único servidor: http://en.wikipedia.org/wiki/Anycast

Justin
fonte
1
O Anycast é uma configuração difícil de manter, se você tiver alguma sincronização central (como o Facebook). Funciona muito bem, por exemplo, em servidores DNS, onde as instâncias não precisam de muita comunicação ou em servidores Web com conteúdo estático.
1
Você está certo quanto ao fato de que um único IP não significa um único servidor, mas o anycast é usado na consulta DNS quando você não se incomoda em responder, desde que você obtenha um e, portanto, é útil apenas com o protocolo UDP que Usos de DNS. Com o TCP (usado em HTTP), você precisa ter certeza de que o servidor que responde é o que você pediu especificamente.
Andy Shellam
@AndyShellam, Os artigos en.wikipedia.org/wiki/Anycast#Details nanog.org/meetings/nanog37/presentations/matt.levine.pdf parece discordar com você ...
Pacerier
1

Sites maiores usam várias técnicas diferentes juntas. Os sites que você mencionou têm em quase todos os países vários servidores. Com base no endereço IP do visitante do site, o servidor DNS está devolvendo um endereço IP do cluster que é o mais próximo do visitante. A Akamai está fornecendo esse serviço (clique na imagem neste site para obter mais informações.)

Esses "clusters" neste datacenter consistem agora em várias máquinas diferentes (servidor de banco de dados, servidor da web, balanceador de carga, etc.) Dependendo do que você está fornecendo ao seu site, talvez haja alguns servidores para o conteúdo estático etc.

Raffael Luthiger
fonte
1

Sites massivos como o Facebook ou a Wikipedia contam com várias tecnologias diferentes para obter escalabilidade.

Uma dessas tecnologias é dns. O DNS está configurado para carregar o equilíbrio com round robin. A configuração do DNS é inteligente o suficiente para descobrir de onde vem a sua solicitação e retornar o endereço do site mais próximo de você. Portanto, se você fizer uma escavação, verá vários registros, mas se fizer um ping, sempre receberá de volta o mesmo endereço.

No site, o primeiro hardware que você acessa é um proxy reverso ou um pool de balanceador de carga. Os pools são configurados para que todas as máquinas respondam o mesmo IP, mas retornem um novo IP no cabeçalho da sessão. Todas as solicitações adicionais passarão pelo mesmo nó.

Os balanceadores de carga empregados em sites grandes não são grandes equipamentos caros, são servidores de commodities executando o LVS. http://www.linuxvirtualserver.org/

user67823
fonte
0

Sites maciços como o Google quase certamente projetam seu próprio hardware. Sites grandes provavelmente usariam um comutador de várias camadas para carregar conexões de equilíbrio para vários servidores reais. http://en.wikipedia.org/wiki/Multilayer_switch

Chris S
fonte