Criando um site estático de alto desempenho

2

Estou procurando criar um site de alto desempenho. Ele tem milhares de páginas HTML estáticas, que são renderizadas especificamente dependendo do envio de um formulário. Eu tenho um script ruby que gera essas páginas HTML estáticas e as armazena no servidor.

Agora estou vendo mais de 1.000 usuários simultâneos no site. Qual é o caminho mais rápido para atender a esses usuários. Eu acredito que o Nginx + Varnish pode fazer um trabalho extremamente bom para este tipo de cenário. Há alguma otimização adicional que eu possa fazer?

Existe uma maneira em vez de NGinx + Varnish acertar o disco para as páginas HTML, ele atinge a RAM. Usando o Memcached de alguma forma.

Eu já estou pensando em transferir os outros recursos estáticos como Imagens / Stylesheets para um CDN. Por favor, informe sobre qual é a melhor maneira de fazer isso.

Obrigado!

[Lançado a partir do StackExchange: link

    
por Karthik Kastury 22.06.2011 / 19:32

4 respostas

5

Enquanto o verniz é absolutamente fantástico com sua VCL flexível, é realmente mais adequado para o armazenamento em cache de sites dinâmicos. Parece haver um consenso geral sobre o nginx superando o verniz (pelo menos em pequenos objetos estáticos).

Você pode tanto proxy_cache, fastcgi_cache ou simplesmente servir de disco diretamente usando nginx. Eu sei que ele suporta memcached, mas o único benefício com o memcached seria se você tivesse vários servidores compartilhando o mesmo cache - além disso eu só vejo uma sobrecarga extra.

Você poderia deixar seu sistema de arquivos (e Espero que o controlador RAID) cache os dados (mais utilizados), ou apenas colocá-lo em um disco virtual!

Estou confiante de que um servidor xeon com pouco orçamento e com alguns GB de memória RAM irá lidar com alguns milhares de solicitações por segundo, já que você só está servindo conteúdo estático. Também acho que é possível pré-compactar todo o conteúdo estático, para que você não adicione esse ovearhead extra a cada solicitação.

    
por 22.06.2011 / 19:50
2

Nada é melhor do que apenas empurrar arquivos para o cliente. Se você puder fazer isso, eu tentaria muito fazer isso, já que ele será escalonado facilmente e não exigirá cache sofisticado, mas apenas enviar o material preparado para o cliente. E o Nginx é particularmente bom nessa tarefa. Devido ao seu modelo de processamento baseado em eventos, ele usará menos recursos de magnitudes e provavelmente será muito mais rápido em comparação com o verniz baseado em thread quando houver muitas conexões simultâneas.

Os sistemas de arquivos básicos também são bons em armazenar arquivos em cache para leituras repetidas. Assim, eu acho que você está muito bem com um servidor simples, sem muita energia necessária da CPU, mas memória suficiente para o cache do sistema de arquivos, um bom subsistema de E / S. O sistema ideal seria capaz de armazenar em cache todos os objetos necessários na RAM, então você deve estar bem com um sistema com aproximadamente o tamanho de (tamanho-de-conjunto de trabalho + 1 GB). Dependendo do tamanho de seus objetos, eu também recomendo strongmente o uso de SSDs, pelo menos, como uma camada intermediária de cache para a ferrugem rotativa, para que objetos que ainda não estejam na RAM possam ser rapidamente recuperados. O padrão de E / S que você observará provavelmente será bastante aleatório, o que é algo que os SSDs podem realizar facilmente, mas em que os discos giratórios são ruins.

Geralmente, uma medida importante não é o número de usuários que navegam no site, mas o número real de conexões TCP simultâneas para o servidor e o rendimento necessário. Com alguns ajustes, você pode facilmente encher um tubo de gigabit com um sistema que custa cerca de US $ 3.000.

    
por 22.06.2011 / 21:28
1

Uma maneira mais padrão de fazer isso seria gerar os resultados em tempo real e depois atender a solicitações subsequentes de algum tipo de cache.

Você poderia fazer isso em código com algo como redis ou memcached (veja um exemplo básico de memcached em python em ). Você também pode usar um proxy de cache como o nginx para tentar fazer isso automaticamente.

    
por 22.06.2011 / 19:49
1

(resposta de baixa qualidade recebida, outras pessoas sabem disso melhor que eu):

Tenho certeza de que o nginx em combinação de I / O (RAM + SSD) facilmente atenderá a 1000 clientes com conteúdo html estático puro.

    
por 23.06.2011 / 12:43