Türchen 21: Varnish – der Webbeschleuniger für den Magento-Shop

Dass Magento ein mächtiges und leistungsstarkes E-Commerce-System ist, wissen wir. Allerdings werden die meisten Magento-User auch zustimmen, wenn ich sage, dass die Anwendung sehr ressourcenhungrig ist. Schnellere Ladezeiten und eine Steigerung der Conversion Rate sind also gerade bei komplexen Onlineshops oft ein großer Wunsch der Shopbetreiber. Die Lösung hierfür heißt Varnish.

Was ist Varnish?

Varnish ist ein Webbeschleuniger. Er wird vor den eigentlichen Webserver (das Backend) vorgeschaltet. Varnish merkt sich den ersten Seitenaufruf und legt sich die entsprechenden Inhalte im Arbeitsspeicher ab. Varnish kann beim zweiten Aufruf also direkt ausliefern und sorgt auf diese Weise für eine hohe Performance und blitzschnelle Ladezeiten.

Shop-Besucher können sich so besonders komfortabel auf den Seiten bewegen und das Online-Shopping-Erlebnis unter den besten Voraussetzungen erleben. Die Kundenzufriedenheit steigt dadurch erheblich.

Diagramm_rgb_Varnish_Performancesteigerung_Mittwald-e1356016701238-650x447

Edge Side Includes

Wenn eine Seite überwiegend statische und vereinzelt dynamische Inhalte wie Warenkörbe oder News-Boxen enthält, macht es keinen Sinn, die gesamte Seite zu cachen. Diese Bereiche sollten per AJAX nachgeladen werden.

Alternativ gibt es die Möglichkeit, sogenannte ESIs (Edge Side Includes) zu verwenden. Die erforderlichen ESI-Tags werden mit Hilfe der Extension „PageCache powered by Varnish“ von für Magento automatisch im HTML-Code gesetzt. So werden die entsprechenden Abschnitte bei jedem Aufruf nachgeladen. Auch das zeitweilige Cachen dieser Objekte, ist z. B. möglich.

VCL – Varnish Configuration Language

Varnish bringt eine mächtige aber auch leichtgewichtige Konfigurationssprache mit, um das System zu konfigurieren, nämlich die Varnish Configuration Language. Mit VCL könnt Ihr Varnish ganz an eure individuellen Bedürfnisse anpassen.

So könnt Ihr festlegen, welche Inhalte aus dem Cache geladen oder dynamisch vom Webserver geliefert werden. Außerdem könnt Ihr per VCL den Cache leeren oder das Verhalten bei gesetzten Cookies durch Anpassungen von Header-Informationen beeinflussen.

Mit dem Varnish Book steht Euch eine umfangreiche Dokumentation als Grundlage für die Konfiguration zur Verfügung. Bei Mittwald gibt es außerdem als Starthilfe vorkonfigurierte VCL-Dateien für Magento.

Die Varnish-Verwaltungsoberfläche von Mittwald bietet zudem einen Editor zum Bearbeiten eurer persönlichen VCL-Konfiguration. Wenn Ihr Änderungen vornehmt, werden diese sofort im System aktiv und können über umfangreiche Analyse- sowie Statistiktools ausgewertet werden.

Wie binde ich Varnish in meinen Magento-Shop ein?

Um Magento-Shops mit Varnish zu verbinden, haben wir uns für die Extension „PageCache powered by Varnish“ (Github) entschieden.

Die initiale Einrichtung gestaltet sich einfach, die Einstellungen lassen sich im Backend unter „System → Konfiguration → Erweitert → System → PageCache powered by Varnish“ finden

varnish-config-650x477

Die wichtigsten Optionen lassen sich hier bequem einstellen. Hierzu gehört die eigentliche Aktivierung des Caches, die IP des Varnish-Servers und die Routen, für die das Caching generell deaktiviert werden soll.

Die Extension bringt auch VCL-Dateien für Varnish 2.0 und Varnish 3.0 mit und deckt bereits die Grundfunktionen ab. So bietet sie einen guten Einstieg für eigene Erweiterungen.



Ein Beitrag von Daniel Wolf
Daniel's avatar

Daniel Wolf ist Mitarbeiter im technischen Kundenservice des Webhosting-Dienstleisters Mittwald. Dort beschäftigt er sich insbesondere mit Magento-Themen und steht den Kunden bei allen Fragen zum E-Commerce-System zur Verfügung.

Alle Beiträge von Daniel

Kommentare
Thomas Sieger am

Varnish hat deutlich die Ladezeit von unseren Shop verringert und wir werden jetzt deutlich besser bei Google positioniert. Spielt die ladezeit einer Seite echt eine große Rolle bei der Google Positionierung ?

Liebe Grüße

MagicPeter am

Hi,

den Cache aufwärmen geht relativ leicht:

Server Cache Warmer - Script

crawler-script erstellen sudo nano /var/crons/cronprojekt.sh

Warmer Script

!/bin/bash

wget --quiet http://domain.de/sitemap.xml --no-cache --output-document - | egrep -o "http://domain.de[^ /dev/null 2>&1 echo $line done date -u > /var/log/cronprojekt.log

crawler-script von hand ausführen sudo bash /var/crons/cronprojekt.sh

crontab editieren (Script wurde alle 30 Minuten aufgerufen) crontab -e

/30 * sudo bash /var/crons/cronprojekt.sh

logfile anschauen sudo nano /var/log/cronprojekt.log

Die Crontab-Syntax http://troubadix.dn.fh-koeln.de/unix/cronjobs_syntax.html

So damit kann man auf einem Linux-Server / JiffyBox sehr einfach alle Seiten einlesen.

Ich hoffe es hilft jemandem...

Varnish ist einfach super...

Gruss Peter

Don Bosco van Hoi am

Ich finde es häufig unnötig, sämtliche Seiten durch den Varnish laufen zu lassen. Nach einem Deployment 40k+ Seiten zu cachen erzeugt schon einen ordentlichen Load. Sinnvoller könnte es sein, die am häufigsten frequentierten Seiten zu cachen. Wie das implementiert wird, bleibt hier jedem selber überlassen. Aber man bekommt ja selten auf sämtliche Seiten den Traffic gleichverteilt.

Gemäß dem Pareto-Prinzip (20/80) kann man so schneller deployen und bedient damit einen Großteil seiner Kunden.

torsti am

Hallo Diter,

ich hab da noch so ein altes Tool - den GSite Crawler - damit die Domain einfach aufgerufen, das Tool ruft alle möglichen Unterseiten auf und somit wurden alle Seiten mal angefasst und sind im Varnish. Kostet zwar ein paar Euro - falls es das überhaupt noch gibt - aber sicher gibt es ähnliches auch für lau. Ist ja vielleicht ein Ansatz zu einer Lösung.

Christoph am

Hi Diter, du könntest dafür die Sitemap verwenden oder eine eigene Liste von zu cachenden Seiten vorhalten und diese zum Beispiel nach einem Deployment oder einem Neustart von Varnish mittels cUrl, wget einem Textbrowser oder ähnlichem scriptgesteuert aufrufen. Der Begriff "schnell" ist dabei allerdings relativ zu betrachten. Das geht zwar schneller als per Hand oder darauf zu warten, dass die Kunden auf jeder Seite waren, doch es dauert dennoch seine Zeit jede einzelne der aufgerufenen Seiten zu bauen und auszuliefern. Um das zeitlich abzuschätzen: Öffne eine ungecachte Seite und warte bis sie fertig übertragen ist. Die Zeit, die du dafür benötigst, rechnest du mal die Anzahl der Produkte und addierst sonstige Seiten (Startseite, Kontakt, Impressum etc.) plus die Anzahl der Kategorien (eventuell auch mit Seiten) und das alles pro StoreView. Zu beachten ist auch, dass dein Shop in dieser Zeit einer nicht zu vernachlässigenden Last ausgesetzt wird. Das sollte die Hardware unbedingt aushalten sonst zwingst du deinen Shop direkt in die Knie.

Diter am

Hallo, ich habe ca 40.000 Artikel in meinem Shop und habe einen Varnish Cache im Einsatz. Gibt es die Möglichkeit alle Seiten sehr schnell 1 x zu öffnen, so dass Sie schnell im Varnisch sind? Ich bin kein Experte falls euch die Formulierung komisch erscheint, bite ich um Nachsicht.

Freue mich auf Hilfe

Michael Stucki am

@Simon: Soweit ich sehen kann, wird der Phoenix PageCache for Varnish automatisch abgeschaltet, wenn der Store gewechselt wird. Ich habe darum den Eindruck, dass Mehrsprachigkeit zwar möglich ist, dass dann aber nur die Standardsprache gecached wird. Irre ich mich?

Alternatives Cache Software am

Ich meinte natürlich Cache Modul und nicht "Cash" sorry :))

Alternatives Cash Software am

Guten Tag.

Erstmal vielen Dank für den gelungenen Beitrag, und auch für den Hinweis auf das Cash Modul "PageCache powered by Varnish".. Allerding habe ich eine Frage. Ich habe letztens ein weiteres Cash Modul entdeckt, nennt sich "Turpentine - Varnish Cache" und habe mir auch die Demo Seite angeschaut, die mit der Erweiterung ausgestatet ist, und ich muss sagen dass es schon Eindruck macht... haben Sie Erfahrung mit der Erweiterung? Vielleicht können Sie eines der beiden Module Empfehlen...?!

http://www.magentocommerce.com/magento-connect/turpentine-6332.html

http://www.magentocommerce.com/magento-connect/pagecache-powered-by-varnish.html

Links der Woche I - codesprint GmbH am

[...] Varnish – der Webbeschleuniger für den Magento Shop Kurze Einführung in die Varnish Welt. [...]

Andreas Emer am

Wie bereits gedacht, gibts bei der empfohlenen Extension von Phoenix leider keinen ESI Support.

@Daniel Könntest Du Deinen Artikel bitte editieren, oder kurz beschreiben an welcher Stelle Du bei der Phoenix Extension ESI Support siehst.

Simon am

Hallo,

@Michael: ja, zwei Shops laufen jeweils in deutsch, französisch und englisch.

@Tobi: das stimmt schon; ich hatte den Artikel oben so verstanden, dass Varnish Cookies auslesen und danach bestimmen kann, was geladen wird; mein erster Ansatz wäre also (vllt auch erstmal mit einem normalen Cache) dahin gegangen, es zu realisieren, dass Seiten mehrfach gecacht werden, zB über einen Parameter in der URL, wenn der Nutzer einer bestimmten Kundengruppe angehört.

Dein Ansatz mit Javascript hört sich aber weitaus simpler und einleuchtender ein :) Danke dafür, ich werde das bei ein wenig Freizeit mal in Angriff nehmen.

Am simpelsten wäre wohl ohnehin ein weiterer, eigener Store-View gewesen, aber darauf haben wir schon aus Performance-Gründen verzichtet.

Tobias Vogt am

Simon:

So mehr einzelne Fälle du dir schaffst um so weniger hilft dir Caching. Das Problem ist das es nur schneller wird wenn eben die ganze Seite im Cache liegt. Sobald viele Ausnahmen, z.B. Preise je Kunde, eingreifen wird der Vorteil weniger.

Hier könntest du höchstens eins Modul schreiben welches die Preise im Nachgang per Javascript austauscht. Dann könntest du alle Kunden-Preise cachen und, unabhängig davon, die Seiten mit Standardpreisen.

Liebe Grüße

Tobi

Michael Stucki am

Habt ihr damit auch mehrsprachige Shops am Laufen?

Simon am

Varnish liest man ja immer wieder mal, ich habe es bisher aber noch nicht ausprobiert. Es wäre nett, wenn einer der "erfahreneren" Nutzer mit kurz die Frage beantworten könnte, wie flexibel man beim Einsetzen von Cookies ist. Gegeben ist der Fall, dass man für verschiedene Kundengruppen verschiedene Produktlisten und verschiedene Preise anzeigen will. Mit dem Magento-Cache bin ich da auf Probleme gestoßen...

Andreas Emer am

Jetzt ohne es getestet zu haben, bist Du Dir sicher, dass der ESI Support bereits funktioniert? In der Readme steht, dass ESI noch folgen wird, auch habe ich jetzt spontan keine JS Daten, welche man eigentlich für ESI benötigen würden gefunden. Ich werd am Wochenende hoffentlich Zeit haben mir die Extension von Phoenix Medien anzusehen...

Dein Kommentar