É possível executar verniz com memória e armazenamento em disco?

8

Estou interessado em maximizar os acertos e a eficiência do cache para um site que muda lentamente. O host virtual não possui uma quantidade enorme de RAM, mas eu gostaria de usar o que está disponível para verniz, mas voltar ao cache do disco se não houver memória suficiente.

É possível fazer isso com uma única instância de verniz? Os documentos descrevem o armazenamento "arquivo" e "malloc" como opções distintas.

user67641
fonte

Respostas:

9

Use o mallocmétodo Ele tentará colocar tudo na RAM e o kernel irá trocá-lo, se necessário. Dessa forma, você está usando memória e disco juntos.

Ao mesmo tempo, fileexecuta muito melhor do que mallocquando você começa a bater no disco. Para mais informações, consulte:

Sameer
fonte
Obrigado, isso funciona. Acho que vou usar o método malloc com a RAM disponível e confiar no servidor para fazer o cache do disco (por exemplo, apache mod_disk_cache).
User67641
1
Existe uma maneira de conectar o Varnish a outros back-ends baseados em memória?
CMCDragonkai
1
Observe que você pode realmente fazer o oposto: use apenas o fileback - end e conte com o cache de disco do Linux que usa toda a memória disponível por padrão. Sim, você está sempre gravando no disco (o que pode ser um problema se você não estiver usando SSDs), mas ao ler várias vezes os mesmos arquivos, você lerá muito apenas da memória.
Benjamin
7

Você precisa nomear o armazenamento, respectivamente, da seguinte maneira e, na vcl, você especifica com qual armazenamento de back-end você deseja usar beresp.storage = storage_name. .

Verniz 3. * opções de processo

DAEMON_OPTS="-a :80 \
             -T localhost:6082 \
             -f /etc/varnish/default.vcl \
             -S /etc/varnish/secret \
             -s foo=malloc,512m \
             -s bar=file,/var/lib/varnish/varnish_storage.bin,512m"

vcl v3

sub vcl_fetch {
    if (req.url ~ "html") {
       set beresp.storage = "foo";
       set beresp.http.x-storage = "foo";
    } else {
       set beresp.storage = "bar";
       set beresp.http.x-storage = "bar";
    }
    return (deliver);
}

Para o Varnish v4, você pode seguir as instruções da postagem oficial do blog https://info.varnish-software.com/blog/partitioning-your-varnish-cache

tremor
fonte
O que a if (req.url ~ "html")condição faz? Acho que o OP quer usar os dois back-ends de armazenamento da maneira mais eficiente para todas as solicitações.
kontextify