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.
fonte
Respostas:
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 .
fonte
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/
fonte
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.
fonte
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.
fonte
O Google lançou um pouco de sua arquitetura de hardware local no ano passado e é uma boa leitura .
fonte
Um único endereço IP não significa necessariamente um único servidor: http://en.wikipedia.org/wiki/Anycast
fonte
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.
fonte
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/
fonte
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
fonte