Como redirecionar usuários para diferentes servidores com base em sua localização?

8

Eu tenho um site que é desenvolvido usando ASP.NET e MY DB é MySQL. Atualmente, ele é hospedado nos EUA Servers. Mas quando tento acessá-lo perto da Índia, o conteúdo dinâmico está carregando muito lentamente. É aceitável, pois a solicitação deve ir para outro lado do mundo. Nos EUA é realmente rápido. Já conectei este site com o cloudflare CDN. Mas CDN é útil para conteúdo estático. Todas as minhas páginas têm quase conteúdo dinâmico.

Então, eu quero escalar este site. Portanto, se uma solicitação veio da América, eu quero lidar com essa solicitação do servidor dos EUA. Mas lembre-se, não importa onde eles foram redirecionados, o conteúdo deve ser o mesmo em dois servidores. (Dois servidores devem ser sincronizados)

Então, como alcançar essa arquitetura?

Como o Google, Facebook e Yahoo fazem isso? Como eles servem em todo o mundo? Eu acho que eles têm datacenters em todos os continentes. Como eles se sincronizam?

Prageeth Liyanage
fonte

Respostas:

10

Além do que respondeu por @ Gabriel-Talavera, eu acrescentaria algumas notas:

  • O roteamento de rede, bem como o balanceamento de carga geográfica, não tem nenhuma relação com a "sincronização de dados" entre diferentes servidores. São dois problemas abordados com diversas tecnologias muito diferentes.

Como o título da sua pergunta parece estar focado no lado da rede, focarei na primeira parte (os problemas de roteamento de rede).

Como você pode ver por si mesmo, é difícil atender a requisitos de pequenas empresas de TIC. Mas empresas "globais" (como as mencionadas no seu OP) não terão problemas em adotá-lo.

Como observação lateral, a primeira vez que ouvi falar de "anycast" foi graças a um post do CloudFlare BLOG , onde eles discutiram (... entre muitas outras coisas), como o anycast também pode ser adotado como uma medida contra D- Ataques do DOS.

Damiano Verzulli
fonte
3

Você pode fornecer respostas DNS seletivas com base no local com as Visualizações BIND se estiver usando o BIND como seu servidor DNS externo. A visualização técnica da nova versão do Windows Server também possui um recurso chamado Diretivas DNS, que parece muito promissor.

Para veicular conteúdo com base na localização do cliente e em outros critérios, como User Agent ou agendas, a F5 possui um dispositivo chamado Global Traffic Manager, usado em conjunto com seus balanceadores de carga, e alcança o que você procura. Em ambientes em nuvem, o Route 53 da Amazon pode realizar o mesmo.

Para manter os dados sincronizados, você deve ter um back-end de armazenamento capaz de executar replicação sincronizada ou usar a replicação fornecida pelo MySQL, que manterá os dados replicados consistentes.

Gabriel Talavera
fonte
mas isso não funcionará de maneira confiável se os clientes usarem servidores DNS diferentes, como Google DNS ou OpenDNS.
Josef diz Reinstate Monica
A replicação com o mysql pode mostrar um atraso significativo entre as gravações e os dados disponíveis para leitura. Algo que dimensiona a replicação como riak ou outros bancos de dados nosql deve ser considerado.
pintos
0

Há situações em que você gostaria de ter:

  • A integridade dos dados garante transações transacionáveis.
  • Os dados podem ser atualizados pelos usuários globalmente.
  • Os dados podem ser atualizados com baixa latência.

Infelizmente, a combinação de todos os itens acima não é fisicamente possível. Você será limitado pela velocidade da luz.

Em vez disso, você precisa considerar seus requisitos exatos. Para alguns dados, a precisão limitada é boa o suficiente. Considere o contador de visualizações em um vídeo do YouTube. A maioria das pessoas não se importa se o contador de visualizações está temporariamente um pouco desligado. Se as visualizações que ocorreram 10 segundos atrás no outro lado do mundo ainda não estiverem incluídas, mas as visualizações que ocorreram há 5 segundos mais próximas forem incluídas, ainda será preciso o suficiente. Se você está relaxado com a integridade do contador de visualizações, corre o risco de duas pessoas diferentes pensarem que eram o número 100 do espectador desse vídeo em particular. Mas a maioria das pessoas consideraria insignificante o dano causado por isso.

Em outros casos, a integridade dos dados é mais importante. Considere duas pessoas simultaneamente tentando se inscrever com o mesmo nome de usuário. Dizer às duas pessoas que elas receberam o nome de usuário não é aceitável; portanto, em tal situação, você escolheria uma abordagem mais lenta e com melhor integridade. É aceitável dizer às duas pessoas que o nome de usuário foi usado, portanto, uma abordagem possível seria tentar reservar o nome de usuário em cada réplica e reportar o sucesso apenas se você tiver conseguido mais de 50% das réplicas. Não é improvável que essa abordagem faça com que o usuário aguarde meio segundo para obter uma resposta. Mas os usuários não passam por esse processo com frequência suficiente para se incomodar com esse atraso.

Em outros casos, você pode precisar de boa integridade e atualizações rápidas, mas apenas uma pessoa pode atualizar esse dado específico. Nesse caso, você pode colocar a cópia autorizada dos dados em um servidor que você acha que é próximo a esse usuário e permitir que outros servidores tenham uma versão em cache, que é geralmente atualizada.

Kasperd
fonte