Hospedagem de site geo-balanceada (estática)

0

Resumo

Estou reconstruindo meu site e, desta vez, decidi usar um gerador de site estático (jekyll, sculpin.io, etc). Parcialmente como um exercício, eu quero que este site seja hospedado em uma hospedagem globalmente balanceada para velocidade. (Portanto, os espectadores dos EUA devem obter o site do servidor dos EUA.)

Então, meu objetivo é criar o site mais rápido possível humanamente. Porque eu espero poder.

Como uma tarefa bônus, se possível, eu gostaria de colocar um redirecionador que direcione certos usuários de idiomas para a versão inglesa, alemã, etc do site.

A pergunta é: como faço isso? Aqui está o que eu tentei:

Usando um CDN

Eu poderia obter um host web estático aleatório e colocar um CDN na frente de toda a página. Embora isso funcione razoavelmente bem, os CDNs descartam pouco recursos do cache e precisam recuperá-los quando necessário, o que aumenta o tempo de carregamento.

Hospedagem de sites estáticos do Amazon AWS

Usando os buckets do Amazon S3, é possível criar uma hospedagem estática. O problema é que o nome do intervalo deve ser EXATAMENTE o mesmo que o nome do site e os nomes do intervalo são globais, por isso não é possível criar várias instâncias do bloco e veicular o site diretamente.

Amazon Route53 / EC2

Embora executar meu próprio sistema operacional seja menos que ótimo (muito trabalho, altos custos), é uma opção. Especialmente desde que o Puppet facilita a automação.

Essa configuração exigiria uma instância do EC2 em cada região, um Elastic Load Balancer configurado na frente dele e o Route53 para rotear o tráfego para ELB geograficamente locais.

Construa você mesmo

Rending VPS ou servidores raiz em cada região, posso executar meu próprio sistema operacional e instalar o nginx. Em qualquer outro aspecto, isso funcionaria muito como a configuração da AWS.

Resumo

Nada disso atende às minhas necessidades de hospedagem de site estático. Como abordaria esse problema? Quais são as questões ocultas sobre isso? Quaisquer serviços que eu preciso olhar?

    
por Janos Pasztor 03.11.2015 / 13:05

1 resposta

0

Estouinclinadoacomeçardizendo"Escolha dois".

Essa variante do triângulo de ferro diz basicamente que você não pode ter todos os três. Se assumirmos que você quer bom (desempenho, confiabilidade), rápido (implantação simples) e barato (encargos e manutenção de provedores de serviço) ... seu melhor caso pode ser uma proposição de duas em três para as quais há poucas balas mágicas .

Estou inclinado a discordar da premissa de que a abordagem da CDN não seria suficientemente rápida, uma vez que um objeto não precisa ser insanamente popular para ser suficientemente popular, e a breve espera ocasional por uma minoria dos objetos em uma página bem projetada pode passar despercebida. Um CDN como o CloudFront tem a vantagem adicional de que suas solicitações ao servidor de origem percorrem a rede da Amazon de maneira significativa, em vez da Internet pública, removendo algumas das variáveis do transporte de dados global.

Mas há uma abordagem híbrida combinando essencialmente todos os elementos que você mencionou:

A linha de frente é o CDN. Diremos o CloudFront, que usa o DNS para rotear automaticamente as solicitações dos navegadores para o local de ponta mais ideal.

O servidor de origem ao qual o CDN se conecta na parte de trás é, na verdade, vários servidores, geo / latência roteados usando o Route 53, de modo que a borda CDN se conecta ao servidor de origem mais próximo, em uma região próxima da AWS.

Esses destinos roteados por geo / latência - as origens em que o CDN atualiza objetos não armazenados em cache - são instâncias do EC2, mas em vez de servidores da Web completos, eles executam proxies, um ou mais em cada região , com o S3 como back-end de armazenamento em vez de discos rígidos. Como os proxies podem reescrever os cabeçalhos do host original no caminho para o S3, os nomes dos seus buckets não precisam mais corresponder, então você pode colocar um em cada região. Você pode obter uma taxa de transferência substancial em instâncias muito pequenas com um proxy como o HAProxy (tenho máquinas t2.micro que atendem a 2 milhões de solicitações por dia, mantendo uma utilização constante da CPU em torno de 3%). Como os proxies estão na mesma região dos buckets, não há taxas de transferência de dados. Você não precisa de ELB, porque as verificações de integridade do Route 53 podem remover um proxy não funcional do pool do qual o CDN selecionará. Se, por algum motivo, o bucket do S3 ficar inacessível ao proxy, o proxy falhará deliberadamente na verificação de integridade, fazendo com que ele seja removido da seleção.

Se você quisesse ter porcas absolutamente inferiores a milissegundos, você poderia usar o Varnish como proxy nas máquinas do EC2 e armazenar em cache o conteúdo do S3 dentro do EC2, então você provavelmente já o teria se o CDN precisasse de uma nova cópia. / p>

Assim, o navegador seleciona a borda CDN mais próxima, o CDN seleciona o backend mais próximo, que é um proxy (um dos potencialmente vários por região) que possui um caminho de baixa latência para qualquer conteúdo que ainda não esteja contido no CDN. armazenado em um balde na mesma região.

Altamente disponível, tolerante a falhas, extremamente responsiva em nível global, construída a partir de componentes padrão, interconectados de maneira um pouco criativa. (É assim que eu faço.)

    
por 03.11.2015 / 23:26