Hem programvara Lack: förbered dig på att bli snedstreckad!

Lack: förbered dig på att bli snedstreckad!

Innehållsförteckning:

Anonim

När det gäller webbplatsens prestanda är Varnish en het teknik. Med en enkel installation och konfiguration är det möjligt att öka prestanda på alla webbplatser och tjäna upp till en miljon sidor med bara en liten virtuell privat server., Jag visar fyra möjliga konfigurationer som hjälper dig att förbättra responstiden på din webbplats, oavsett om du tjänar hundratals, tusentals eller miljoner sidor.

En introduktion till lack

Varnish-Cache är en webbaccelerator med målet att cache-innehåll på webbplatsen. Det är ett öppen källkodsprojekt som syftar till att optimera och påskynda åtkomsten till webbplatser utan invasivitet - utan att ändra koden - och låta dig lägga dina händer på din webbplats.


Det var skaparna av Varnish Cache som kallade det en webbaccelerator, eftersom dess primära mål är att förbättra och påskynda en webbplats frontend. Varnish uppnår detta genom att lagra kopior av sidorna som serveras av webbservern i sin cache. Nästa gång samma sida begärs kommer Varnish att betjäna kopian istället för att begära sidan från webbservern, vilket resulterar i en enorm prestationsökning.


En annan av de viktigaste funktionerna i Varnish Cache, förutom dess prestanda, är flexibiliteten i dess konfigurationsspråk, VCL. VCL gör det möjligt att skriva policyer för hur inkommande förfrågningar ska hanteras. I en sådan policy kan du bestämma vilket innehåll du vill servera, varifrån du vill hämta innehållet och hur begäran eller svaret ska ändras.


I följande exempel på konfiguration visar jag dig vilka VCL-regler som ska användas för att uppnå några mål, från en enkel cachning av bilder och statiska objekt, till att använda lack i en distribuerad miljö eller att det fungerar som en lastbalansör.


Alla följande exempel är för Varnish 3.x. Observera att Varnish 2.x använder olika syntax och regler, så dessa exempel är inte kompatibla med den versionen.


Följande är de huvudsakliga tillstånden i Varnish, som vi kommer att använda i VCL-konfigurationsfilen:


recv

Detta är den första funktionen som anropas när du får en begäran. Här kan vi manipulera begäran innan vi går att kontrollera om den finns i cachen. Om en begäran inte kan läggas i en cache, kan den back-end-servern till vilken begäran skickas också väljas i den här fasen.


passera

Vi kan använda den här funktionen när vi vill skicka förfrågan till webbservern och cache svaret.


rör

Denna funktion kringgår Varnish och skickar förfrågan till webbservern.


slå upp

Med en sökning ber Varnish om att verifiera om svaret är närvarande och giltigt i cachen.


hämta

Denna funktion kallas efter att återställning av innehåll från baksidan har åberopats av ett pass eller miss.

Grunderna: cachebilder

Så låt oss titta på ett exempel på konfiguration. I det här första exemplet cachear vi bara bilderna och de statiska filerna som CSS-filer. Den här konfigurationen är verkligen användbar när du inte känner till webbplatsen som du vill öka, så du kan bara bestämma att alla bilder, CSS och JavaScript är desamma för alla användare. För att skilja användare använder HTTP-protokollet kakor, så vi måste eliminera dem i denna typ av begäran så att de är desamma för Varnish:

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;

}

Och det är allt. Med denna VCL-fil kan du enkelt cache-statisk innehåll.

Standard: Cache-bilder och sidor

Vanligtvis vill du inte bara cache det statiska innehållet på din webbplats utan du vill också cache några dynamiska sidor som genereras av din webbserver, men som är desamma för alla användare - eller åtminstone för alla dina anonyma användare. I den här fasen måste du veta att du väljer vilka sidor som kan cachelagras och vilka inte.


Ett bra exempel är Wordpress, ett av de mest använda innehållshanteringssystemen. Wordpress genererar webbplatser dynamiskt med PHP och frågor till en MySQL-databas. Det här är trevligt eftersom du enkelt kan uppdatera din webbplats från administrationsgränssnittet med få klick, men det är också dyrt när det gäller resurser som används. Varför köra samma PHP-skript och MySQL-fråga varje gång en användare landar på hemsidan? Vi kan använda Lack för att cache de mest besökta sidorna och uppnå otroliga resultat.


Det här är några regler som kan vara användbara i en Wordpress-installation:

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;

}

}

Du kan se att i det här exemplet cachar vi alla sidor från vår webbplats, men för de som har "wp-admin" eller "wp-login" i url är strängarna "special" platser som används för att logga in på Wordpress som administratör. Som sådan vill vi prata direkt med webbservern och kringgå Lack-cachen.


Naturligtvis om du använder Drupal, Joomla eller en skräddarsydd webbplats måste du ändra dessa regler, men målet är alltid detsamma: För att skicka alla dynamiska sidor och cache kan du komma tillbaka.

Standard ++: Öka serverns motståndskraft

Ibland blir webbserver långsamma eftersom de har en hög belastning. Lack kan hjälpa till med detta också. Vi kan använda några specialdirektiv för att säga att Varnish ska undvika att prata med baksidan om den är nere eller svarar för långsamt. För dessa fall använder Varnish "nåd" -direktivet.


Nåd inom ramen för ferniss innebär att leverera förfallna förfallna objekt när omständigheterna kräver det. Detta kan hända eftersom:

  • Den valda back-end-direktören är nere
  • En annan tråd har redan gjort en begäran till baksidan som ännu inte är klar.
Båda fallen hanteras på samma sätt i VCL:

sub vcl_recv {

if (req.backend.healthy) {

set req.grace = 30s;

} else {

set req.grace = 1h;

}

}


sub vcl_fetch {

set beresp.grace = 1h;

}

Denna konfiguration berättar för Varnish att testa baksidan och höja nådeperioden om den har några problem. Exemplet ovan introducerar också direktivet "req.backend.healthy", som används för att kontrollera en backend. Detta är verkligen användbart när du har flera bakändar, så låt oss ta en titt på ett mer avancerat exempel.

Avancerad användning: Skapa en fjädrande webbserver i en distribuerad miljö

Detta är vår slutliga konfigurationsfil med alla alternativ vi hittills har sett och definitionen av två bakändar med något specialdirektiv för sonden. Så här bestämmer Varnish om en webbserver lever eller inte.


.url

Lack kommer att göra förfrågningar på baksidan med denna URL.


.Paus

Bestämmer hur snabbt sonden måste slutföras. Du måste ange en tidsenhet med ett nummer, till exempel "0, 1 s", "1230 ms" eller till och med "1 h".


.intervall

Hur länge man väntar mellan omröstningarna. Du måste också ange en tidsenhet här. Lägg märke till att detta inte är en "ränta" utan ett "intervall". Den lägsta omröstningsgraden är (. Timeout +. Intervall).


.fönster

Hur många av de senaste opinionsundersökningarna att tänka på när man avgör om baksidan är hälsosam.


.tröskel

Hur många av .window senaste undersökningarna måste vara bra för att baksidan ska förklaras friska.


Nu kan vi använda direktivet "req.backend.healthy" och få ett booleskt resultat som berättar om bakändarna är levande eller inte.

#

# 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;

}

Ett kraftfullt verktyg

Det här är bara några exempel som kan hjälpa dig komma igång med att använda lack. Detta verktyg är riktigt kraftfullt och kan hjälpa dig att uppnå ett bra prestandaförstärkande utan att köpa mer hårdvara eller virtuella maskiner. För många webbplatsadministratörer är det en verklig fördel.

Lack: förbered dig på att bli snedstreckad!