Caching: Varnish vs fastcgi_cache no Nginx em um ambiente de vários sites

1

Eu tenho uma configuração de um VPS com vários sites. Alguns dos sites são sites WP e alguns deles são outros sites dinâmicos.

Estou interessado em adicionar um tipo de camada de proxy / armazenamento em cache reverso. No entanto, não quero armazenar todos os sites em cache ...

Eu vi que muitas pessoas recomendam usar o verniz. O problema que encontrei no Varnish é que ele pega a porta 80 e armazena tudo em cache.

Quando procurava soluções ou formas de evitar o cache de alguns sites, encontrei o fastcgi_cache. Aparentemente, você pode armazenar em cache diretamente através do Nginx em arquivos e depois publicá-lo estaticamente. Eu também vi em algum lugar que você pode armazenar em cache de Nginx em memcached, mas eu não sei como ainda.

Enfim, aqui estão minhas opções: 1. Usando o Varnish e, de alguma forma, aprimorando os arquivos de configuração para passar solicitações com base no nome do domínio. 2. Usando fastcgi_cache no Nginx. 3. Usando um sanduíche. Ter o Nginx ouvindo a porta 80, servindo os arquivos estáticos e enviando todos os arquivos php para o Varnish em outra porta que passará todos os usuários sem cache para outra instância Nginx.

O que você acha que devo fazer?

Obrigado.

    
por tounano 11.07.2012 / 20:22

3 respostas

4

Você pode fazer com que o Varnish passe algumas solicitações com base no nome de domínio, é muito fácil e o Verniz não atrasa visivelmente os sites que você não está armazenando em cache.

Você acabou de adicionar um pequeno código VCL em vcl_recv como:

if (req.http.Host == "www.pass_this_thru.com") {
    return(pass);
}
    
por 11.07.2012 / 21:10
3

Acho que isso depende da carga que você espera receber, mas os modelos escolhidos pelos dois sistemas são arquitetonicamente diferentes.

Primeiramente, o nginx usa um modelo baseado em eventos para manipular pedidos, enquanto o Varnish usa um modelo baseado em encadeamento.

O Varnish coloca seu conteúdo em cache em uma árvore de críticas muito eficiente. Eu não consegui descobrir qual implementação é usada pelo nginx.

O nginx deve ser mais eficiente porque usa um modelo baseado em evento sem bloqueio para distribuir a carga uniformemente com o mínimo de contenção possível, no entanto, se os tempos de pesquisa do cache forem muito mais lentos, você poderá cancelar as coisas.

Varnish cria pools de thread (normalmente de muitos threads, 500 ou mais) para lidar com multi-processamento. O custo aqui está na troca de contexto, especialmente se você tiver muitas solicitações para processar.

Do jeito que eu vejo - o verniz terá um melhor desempenho à medida que você aumenta o número de núcleos que você tem para combater a contenção, além de seu algoritmo de cache realmente muito bom torna suas pesquisas e respostas muito rápidas. Use verniz se você tiver muitos núcleos e tiver muito tráfego / conteúdo para entregar.

O Nginx, por outro lado, tem uma abordagem muito menos flexível com o gerenciamento de recursos e eu acredito em caches pequenos / médios em sistemas de baixa potência que provavelmente funcionarão melhor em termos de eficiência e solicitações por segundo.

No geral, o verniz funciona melhor em um sistema dedicado com pelo menos 2 CPUs / núcleos. Ele irá escalar linearmente à medida que você adiciona cpus.

O Nginx provavelmente funciona melhor em um sistema multi-rolagem menor, em que a pressão do cache não é tão alta. Ele também será dimensionado linearmente, mas suspeito que seu algoritmo de cache e implementação não seja tão bom quanto o do verniz, o que pode acabar sendo um gargalo de desempenho quando você alcança altos níveis de tráfego.

    
por 11.07.2012 / 22:21
1

Acho que isso seria interessante para você: Resultados do teste: Nginx & Verniz

    
por 12.07.2012 / 03:50