Sadržaj:
- Uvod u lak
- Osnove: Predmemoriranje slika
- Standard: Predmemoriranje slika i stranica
- Standard ++: Povećajte otpornost poslužitelja
- Napredna upotreba: Kreirajte elastični web poslužitelj u distribuiranom okruženju
- Snažan alat
Kada je u pitanju izvedba web stranica, Varnish je vruća tehnologija. Jednostavnom instalacijom i konfiguracijom moguće je poboljšati performanse bilo koje web stranice i poslužiti do milijun stranica uz samo mali virtualni privatni poslužitelj., Pokazat ću vam četiri moguće konfiguracije koje će vam pomoći poboljšati vrijeme odziva vaše web stranice, bilo da poslužujete stotine, tisuće ili milijune stranica.
Uvod u lak
Varnish-Cache je web akcelerator s ciljem keširanja sadržaja web stranica. Riječ je o projektu otvorenog koda koji ima za cilj optimizirati i ubrzati pristup web stranicama neinvazivno - bez promjene koda - i omogućiti vam da stavite ruke u svoju web stranicu.
Tvorci Varnish Cache-a nazvali su ga web akceleratorom, jer je njegov glavni cilj poboljšanje i ubrzanje prednjeg dijela web stranice. Lak to postiže pohranjivanjem kopija stranica koje poslužuje web poslužitelj u svoju predmemoriju. Sljedeći put kada se traži ista stranica, Varnish će poslužiti kopiju umjesto da je zatraži na web-poslužitelju, što rezultira nevjerojatnim povećanjem performansi.
Još jedna od ključnih karakteristika Varnish cache-a, pored performansi, je fleksibilnost njegovog konfiguracijskog jezika, VCL. VCL omogućuje pisanje pravila o načinu na koji se treba postupati s dolaznim zahtjevima. U takvim pravilima možete odlučiti koji sadržaj želite prikazivati, odakle želite nabaviti sadržaj i kako treba promijeniti zahtjev ili odgovor.
U slijedećim primjerima konfiguracije pokazat ću vam koja VCL pravila koristiti za postizanje nekih ciljeva, od jednostavnog predmemoriranja slika i statičkih objekata, do upotrebe Varnish u distribuiranom okruženju ili kad djeluje kao balans opterećenja.
Svi sljedeći primjeri su za lak 3.x. Imajte na umu da Varnish 2.x koristi različite sintakse i pravila, tako da ovi primjeri nisu kompatibilni s tom verzijom.
Slijede glavna stanja laka koje ćemo koristiti u VCL konfiguracijskoj datoteci:
recv
Ovo je prva funkcija koja se poziva prilikom prijema zahtjeva. Ovdje možemo manipulirati zahtjevom prije nego što provjerimo postoji li u predmemoriji. Ako se zahtjev ne može staviti u predmemoriju, u ovoj fazi može se odabrati i pozadinski poslužitelj na koji će zahtjev biti poslan.
proći
Ovu funkciju možemo upotrijebiti kada zahtjev želimo proslijediti na web poslužitelj i spremiti odgovor u predmemoriranje.
cijev
Ova funkcija zaobilazi Varnish i zahtjev šalje na web poslužitelj.
Pogledaj
Pretragom Varnish traži da provjeri je li odgovor prisutan i valjan je u predmemoriji.
donijeti
Ova se funkcija poziva nakon što se prolaz ili propust pozva na obnavljanje sadržaja sa zadnje strane.
Osnove: Predmemoriranje slika
Pogledajmo primjer konfiguracije. U ovom ćemo prvom primjeru predmemorirati slike i statičke datoteke poput CSS datoteka. Ova je konfiguracija jako korisna kada ne znate web mjesto koje želite poboljšati, tako da možete jednostavno odlučiti da su sve slike, CSS i JavaScript iste za sve korisnike. Da bi se razlikovali korisnici, HTTP protokol koristi kolačiće, pa ih moramo eliminirati u ovoj vrsti zahtjeva tako da su svi isti za 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;
}
I to je to. Pomoću ove VCL datoteke možete lako predmemitirati statički sadržaj.
Standard: Predmemoriranje slika i stranica
Obično ne želite samo predmemitirati statički sadržaj vaše web stranice, već također želite keširati neke dinamične stranice koje generira vaš web poslužitelj, ali koje su iste za sve korisnike - ili barem za sve vaše anonimne korisnici. U ovoj fazi morate znati koje stranice se mogu spremiti u memoriju, a koje ne mogu.
Dobar primjer je Wordpress, jedan od najčešće korištenih sustava za upravljanje sadržajem. Wordpress dinamički generira stranice web stranica s PHP-om i postavlja upite u MySQL bazu podataka. To je lijepo jer web stranicu možete lako ažurirati s administracijskog sučelja s nekoliko klikova, ali skupo je i u pogledu korištenih resursa. Zašto pokrenuti istu PHP skriptu i MySQL upit svaki put kada korisnik dođe na početnu stranicu? Možemo upotrijebiti Varnish za spremanje najposjećenijih stranica i postizanje nevjerojatnih rezultata.
Ovo su neka pravila koja mogu biti korisna u Wordpress instalaciji:
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;
}
}
Možete vidjeti da u ovom primjeru predmemoriramo sve stranice s naše web stranice, ali za one koje u URL-u imaju "wp-admin" ili "wp-login" nizovi su "posebna" mjesta koja se koriste za prijavu u Wordpress kao administrator. Kao takav, želimo razgovarati izravno s web poslužiteljem i zaobići Varnish cache.
Naravno, ako upotrebljavate Drupal, Joomla ili web stranicu po mjeri, morate promijeniti ta pravila, ali cilj je uvijek isti: da pošaljete sve dinamične stranice i predmemoriju koje možete do zadnjeg dijela.
Standard ++: Povećajte otpornost poslužitelja
Ponekad web-poslužitelji postaju spori jer imaju veliko opterećenje. Lak može pomoći i ovome. Možemo upotrijebiti neke posebne smjernice kako bi rekli Varnishu da izbjegava razgovor sa stražnjim dijelom ako je u položaju prema dolje ili je previše spor. U tim slučajevima Varnish koristi direktivu "milost".
Milost u području laka znači isporučivanje predmeta s istekom roka trajanja kada okolnosti to zatraže. To se može dogoditi zbog:
- Odabrani pomoćni direktor nije na raspolaganju
- Drugačija nit već je poslala zahtjev stražnjem kraju koji još nije završen.
sub vcl_recv {
if (req.backend.healthy) {
set req.grace = 30s;
} else {
set req.grace = 1h;
}
}
sub vcl_fetch {
set beresp.grace = 1h;
}
Ova konfiguracija nalaže Varnishu da testira stražnji dio i podigne prijelazni period ako ima nekih problema. Gornji primjer također uvodi direktivu "req.backend.healthy" koja se koristi za provjeru stražnjeg dijela. Ovo je zaista korisno kada imate više stražnjih krajeva, pa pogledajmo napredniji primjer.
Napredna upotreba: Kreirajte elastični web poslužitelj u distribuiranom okruženju
Ovo je naša konačna konfiguracijska datoteka sa svim opcijama koje smo do sada vidjeli i definicija dvaju leđa završava nekom posebnom direktivom za sondu. Ovako Varnish određuje je li web poslužitelj živ ili ne.
.url
Lak će s ovim URL-om podnijeti zahtjeve za krajnji kraj.
.pauza
Određuje kako brzo mora sonda završiti. Morate odrediti vremensku jedinicu s brojem, poput "0, 1 s", "1230 ms" ili čak "1 h".
.interval
Koliko dugo čekati između anketa. Ovdje morate navesti i vremensku jedinicu. Primijetite da to nije "stopa", već "interval". Najniža stopa ankete je (.timeout + .interval).
.prozor
Koliko najnovijih anketa treba uzeti u obzir prilikom utvrđivanja je li stražnji kraj zdrav.
.prag
Koliko posljednjih anketa mora biti dobro da bi stražnji kraj bio proglašen zdravim.
Sada možemo upotrijebiti direktivu "req.backend.healthy" i dobiti boolov rezultat koji nam govori jesu li stražnji krajnici živi ili ne.
#
# 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;
}
Snažan alat
Ovo su samo neki primjeri koji vam mogu pomoći da započnete s korištenjem Varnish-a. Ovaj je alat zaista moćan i može vam pomoći u postizanju velikog poboljšanja performansi bez kupnje više hardvera ili virtualnih strojeva. Za mnoge administratore web stranica to je prava korist.