Como distribuo o tráfego HTTP para o servidor mais próximo?

3

Esta é uma questão de duas partes. Então eu tenho uma DigitalOcean Droplet em Toronto com uma pilha de lâmpadas (com um site claro). Eu quero ser criar um instantâneo desse droplet e implantar um clone em talvez San Francisco e Amsterdam.

  1. Como eu alcanço o roteamento para o servidor com o mínimo de latência com base no local?

  2. Como faço para clonar esses sites em tempo real? Por exemplo, se eu editar o site, a alteração é refletida em todos os servidores?

Obrigado

    
por Kipplex-Chase 09.10.2016 / 06:32

2 respostas

4

Você pode usar o roteamento baseado em latência AWS Route 53 . Estou bastante confiante de que você pode usar o R53 com fontes não-AWS.

Alternativamente, a CloudFlare tem um gerenciador de tráfego que pode fazer "orientação geográfica". Ele ainda pode estar na versão beta e não sei se está no plano gratuito ou pago.

Atualizar Acabei de notar sua segunda pergunta. Suponho que seu objetivo seja principalmente o tempo de carregamento da página, com uma preocupação secundária de disponibilidade do serviço. Além disso, vou assumir que o site é o Wordpress, porque é mais difícil fazer o que eu estou sugerindo abaixo com o software padrão do que o personalizado escrito.

Se você quiser que os dois sites que veiculam tráfego ao mesmo tempo, em sincronia, você terá que considerar algum tipo de replicação de banco de dados multi-mestre. Isso não é tão simples, mas existem técnicas para fazer isso. A Digital Ocean tem um tutorial sobre aqui . A sincronização RSync ou BitTorrent irá lidar com a replicação de arquivos.

Se o seu único objetivo for tempos de resposta rápidos, talvez você esteja usando um único servidor com um CDN para garantir que seus recursos estáticos sejam atendidos localmente - o CloudFlare é bom para isso. Sua latência para uma solicitação para a página provavelmente não é tão significativa, em torno de 100ms extras, outros recursos serão servidos a partir do nó mais próximo.

Se o seu único objetivo for redundância em caso de falha, você ainda poderá considerar para o banco de dados um cenário de tipo de réplica mestre / de leitura. Ter todo o tráfego roteado para um servidor, com o banco de dados e os arquivos replicando ao vivo para o segundo site. Se o site principal falhar, você fará o failover para o segundo site. Se isso acontecer, você precisa descobrir o que fazer quando o site principal voltar a ficar on-line, como você recupera as coisas em sincronia. Neste caso, o multi-mestre ainda pode ser mais fácil, para manter as coisas sincronizadas.

Infelizmente, o que você está tentando fazer não é totalmente trivial e pode ser moderadamente a excepcionalmente complexo, dependendo dos casos de uso. Nós realmente precisamos entender seus objetivos para oferecer melhores soluções.

    
por 09.10.2016 / 06:49
2

Tim deu boas soluções para sua primeira pergunta.

No segundo, (infelizmente) não, isso pertence a problemas de "invalidação de cache". Existem soluções serveral:

  • Use um servidor e use serviços CDN (Cloudflare / CloudFront) para armazenar o conteúdo em cache. Você pode configurar o TTL para lidar com a invalidação de cache (ou seja, modelo "eventual consistência") ou
  • Use um servidor e use serviços CDN e envie solicitações de limpeza depois de atualizar o conteúdo.
  • Mantenha três servidores e, em seguida, você precisará desenvolver API (s) para fazer a limpeza.
por 09.10.2016 / 09:25