Acasă Software-ul Lacul: pregătește-te pentru a fi redus!

Lacul: pregătește-te pentru a fi redus!

Cuprins:

Anonim

Când vine vorba de performanța site-ului web, Varnish este o tehnologie fierbinte. Cu o simplă instalare și configurare, este posibil să creșteți performanța oricărui site web și să serviți până la un milion de pagini doar cu un mic server privat virtual., Vă voi arăta patru configurații posibile care vă vor ajuta să îmbunătățiți timpul de răspuns al site-ului dvs., indiferent dacă serviți sute, mii sau milioane de pagini.

O introducere a lacului

Varnish-Cache este un accelerator Web cu scopul de a memora în cache conținutul site-ului web. Este un proiect open-source care își propune să optimizeze și să accelereze accesul la site-uri non-invaziv - fără a schimba codul - și vă permite să puneți mâna pe site-ul dvs.


Creatorii Varnish Cache au fost cei care l-au numit accelerator Web, deoarece obiectivul său principal este îmbunătățirea și accelerarea front-site-ului web. Varnish realizează acest lucru prin stocarea copiilor paginilor servite de serverul Web în memoria cache a acestuia. Data viitoare când se solicită aceeași pagină, Varnish va servi copia în loc să solicite pagina de la serverul Web, ceea ce va avea ca rezultat o îmbunătățire extraordinară a performanței.


O altă dintre caracteristicile cheie ale Varnish Cache, pe lângă performanțele sale, este flexibilitatea limbajului său de configurare, VCL. VCL face posibilă scrierea de politici privind modul în care trebuie gestionate cererile primite. Într-o astfel de politică, puteți decide ce conținut doriți să serviți, de unde doriți să obțineți conținutul și cum trebuie modificată cererea sau răspunsul.


În următoarele exemple de configurare, vă voi arăta ce reguli VCL să utilizați pentru a atinge anumite obiective, de la o simplă memorie în cache a imaginilor și obiectelor statice, la utilizarea Varnish într-un mediu distribuit sau la acționarea acestuia ca un echilibrator de sarcină.


Toate următoarele exemple sunt pentru Lăcuirea 3.x. Rețineți că Varnish 2.x folosește sintaxa și reguli diferite, astfel încât aceste exemple nu sunt compatibile cu versiunea respectivă.


Următoarele sunt stările principale ale Varnish, pe care le vom folosi în fișierul de configurare VCL:


recv

Aceasta este prima funcție care este apelată la primirea unei solicitări. Aici putem manipula cererea înainte de a merge pentru a verifica dacă este prezentă în cache. Dacă nu poate fi introdusă o cerere într-o memorie cache, serverul back-end către care va fi trimisă cererea poate fi ales și în această fază.


trece

Putem folosi această funcție atunci când dorim să transmitem cererea către serverul Web și să memoram în cache răspunsul.


țeavă

Această funcție ocolește Varnish și trimite cererea către serverul Web.


privește în sus

Cu o căutare, Varnish solicită să verifice dacă răspunsul este prezent și valid în memoria cache.


aduce

Această funcție se numește după recuperarea conținutului din partea din spate este invocată de o trecere sau o ratare.

Bazele: imagini din memoria cache

Deci, să ne uităm la un exemplu de configurare. În acest prim exemplu, vom cache doar imaginile și fișierele statice precum fișierele CSS. Această configurație este cu adevărat utilă atunci când nu cunoașteți site-ul web pe care doriți să îl impulsionați, așa că puteți decide doar că toate imaginile, CSS și JavaScript sunt aceleași pentru toți utilizatorii. Pentru a distinge utilizatorii, protocolul HTTP folosește cookie-uri, așa că trebuie să le eliminăm în acest tip de solicitare, astfel încât să fie la fel pentru 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;

}

Si asta e. Cu acest fișier VCL puteți memora în cache conținut static.

Standard: imagini din memoria cache și pagini

De obicei, nu doriți doar să memorați în cache conținutul static al site-ului dvs. web, ci doriți, de asemenea, să memorați în cache unele pagini dinamice generate de serverul dvs. Web, dar care sunt aceleași pentru toți utilizatorii - sau cel puțin pentru toți anonimii dvs. utilizatori. În această fază, trebuie să știți să alegeți ce pagini pot fi memorate în cache și care nu.


Un exemplu bun este Wordpress, unul dintre cele mai utilizate sisteme de gestionare a conținutului. Wordpress generează pagini de site dinamic cu PHP și interogări la o bază de date MySQL. Acest lucru este plăcut, deoarece puteți actualiza cu ușurință site-ul dvs. web din interfața de administrare cu câteva clicuri, dar este, de asemenea, scump din punct de vedere al resurselor utilizate. De ce să rulați același script PHP și aceeași întrebare MySQL de fiecare dată când un utilizator aterizează pe pagina de pornire? Putem folosi Varnish pentru a memora în cache cele mai vizitate pagini și pentru a obține rezultate incredibile.


Iată câteva reguli care pot fi utile într-o instalare Wordpress:

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;

}

}

Puteți vedea că în acest exemplu, memoram în cache toate paginile de pe site-ul nostru web, dar pentru cele care au „wp-admin” sau „wp-login” în url șirurile sunt locații „speciale” folosite pentru a vă conecta la Wordpress ca administrator. Ca atare, dorim să vorbim direct cu serverul Web și să ocolim cache-ul Varnish.


Desigur, dacă utilizați Drupal, Joomla sau un site web personalizat, trebuie să schimbați aceste reguli, dar obiectivul este întotdeauna același: să trimiteți toate paginile și cache-ul dinamic pe care le puteți face înapoi.

Standard ++: Măriți rezistența serverului

Cândva serverele web devin lente deoarece au o încărcare mare. Lacul poate ajuta și cu acest lucru. Putem folosi câteva directive speciale pentru a spune lui Varnish să evite să vorbească cu partea din spate dacă este în jos sau dacă răspunde prea încet. Pentru aceste cazuri Varnish folosește directiva „har”.


Harul din sfera lacului înseamnă livrarea obiectelor expirate altfel atunci când circumstanțele o cer. Acest lucru se poate întâmpla deoarece:

  • Regizorul selectat este redus
  • Un fir diferit a făcut deja o solicitare către partea din spate care nu a fost încă terminată.
Ambele cazuri sunt tratate la fel în VCL:

sub vcl_recv {

if (req.backend.healthy) {

set req.grace = 30s;

} else {

set req.grace = 1h;

}

}


sub vcl_fetch {

set beresp.grace = 1h;

}

Această configurație îi spune lui Varnish să testeze partea din spate și să ridice perioada de grație dacă are unele probleme. Exemplul de mai sus introduce, de asemenea, directiva "req.backend.healthy", care este utilizată pentru a verifica un back end. Acest lucru este cu adevărat util când aveți mai multe capete din spate, așa că să aruncăm o privire la un exemplu mai avansat.

Utilizare avansată: Creați un server web rezistent într-un mediu distribuit

Acesta este fișierul nostru final de configurare cu toate opțiunile pe care le-am văzut până acum, iar definiția a două spate se termină cu unele directive speciale pentru sondă. Acesta este modul în care Varnish determină dacă un server Web este viu sau nu.


.url

Lacul va face solicitări către această adresă URL.


.pauză

Determină cât de repede trebuie să termine sonda. Trebuie să specificați o unitate de timp cu un număr, cum ar fi „0.1 s”, „1230 ms” sau chiar „1 h”.


.interval

Cât timp să aștepți între sondaje. De asemenea, trebuie să specificați o unitate de timp. Observați că aceasta nu este o „rată”, ci un „interval”. Cea mai mică rată de sondaj este (.timeout + .interval).


.fereastră

Câte dintre ultimele sondaje de luat în considerare atunci când se stabilește dacă partea din spate este sănătoasă.


.prag

Câte dintre ultimele sondaje .window trebuie să fie bune pentru ca partea din spate să fie declarată sănătoasă.


Acum putem folosi directiva „req.backend.healthy” și obținem un rezultat boolean care ne spune dacă partea din spate este sau nu în viață.

#

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

}

Un instrument puternic

Acestea sunt doar câteva exemple care vă pot ajuta să începeți utilizarea Varnish. Acest instrument este cu adevărat puternic și vă poate ajuta să obțineți o îmbunătățire a performanței deosebite fără a cumpăra mai multe hardware sau mașini virtuale. Pentru mulți administratori de site-uri, acesta este un beneficiu real.

Lacul: pregătește-te pentru a fi redus!