Memcache (d) vs. Varnish zur Beschleunigung der 3-Tier-Webarchitektur


111

Ich versuche, meinen Benchmark (3-Tier-Webarchitektur) zu beschleunigen, und habe einige allgemeine Fragen zu Memcache (d) und Varnish.

  • Was ist der Unterschied?
    Es scheint mir, dass Varnish hinter dem Webserver steht, Webseiten zwischenspeichert und keine Änderung des Codes erfordert, sondern nur die Konfiguration.
    Auf der anderen Seite ist Memcached ein Allzweck-Caching-System, das hauptsächlich zum Zwischenspeichern von Ergebnissen aus Datenbanken verwendet wird und eine Änderung der getMethode erfordert (erste Cache-Suche).

  • Kann ich beide verwenden? Lack im Front-Webserver und Memcached für Datenbank-Caching?

  • Was ist eine bessere Option?

    (Szenario 1 - meistens schreiben,
    Szenario 2 - meistens lesen,
    Szenario 3 - lesen und schreiben sind ähnlich)

Antworten:


269
  • Lack ist vor dem Webserver; Es funktioniert als Reverse-HTTP-Proxy, der zwischengespeichert wird.
  • Sie können beide verwenden.
  • Meistens schreiben - Lacke müssen betroffene Seiten gelöscht haben. Dies führt zu einem Overhead und wenig Nutzen für geänderte Seiten.
  • Meistens gelesen - Lack wird wahrscheinlich das meiste davon abdecken.
  • Ähnliches Lesen und Schreiben - Lack wird viele Seiten für Sie bereitstellen. Memcache bietet Informationen für Seiten mit einer Mischung aus bekannten und neuen Daten, sodass Sie Seiten schneller generieren können.

Ein Beispiel, das für stackoverflow.com gelten könnte: Durch Hinzufügen dieses Kommentars wurde der Seitencache ungültig, sodass diese Seite aus Varnish (und auch meiner Profilseite, die wahrscheinlich zunächst kein Caching wert ist, gelöscht werden muss. Denken Sie daran, alle ungültig zu machen betroffene Seiten können ein Problem sein). Alle Kommentare befinden sich jedoch noch in Memcache, sodass die Datenbank nur diesen Kommentar schreiben muss. Die Datenbank muss nichts anderes tun, um die Seite zu generieren. Alle Kommentare werden von Memcache abgerufen und die Seite wird zwischengespeichert, bis jemand sie erneut beeinflusst (möglicherweise durch Abstimmung meiner Antwort). Wieder schreibt die Datenbank die Abstimmung, alle anderen Daten werden aus Memcache abgerufen und das Leben ist schnell.

Memcache erspart Ihrer Datenbank viel Lesearbeit. Varnish erspart Ihrem dynamischen Webserver die CPU-Auslastung, indem Sie weniger häufig Seiten generieren (und die Datenbanklast auch ein wenig verringern, wenn nicht für Memcache).


3
dies: "(vielleicht durch Abstimmung meiner Antwort)" brachte mich dazu, Ihre Antwort abzustimmen
Cesc

Daher wird Websites wie Stackoverflow (oder Websites wie Facebook mit Aktivitäts-Feed-Seite) nicht empfohlen, Lack zu verwenden. ist es?
Mohammad Reza Esmaeilzadeh

@jbferland Meine Frage in Ihrem Beispiel ist, dass oben auf dieser Seite ein Foto von mir mit der Anzahl der Punkte angezeigt wird, die ich erhalten habe. Wie können wir mit Lack zwischenspeichern, aber diesen Bereich dynamisch zeigen?
Hossj

@Hossj mit ESI-Tags.
Johny Pie

Der Lack befindet sich möglicherweise vor einem Webserver, aber auch hinter einem Webserver. Es kann sich auch gleichzeitig vor und hinter demselben Webserver befinden ;-) Zum Beispiel unterstützt Varnish kein SSL, so dass es nicht ungewöhnlich ist, einen Webserver vor Varnish zu haben, der HTTPS verarbeitet. Der Datenverkehr wird dann an Varnish weitergeleitet, der dann mit dem Anwendungswebserver kommuniziert. Dies kann derselbe Server sein, der den HTTPS-Datenverkehr verarbeitet.
Matt

32

Meine Erfahrung stammt aus der Verwendung von Lack mit Drupal. In so einfachen Worten wie möglich würde ich folgendermaßen antworten:

Im Allgemeinen funktioniert Varnish für nicht authentifizierten Datenverkehr (über Cookies), und Memcached speichert authentifizierten Datenverkehr zwischen.

Verwenden Sie also beide.


5
Sie haben es geschafft, übrigens, ich denke, Varnish funktioniert besser beim Zwischenspeichern anonymer Benutzer ...
Allan Jikamu
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.