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

8

Eu tenho um site que é desenvolvido usando ASP.NET e MY DB é MySQL. Atualmente hospedado em servidores dos EUA. Mas quando tento acessá-lo perto da Índia, os conteúdos dinâmicos estão sendo carregados muito lentamente. É aceitável desde que o pedido tem que ir para outro lado do mundo. Nos EUA é realmente rápido. Eu já conectei este site com o CDN cloudflare. Mas o CDN é útil para conteúdo estático. Todas as minhas páginas têm quase conteúdo dinâmico.

Então, quero escalar este site. Então, se uma solicitação veio da América eu quero lidar com esse pedido do servidor dos EUA e se uma solicitação veio da ASIA eu quero que para lidar com um servidor ASIAN. Mas tenha em mente que 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 conseguir essa arquitetura?

Como google, Facebook, 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?

    
por Sylar 11.08.2015 / 07:08

3 respostas

10

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

  • O roteamento de rede, assim como o Balanceamento de carga geográfico, não tem qualquer relação com a "sincronização de dados" entre os diferentes servidores. São dois problemas abordados com muitas tecnologias muito diferentes.

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

Como você pode ver por si mesmo, os requisitos são difíceis de serem atendidos por pequenas empresas de TIC. Mas as empresas "globais" (como as que você mencionou no seu OP) não terão problemas em adotá-las.

Como uma nota lateral, a primeira vez que ouvi sobre "anycast" foi graças a um , onde eles discutiram (... entre muitas outras coisas), como o anycast também pode ser adotado como uma contra-medida para ataques D-DOS.

    
por 11.08.2015 / 09:24
3

Você pode fornecer respostas de DNS seletivas com base na localização com exibições do BIND se você estiver usando o BIND como seu servidor DNS externo. A visualização técnica da nova versão do Windows Server também tem um recurso chamado Políticas de DNS , que parece muito promissor.

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

Para manter os dados em sincronia, você deve ter um back-end de armazenamento capaz de fazer replicação síncrona ou usar a replicação fornecida pelo MySQL, que manterá os dados replicados consistentes.

    
por 11.08.2015 / 07:19
0

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

  • As garantias de integridade de dados de transações serializá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 suas necessidades exatas. 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 estiver temporariamente desligado. Se as visualizações que aconteceram 10 segundos atrás no outro lado do mundo ainda não estiverem incluídas, mas as exibições que ocorreram há 5 segundos mais próximas estão incluídas, elas ainda são precisas. Se você está relaxado com a integridade do contador de visualizações, corre o risco de que duas pessoas diferentes possam pensar que eram o usuário número 100 daquele vídeo em particular. Mas a maioria das pessoas consideraria o dano causado por isso como insignificante.

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

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

    
por 10.09.2015 / 22:12