Memcache (d) vs Varnish pour accélérer l'architecture Web à 3 niveaux

111

J'essaie d'accélérer mon benchmark (architecture web à 3 niveaux), et j'ai quelques questions générales liées à Memcache (d) et Varnish.

  • Quelle est la différence?
    Il me semble que Varnish est derrière le serveur Web, qui met en cache les pages Web et ne nécessite pas de changement de code, juste une configuration.
    De l'autre côté, Memcached est un système de mise en cache à usage général et principalement utilisé pour mettre en cache le résultat de la base de données et nécessite un changement de getméthode (première recherche dans le cache).

  • Puis-je utiliser les deux? Vernis sur le serveur Web avant et Memcached pour la mise en cache de la base de données?

  • Quelle est la meilleure option?

    (scénario 1 - principalement écrire,
    scénario 2 - principalement lire,
    scénario 3 - lire et écrire sont similaires)

user449219
la source

Réponses:

269
  • Varnish est devant le serveur Web; il fonctionne comme un proxy http inverse qui met en cache.
  • Vous pouvez utiliser les deux.
  • Surtout écrire - Varnish devra avoir purgé les pages concernées. Cela entraînera une surcharge et peu d'avantages pour les pages modifiées.
  • Surtout lu - Le vernis couvrira probablement la majeure partie de celui-ci.
  • Lecture et écriture similaires - Varnish servira une grande partie des pages pour vous, Memcache fournira des informations pour les pages qui ont un mélange de données connues et nouvelles vous permettant de générer des pages plus rapidement.

Un exemple qui pourrait s'appliquer à stackoverflow.com: l'ajout de ce commentaire a invalidé le cache de la page, donc cette page devrait être effacée de Varnish (et aussi ma page de profil, ce qui ne vaut probablement pas la peine d'être mis en cache pour commencer. N'oubliez pas de tout invalider les pages concernées peuvent être un peu problématiques). Cependant, tous les commentaires sont toujours dans Memcache, la base de données n'a donc qu'à écrire ce commentaire. Rien d'autre ne doit être fait par la base de données pour générer la page. Tous les commentaires sont tirés par Memcache, et la page est mise en cache jusqu'à ce que quelqu'un l'affecte à nouveau (peut-être en votant ma réponse). Encore une fois, la base de données écrit le vote, toutes les autres données sont extraites de Memcache et la vie est rapide.

Memcache évite à votre base de données d'effectuer beaucoup de travail de lecture, Varnish enregistre votre serveur Web dynamique de la charge du processeur en vous faisant générer des pages moins fréquemment (et allège également un peu la charge de la base de données si ce n'est pour Memcache).

Jeff Ferland
la source
3
ceci: "(peut-être en votant ma réponse vers le haut)" m'a fait voter votre réponse
Cesc
il n'est donc pas recommandé aux sites comme stackoverflow (ou à des sites comme facebook avec une page de flux d'activité) d'utiliser du vernis. c'est ça?
Mohammad Reza Esmaeilzadeh
@jbferland Ma question dans votre exemple est que le haut de cette page contient une photo de moi avec le nombre de points que j'ai reçus, comment pouvons-nous mettre en cache avec Varnish mais montrer cette zone dynamique?
Hossj
@Hossj utilisant des balises ESI.
Johny Pie
Varnish peut être devant un serveur Web mais aussi derrière un serveur Web. Il peut aussi être à la fois devant et derrière le même serveur web ;-) Par exemple Varnish ne supporte pas SSL donc il n'est pas rare d'avoir un serveur web devant Varnish pour gérer HTTPS. Le trafic est ensuite transmis par proxy à Varnish qui communique ensuite avec le serveur Web d'application - qui peut être le même serveur que celui qui gère le trafic HTTPS.
mat
32

Mon expérience vient de l'utilisation de Varnish avec Drupal. En termes aussi simples que possible, voici comment je répondrais:

En général, Varnish fonctionne pour le trafic non authentifié (via un cookie) et Memcached mettra en cache le trafic authentifié.

Alors utilisez les deux.

Joe Hyde
la source
5
Vous l'avez cloué, au fait, je pense que Varnish fonctionne mieux sur la mise en cache des utilisateurs anonymes ...
Allan Jikamu