Obsah:
- Úvod do laku
- Základy: Obrázky vyrovnávacej pamäte
- Štandard: Obrázky a stránky z vyrovnávacej pamäte
- Štandard ++: Zvyšuje odolnosť servera
- Pokročilé použitie: Vytvorte pružný webový server v distribuovanom prostredí
- Výkonný nástroj
Pokiaľ ide o výkonnosť webových stránok, Varnish je horúca technológia. Vďaka jednoduchej inštalácii a konfigurácii je možné zvýšiť výkon ľubovoľnej webovej stránky a obsluhovať až milión stránok iba s malým virtuálnym súkromným serverom., Ukážem vám štyri možné konfigurácie, ktoré vám pomôžu zlepšiť čas odozvy vašich stránok, či už slúžite stovkám, tisícom alebo miliónom stránok.
Úvod do laku
Varnish-Cache je webový urýchľovač s cieľom ukladania obsahu webových stránok do vyrovnávacej pamäte. Ide o projekt s otvoreným zdrojom, ktorého cieľom je optimalizovať a zrýchliť prístup k webovým stránkam neinvazívne - bez zmeny kódu - a umožniť vám vložiť ruky na svoje webové stránky.
Boli to tvorcovia spoločnosti Varnish Cache, ktorí ju nazvali webovým urýchľovačom, pretože jej primárnym cieľom je zlepšovať a zrýchľovať frontend webových stránok. Spoločnosť Varnish to dosahuje uložením kópií stránok, ktoré webový server poskytuje, do svojej vyrovnávacej pamäte. Pri ďalšom požadovaní tej istej stránky bude služba Lakovať túto kópiu namiesto toho, aby ju požadovala od webového servera, čo bude mať za následok obrovské zvýšenie výkonu.
Ďalšou z kľúčových funkcií spoločnosti Varnish Cache je okrem jej výkonnosti flexibilita jej konfiguračného jazyka VCL. VCL umožňuje písať politiky týkajúce sa spôsobu vybavovania prichádzajúcich požiadaviek. V takejto politike sa môžete rozhodnúť, aký obsah chcete zobrazovať, odkiaľ chcete získať obsah a ako by sa mala žiadosť alebo odpoveď zmeniť.
V nasledujúcich príkladoch konfigurácie vám ukážem, ktoré pravidlá VCL sa majú použiť na dosiahnutie niektorých cieľov, od jednoduchého ukladania obrázkov a statických objektov do vyrovnávacej pamäte, po použitie laku v distribuovanom prostredí alebo nechať ho pôsobiť ako vyrovnávač záťaže.
Všetky nasledujúce príklady sú pre Varnish 3.x. Vezmite prosím na vedomie, že Varnish 2.x používa rôzne syntaxe a pravidlá, takže tieto príklady nie sú kompatibilné s touto verziou.
Toto sú hlavné stavy programu Varnish, ktoré použijeme v konfiguračnom súbore VCL:
recv
Toto je prvá funkcia, ktorá sa volá pri prijatí požiadavky. Tu môžeme s požiadavkou manipulovať skôr, ako skontrolujeme, či je v cache. Ak sa požiadavka nedá vložiť do vyrovnávacej pamäte, v tejto fáze je možné zvoliť aj server typu back-end, na ktorý sa žiadosť pošle.
míňať
Túto funkciu môžeme použiť, keď chceme preniesť požiadavku na webový server a uložiť odpoveď do vyrovnávacej pamäte.
rúra
Táto funkcia obchádza Varnish a pošle požiadavku na webový server.
vyhľadať
Varnish s vyhľadaním požiada o overenie, či je odpoveď prítomná a platná v pamäti cache.
vyzdvihnúť
Táto funkcia sa volá po tom, ako sa obnovenie obsahu zo zadnej strany vyvolalo prihrávkou alebo zmeškaním.
Základy: Obrázky vyrovnávacej pamäte
Pozrime sa na príklad konfigurácie. V tomto prvom príklade jednoducho uložíme obrázky a statické súbory, ako napríklad súbory CSS, do vyrovnávacej pamäte. Táto konfigurácia je skutočne užitočná, keď nepoznáte web, ktorý chcete vylepšiť, takže sa môžete jednoducho rozhodnúť, že všetky obrázky, CSS a JavaScript sú rovnaké pre všetkých používateľov. Aby sme rozlíšili používateľov, protokol HTTP používa súbory cookie, preto ich musíme pri tomto type žiadosti vylúčiť, aby boli pre aplikáciu Varnish rovnaké.
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;
}
A to je všetko. Pomocou tohto súboru VCL môžete ľahko ukladať statický obsah do vyrovnávacej pamäte.
Štandard: Obrázky a stránky z vyrovnávacej pamäte
Obvykle nechcete iba ukladať do vyrovnávacej pamäte statický obsah svojej webovej stránky, ale tiež ukladať do vyrovnávacej pamäte niektoré dynamické stránky, ktoré generuje váš webový server, ale ktoré sú rovnaké pre všetkých používateľov - alebo aspoň pre všetky vaše anonymné užívateľov. V tejto fáze musíte vedieť, ktoré stránky môžu byť uložené v pamäti cache a ktoré nie.
Dobrým príkladom je Wordpress, jeden z najbežnejšie používaných systémov na správu obsahu. Wordpress dynamicky generuje webové stránky s PHP a dotazy na databázu MySQL. Je to pekné, pretože svoju webovú stránku môžete ľahko aktualizovať z administračného rozhrania pomocou niekoľkých kliknutí, ale je to tiež drahé z hľadiska použitých zdrojov. Prečo spúšťať rovnaký skript PHP a dotaz MySQL zakaždým, keď používateľ pristane na domovskej stránke? Pomocou programu Varnish môžeme ukladať najnavštevovanejšie stránky do vyrovnávacej pamäte a dosiahnuť neuveriteľné výsledky.
Toto sú niektoré pravidlá, ktoré môžu byť užitočné pri inštalácii Wordpressu:
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;
}
}
Môžete vidieť, že v tomto príklade ukladáme do vyrovnávacej pamäte všetky stránky z našich webových stránok, ale pre tie, ktoré majú v adrese URL reťazec „wp-admin“ alebo „wp-login“, sú reťazce „špeciálnymi“ miestami používanými na prihlásenie do Wordpress ako správca. Preto chceme hovoriť priamo s webovým serverom a obísť vyrovnávaciu pamäť Varnish.
Prirodzene, ak používate Drupal, Joomla alebo webovú stránku na mieru, musíte tieto pravidlá zmeniť, ale cieľ je vždy rovnaký: Ak chcete poslať všetky dynamické stránky a vyrovnávaciu pamäť, môžete ich zadať.
Štandard ++: Zvyšuje odolnosť servera
Niekedy sa webové servery spomaľujú, pretože majú vysoké zaťaženie. Lak môže s tým tiež pomôcť. Môžeme použiť niekoľko špeciálnych smerníc, aby sme povedali Varnishovi, aby sme sa vyhli rozhovoru so zadnou stranou, ak je dole alebo odpovedá príliš pomaly. V týchto prípadoch spoločnosť Varnish používa smernicu „milosť“.
Milosť v rozsahu laku znamená dodávať inak skončené predmety, ak si to okolnosti vyžadujú. To sa môže stať, pretože:
- Vybraný režisér back-end je dole
- Iné vlákno už požiadalo zadnú časť, ktorá ešte nie je dokončená.
sub vcl_recv {
if (req.backend.healthy) {
set req.grace = 30s;
} else {
set req.grace = 1h;
}
}
sub vcl_fetch {
set beresp.grace = 1h;
}
Táto konfigurácia povie spoločnosti Varnish, aby otestovala zadnú časť a predĺžila dobu odkladu, ak má nejaké problémy. Vyššie uvedený príklad predstavuje aj smernicu „req.backend.healthy“, ktorá sa používa na kontrolu zadného konca. Toto je skutočne užitočné, keď máte viac zadných koncov, takže sa pozrime na pokročilejší príklad.
Pokročilé použitie: Vytvorte pružný webový server v distribuovanom prostredí
Toto je náš konečný konfiguračný súbor so všetkými možnosťami, ktoré sme doteraz videli, a definícia dvoch koncových koncov s nejakou špeciálnou smernicou pre sondu. Týmto spôsobom spoločnosť Varnish určuje, či je webový server nažive alebo nie.
.URL
Spoločnosť Lak bude s touto adresou URL zadávať požiadavky na zadnú časť.
.čas vypršal
Určuje, ako rýchlo musí sonda skončiť. Musíte zadať časovú jednotku s číslom, napríklad „0, 1 s“, „1230 ms“ alebo dokonca „1 h“.
.interval
Ako dlho čakať medzi prieskumami verejnej mienky. Tu musíte zadať aj časovú jednotku. Všimnite si, že nejde o „sadzbu“, ale o „interval“. Najnižšia miera hlasovania je (.timeout + .interval).
.window
Koľko z posledných prieskumov verejnej mienky treba vziať do úvahy pri určovaní, či je zdravé prostredie.
.prah
Koľko z posledných volebných okien musí byť dobré, aby sa zadná časť mohla považovať za zdravú.
Teraz môžeme použiť smernicu „req.backend.healthy“ a získať booleovský výsledok, ktorý nám hovorí, či sú zadné časti živé alebo nie.
#
# 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;
}
Výkonný nástroj
Toto je len niekoľko príkladov, ktoré vám môžu pomôcť začať používať program Varnish. Tento nástroj je skutočne výkonný a môže vám pomôcť dosiahnuť veľké zvýšenie výkonu bez zakúpenia ďalšieho hardvéru alebo virtuálnych počítačov. Pre mnohých správcov webových stránok je to skutočná výhoda.