¿Es posible ejecutar barniz con memoria y almacenamiento en disco?

8

Estoy interesado en maximizar los éxitos de caché y la eficiencia para un sitio que cambia lentamente. El host virtual no tiene una gran cantidad de RAM, pero me gustaría usar lo que está disponible para barnizar, pero recurrir a la memoria caché del disco si no hay suficiente memoria.

¿Es posible hacer esto con una sola instancia de barniz? Los documentos describen el almacenamiento "archivo" y "malloc" como opciones distintas.

usuario67641
fuente

Respuestas:

9

Usa el mallocmétodo. Intentará poner todo en RAM y el núcleo lo cambiará si es necesario. De esta manera, está utilizando la memoria y el disco juntos.

Al mismo tiempo, filefunciona mucho mejor que malloccuando comienzas a golpear el disco. Para más información, ver:

Sameer
fuente
Gracias, esto funciona. Creo que solo usaré el método malloc con RAM disponible y confiaré en el servidor para realizar el almacenamiento en caché de disco (por ejemplo, apache mod_disk_cache).
user67641
1
¿Hay alguna manera de conectar Varnish a otros backends basados ​​en memoria?
CMCDragonkai
1
Tenga en cuenta que en realidad podría hacer lo contrario: use solo el filebackend y confíe en el almacenamiento en caché de disco de Linux que usa toda la memoria disponible de forma predeterminada. Sí, siempre está escribiendo en el disco (lo que puede ser un problema si no está utilizando SSD), pero al leer varias veces los mismos archivos, leerá mucho solo de la memoria.
Benjamin
7

Debe nombrar el almacenamiento respectivamente de la siguiente manera y en vcl especifica con qué almacenamiento de back-end desea usar beresp.storage = storage_name. .

Barniz 3. * opciones de proceso

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 Varnish v4, puede seguir las instrucciones de la publicación oficial del blog https://info.varnish-software.com/blog/partition-your-varnish-cache

carcaj
fuente
¿Qué hace la if (req.url ~ "html")condición? Creo que el OP quiere usar ambos backends de almacenamiento de la manera más eficiente para todas las solicitudes.
kontextify