Est-il possible d'exécuter du vernis avec mémoire et stockage sur disque?

8

Je souhaite maximiser les accès au cache et l'efficacité d'un site à évolution lente. L'hôte virtuel n'a pas une énorme quantité de RAM, mais j'aimerais utiliser ce qui est disponible pour le vernis, mais revenir au cache disque s'il n'y a pas assez de mémoire.

Est-il possible de le faire avec une seule instance de vernis? Les documents décrivent le stockage "fichier" et "malloc" comme des options distinctes.

user67641
la source

Réponses:

9

Utilisez la mallocméthode. Il essaiera de tout mettre en RAM et le noyau le remplacera si nécessaire. De cette façon, vous utilisez la mémoire et le disque ensemble.

En même temps, il filefonctionne beaucoup mieux que malloclorsque vous commencez à frapper le disque. Pour plus d'informations, voir:

Sameer
la source
Merci, ça marche. Je pense que je vais simplement utiliser la méthode malloc avec la RAM disponible, et compter sur le serveur pour faire la mise en cache du disque (par exemple apache mod_disk_cache).
user67641
1
Existe-t-il un moyen de connecter Varnish à d'autres backends basés sur la mémoire?
CMCDragonkai
1
Notez que vous pourriez en fait faire le contraire: utiliser uniquement le filebackend et compter sur la mise en cache disque de Linux qui utilise par défaut toute la mémoire disponible. Oui, vous écrivez toujours sur le disque (ce qui peut être un problème si vous n'utilisez pas de SSD), mais lorsque vous lisez plusieurs fois les mêmes fichiers, vous lirez beaucoup de mémoire uniquement.
Benjamin
7

Vous devez respectivement nommer le stockage comme suit et dans vcl, vous spécifiez avec quel stockage backend vous souhaitez utiliser beresp.storage = storage_name. .

Vernis 3. * options de processus

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);
}

Pour Varnish v4, vous pouvez suivre les instructions de l'article de blog officiel https://info.varnish-software.com/blog/partitioning-your-varnish-cache

trembler
la source
Que fait la if (req.url ~ "html")condition? Je pense que l'OP souhaite utiliser les deux backends de stockage de la manière la plus efficace pour toutes les demandes.
kontextify