Zuhause Software Lack: Bereiten Sie sich auf einen Schnitt vor!

Lack: Bereiten Sie sich auf einen Schnitt vor!

Inhaltsverzeichnis:

Anonim

Wenn es um Website-Leistung geht, ist Lack eine heiße Technologie. Mit einer einfachen Installation und Konfiguration ist es möglich, die Leistung einer Website zu steigern und mit nur einem kleinen virtuellen privaten Server bis zu einer Million Seiten bereitzustellen. Ich zeige Ihnen vier mögliche Konfigurationen, mit denen Sie die Reaktionszeit Ihrer Website verbessern können, unabhängig davon, ob Sie Hunderte, Tausende oder Millionen von Seiten bedienen.

Eine Einführung in den Lack

Varnish-Cache ist ein Web-Beschleuniger mit dem Ziel, Website-Inhalte zwischenzuspeichern. Es ist ein Open-Source-Projekt, das darauf abzielt, den nicht-invasiven Zugriff auf Websites zu optimieren und zu beschleunigen, ohne den Code zu ändern, und das es Ihnen ermöglicht, Ihre Hände in Ihre Website zu stecken.


Die Entwickler von Varnish Cache nannten es einen Web-Beschleuniger, da sein Hauptziel darin besteht, das Front-End einer Website zu verbessern und zu beschleunigen. Lack erreicht dies, indem Kopien der vom Webserver gelieferten Seiten in seinem Cache gespeichert werden. Wenn dieselbe Seite das nächste Mal angefordert wird, wird die Kopie von Varnish bereitgestellt, anstatt die Seite vom Webserver anzufordern, was zu einer enormen Leistungssteigerung führt.


Ein weiteres wichtiges Merkmal von Varnish Cache ist neben der Leistung die Flexibilität der Konfigurationssprache VCL. Mit VCL können Richtlinien für die Behandlung eingehender Anforderungen erstellt werden. In einer solchen Richtlinie können Sie entscheiden, welchen Inhalt Sie bereitstellen möchten, von wo Sie den Inhalt erhalten möchten und wie die Anforderung oder Antwort geändert werden soll.


In den folgenden Konfigurationsbeispielen werde ich Ihnen zeigen, welche VCL-Regeln verwendet werden müssen, um bestimmte Ziele zu erreichen, vom einfachen Zwischenspeichern von Bildern und statischen Objekten bis zur Verwendung von Varnish in einer verteilten Umgebung oder als Load Balancer.


Alle folgenden Beispiele gelten für Lack 3.x. Bitte beachten Sie, dass Varnish 2.x andere Syntax und Regeln verwendet, sodass diese Beispiele nicht mit dieser Version kompatibel sind.


Die folgenden Hauptzustände von Varnish werden in der VCL-Konfigurationsdatei verwendet:


recv

Dies ist die erste Funktion, die beim Empfang einer Anfrage aufgerufen wird. Hier können wir die Anfrage bearbeiten, bevor wir prüfen, ob sie im Cache vorhanden ist. Wenn eine Anforderung nicht in einen Cache gestellt werden kann, kann in dieser Phase auch der Back-End-Server ausgewählt werden, an den die Anforderung gesendet wird.


bestehen

Wir können diese Funktion verwenden, wenn wir die Anfrage an den Webserver übergeben und die Antwort zwischenspeichern möchten.


Rohr

Diese Funktion umgeht Lack und sendet die Anforderung an den Webserver.


Nachsehen

Bei einer Suche fragt Varnish, ob die Antwort im Cache vorhanden und gültig ist.


holen

Diese Funktion wird aufgerufen, nachdem die Wiederherstellung von Inhalten vom Back-End durch ein Bestehen oder einen Fehlschlag aufgerufen wurde.

Die Grundlagen: Bilder zwischenspeichern

Schauen wir uns also ein Konfigurationsbeispiel an. In diesem ersten Beispiel werden nur die Bilder und die statischen Dateien wie CSS-Dateien zwischengespeichert. Diese Konfiguration ist sehr nützlich, wenn Sie die Website, die Sie verbessern möchten, nicht kennen. Sie können also einfach festlegen, dass alle Bilder, CSS und JavaScript für alle Benutzer gleich sind. Zur Unterscheidung der Benutzer verwendet das HTTP-Protokoll Cookies. Daher müssen diese bei dieser Art von Anforderung entfernt werden, damit sie für Varnish alle gleich sind:

sub vcl_recv{


if(req.url ~ " * \.(png|gif|jpg|swf|css|js)"{

unset req.http.cookie;


unset req.http.Vary;

return(lookup);

}


# strip the cookie before the image is inserted into cache.

sub vcl_fetch {

if (req.url ~ "\.(png|gif|jpg|swf|css|js)$") {

unset beresp.http.set-cookie;

}

Und das ist es. Mit dieser VCL-Datei können Sie leicht statischen Inhalt zwischenspeichern.

Der Standard: Bilder und Seiten zwischenspeichern

In der Regel möchten Sie nicht nur den statischen Inhalt Ihrer Website zwischenspeichern, sondern auch einige dynamische Seiten, die von Ihrem Webserver generiert werden, aber für alle Benutzer - oder zumindest für alle Ihre anonymen - gleich sind Benutzer. In dieser Phase müssen Sie wissen, welche Seiten zwischengespeichert werden können und welche nicht.


Ein gutes Beispiel ist Wordpress, eines der am häufigsten verwendeten Content-Management-Systeme. Wordpress generiert Webseiten dynamisch mit PHP und fragt eine MySQL-Datenbank ab. Das ist schön, weil Sie Ihre Website über die Administrationsoberfläche mit wenigen Klicks aktualisieren können, aber es ist auch teuer in Bezug auf die verwendeten Ressourcen. Warum sollte jedes Mal, wenn ein Benutzer auf der Startseite landet, dasselbe PHP-Skript und dieselbe MySQL-Abfrage ausgeführt werden? Wir können Varnish verwenden, um die am häufigsten besuchten Seiten zwischenzuspeichern und unglaubliche Ergebnisse zu erzielen.


Dies sind einige Regeln, die in einer Wordpress-Installation nützlich sein können:

sub vcl_recv{

# Let's make sure we aren't compressing already compressed formats.

if (req.http.Accept-Encoding) {

if (req.url ~ "\.(jpg|png|gif|gz|tgz|bz2|mp3|mp4|m4v)(\?. * |)$") {

remove req.http.Accept-Encoding;

} elsif (req.http.Accept-Encoding ~ "gzip") {

set req.http.Accept-Encoding = "gzip";

} elsif (req.http.Accept-Encoding ~ "deflate") {

set req.http.Accept-Encoding = "deflate";

} else {

remove req.http.Accept-Encoding;

}

}


if (req.url ~ "^/$") {

unset req.http.cookie;

}


# Unset all cookies if not Wordpress admin - otherwise login will fail


if (!(req.url ~ "wp-(login| admin )")) {

unset req.http.cookie;

return(lookup);

}


# If you request the special pages go directly to them


if (req.url ~ "wp-(login| admin )") {

return (pipe);

}


}


sub vcl_miss {

if (!(req.url ~ "wp-(login| admin )")) {

unset req.http.cookie;

}

if (req.url ~ "^/+.(jpeg|jpg|png|gif|ico|js|css|txt|gz|zip|lzma|bz2|tgz|tbz|html|htm)(\?.|)$") {

unset req.http.cookie;

set req.url = regsub(req.url, "\?.$", "");

}

if (req.url ~ "^/$") {

unset req.http.cookie;

}

}

sub vcl_fetch {

if (req.url ~ "^/$") {

unset beresp.http.set-cookie;

}

# Unset all cookies if not Wordpress admin - otherwise login will fail

if (!(req.url ~ "wp-(login| admin )")) {

unset beresp.http.set-cookie;

}

}

Sie können sehen, dass in diesem Beispiel alle Seiten unserer Website zwischengespeichert werden. Bei denjenigen, deren URL "wp-admin" oder "wp-login" enthält, handelt es sich bei den Zeichenfolgen um "spezielle" Speicherorte für die Anmeldung Wordpress als Administrator. Aus diesem Grund möchten wir direkt mit dem Webserver kommunizieren und den Varnish-Cache umgehen.


Wenn Sie Drupal, Joomla oder eine maßgeschneiderte Website verwenden, müssen Sie diese Regeln natürlich ändern, aber das Ziel ist immer dasselbe: Sie können alle dynamischen Seiten und den Cache an Ihr Back-End senden.

Der Standard ++: Erhöhen Sie die Server-Ausfallsicherheit

Manchmal werden Webserver langsam, weil sie stark ausgelastet sind. Auch hier kann Lack helfen. Wir können einige spezielle Anweisungen verwenden, um Varnish anzuweisen, nicht mit dem Back-End zu sprechen, wenn es nicht funktioniert oder zu langsam antwortet. In diesen Fällen verwendet Varnish die "Grace" -Richtlinie.


Grace im Rahmen von Varnish bedeutet die Lieferung von anderweitig abgelaufenen Gegenständen, wenn die Umstände dies erfordern. Dies kann passieren, weil:

  • Der ausgewählte Back-End-Director ist inaktiv
  • Ein anderer Thread hat bereits eine Anforderung an das Back-End gestellt, die noch nicht abgeschlossen ist.
Beide Fälle werden in VCL gleich behandelt:

sub vcl_recv {

if (req.backend.healthy) {

set req.grace = 30s;

} else {

set req.grace = 1h;

}

}


sub vcl_fetch {

set beresp.grace = 1h;

}

Diese Konfiguration weist Varnish an, das Back-End zu testen und die Nachfrist zu verlängern, wenn Probleme auftreten. Das obige Beispiel führt auch die Direktive "req.backend.healthy" ein, mit der ein Backend überprüft wird. Dies ist sehr nützlich, wenn Sie mehrere Backends haben. Schauen wir uns also ein erweitertes Beispiel an.

Erweiterte Verwendung: Erstellen Sie einen ausfallsicheren Webserver in einer verteilten Umgebung

Dies ist unsere endgültige Konfigurationsdatei mit allen Optionen, die wir bisher gesehen haben, und der Definition von zwei Backends mit einer speziellen Anweisung für die Sonde. Auf diese Weise ermittelt Varnish, ob ein Webserver aktiv ist oder nicht.


.url

Lack wird Anfragen an das Backend mit dieser URL stellen.


.Auszeit

Legt fest, wie schnell die Sonde fertig sein muss. Sie müssen eine Zeiteinheit mit einer Zahl wie "0.1 s", "1230 ms" oder sogar "1 h" angeben.


.Intervall

Wie lange muss ich zwischen den Umfragen warten? Sie müssen auch hier eine Zeiteinheit angeben. Beachten Sie, dass dies keine "Rate", sondern ein "Intervall" ist. Die niedrigste Abfragerate ist (.timeout + .interval).


.Fenster

Wie viele der neuesten Umfragen sind zu berücksichtigen, wenn festgestellt wird, ob das Back-End fehlerfrei ist?


.Schwelle

Wie viele der letzten .window-Umfragen müssen gut sein, damit das Back-End als fehlerfrei deklariert wird.


Jetzt können wir die Direktive "req.backend.healthy" verwenden und ein boolesches Ergebnis erhalten, das uns sagt, ob das Backend (die Backends) aktiv sind oder nicht.

#

# Customized VCL file for serving up a Wordpress site with multiple back-ends.

#


# Define the internal network subnet.

# These are used below to allow internal access to certain files while not

# allowing access from the public internet .

acl internal {

"10.100.0.0"/24;

}


# Define the list of our backends (web servers), they Listen on port 8080


backend web1 { .host = "10.100.0.1"; .port = "8080"; .probe = { .url = "/status.php"; .interval = 5s; .timeout = 1s; .window = 5;.threshold = 3; }}

backend web2 { .host = "10.100.0.2"; .port = "8080"; .probe = { .url = "/status.php"; .interval = 5s; .timeout = 1s; .window = 5;.threshold = 3; }}


# Define the director that determines how to distribute incoming requests.

director default_director round-robin {

{ .backend = web1; }

{ .backend = web2; }

}


# Respond to incoming requests.

sub vcl_recv {


set req.backend = default_director;

# Use anonymous, cached pages if all backends are down.

if (!req.backend.healthy) {

unset req.http.Cookie;

set req.grace = 6h;

} else {

set req.grace = 30s;

}

# Unset all cookies if not Wordpress admin - otherwise login will fail


if (!(req.url ~ "wp-(login| admin )")) {

unset req.http.cookie;

return(lookup);

}


# If you request the special pages go directly to them


if (req.url ~ "wp-(login| admin )") {

return (pipe);

}


# Always cache the following file types for all users.

if (req.url ~ "(?i)\.(png|gif|jpeg|jpg|ico|swf|css|js|html|htm)(\?+)?$") {

unset req.http.Cookie;

}


}


# Code determining what to do when serving items from the web servers.

sub vcl_fetch {

# Don't allow static files to set cookies.

if (req.url ~ "(?i)\.(png|gif|jpeg|jpg|ico|swf|css|js|html|htm)(\?+)?$") {

# beresp == Back-end response from the web server.

unset beresp.http.set-cookie;

}


# Allow items to be stale if needed.

set beresp.grace = 6h;

}

Ein leistungsfähiges Werkzeug

Dies sind nur einige Beispiele, die Ihnen den Einstieg in die Verwendung von Lack erleichtern können. Dieses Tool ist sehr leistungsfähig und kann Ihnen dabei helfen, die Leistung zu steigern, ohne zusätzliche Hardware oder virtuelle Maschinen zu kaufen. Für viele Website-Administratoren ist das ein echter Vorteil.

Lack: Bereiten Sie sich auf einen Schnitt vor!