Domov Software Lak: připravte se na lomítko!

Lak: připravte se na lomítko!

Obsah:

Anonim

Pokud jde o výkon webových stránek, Varnish je horká technologie. Díky jednoduché instalaci a konfiguraci je možné zvýšit výkon libovolného webu a obsluhovat až milion stránek pomocí pouze malého virtuálního soukromého serveru., Ukážu vám čtyři možné konfigurace, které vám pomohou zlepšit dobu odezvy vašeho webu, ať už obsluhujete stovky, tisíce nebo miliony stránek.

Úvod do laku

Varnish-Cache je webový akcelerátor s cílem ukládat obsah webových stránek do mezipaměti. Jedná se o projekt s otevřeným zdrojovým kódem, jehož cílem je neinvazivně optimalizovat a urychlit přístup k webovým stránkám - bez změny kódu - a umožnit vám vložit ruce na svůj web.


Byli to tvůrci společnosti Varnish Cache, kteří ji nazvali webovým akcelerátorem, protože jejím primárním cílem je zlepšit a urychlit frontend webových stránek. Varnish toho dosahuje ukládáním kopií stránek, které webový server poskytuje, do své mezipaměti. Při příštím vyžádání stejné stránky provede služba Lakování kopii namísto vyžádání stránky od webového serveru, což má za následek obrovské zvýšení výkonu.


Další z klíčových funkcí programu Varnish Cache je, kromě výkonu, flexibilita konfiguračního jazyka VCL. VCL umožňuje psát zásady o tom, jak by se měly zpracovávat příchozí požadavky. V takové zásadě se můžete rozhodnout, jaký obsah chcete zobrazovat, odkud chcete získat obsah a jak by měl být požadavek nebo odpověď změněn.


V následujících příkladech konfigurace vám ukážu, která pravidla VCL použít k dosažení některých cílů, od jednoduchého ukládání do mezipaměti obrázků a statických objektů, po použití Varnish v distribuovaném prostředí nebo nechat ho působit jako vyrovnávač zatížení.


Všechny následující příklady jsou pro Varnish 3.x. Vezměte prosím na vědomí, že Varnish 2.x používá různé syntaxe a pravidla, takže tyto příklady nejsou kompatibilní s touto verzí.


Níže jsou uvedeny hlavní stavy programu Varnish, které použijeme v konfiguračním souboru VCL:


recv

Toto je první funkce, která se volá při přijetí požadavku. Zde můžeme manipulovat s požadavkem předtím, než zkontrolujeme, zda je v mezipaměti přítomen. Pokud nelze požadavek uložit do mezipaměti, lze v této fázi vybrat také server typu back-end, na který bude žádost odeslána.


složit

Tuto funkci můžeme použít, když chceme předat požadavek na webový server a odpovědět do mezipaměti.


trubka

Tato funkce obchází Varnish a pošle požadavek na webový server.


vzhlédnout

Varnish požádá o ověření, zda je odpověď přítomná a platná v mezipaměti.


načíst

Tato funkce se nazývá poté, co je obnova obsahu ze zadního konce vyvolána průchodem nebo chybou.

Základy: Obrázky mezipaměti

Pojďme se tedy podívat na příklad konfigurace. V tomto prvním příkladu uložíme pouze obrázky a statické soubory, jako jsou soubory CSS, do mezipaměti. Tato konfigurace je opravdu užitečná, když neznáte web, který chcete vylepšit, takže se můžete jen rozhodnout, že všechny obrázky, CSS a JavaScript jsou pro všechny uživatele stejné. Aby bylo možné rozlišit uživatele, používá protokol HTTP soubory cookie, takže je musíme v tomto typu požadavku odstranit, aby byly všechny stejné pro aplikaci 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;

}

A to je vše. Pomocí tohoto souboru VCL můžete snadno ukládat statický obsah do mezipaměti.

Standard: Obrázky a stránky mezipaměti

Obvykle nechcete pouze ukládat do mezipaměti statický obsah vašeho webu, ale také chcete ukládat do mezipaměti některé dynamické stránky, které jsou generovány webovým serverem, ale které jsou stejné pro všechny uživatele - nebo alespoň pro všechny vaše anonymní uživatelé. V této fázi musíte vědět, které stránky lze ukládat do mezipaměti a které nikoli.


Dobrým příkladem je Wordpress, jeden z nejčastěji používaných systémů pro správu obsahu. Wordpress dynamicky generuje webové stránky s PHP a dotazy do databáze MySQL. To je hezké, protože můžete snadno aktualizovat svůj web z administračního rozhraní pomocí několika kliknutí, ale je to také drahé z hlediska použitých zdrojů. Proč spouštět stejný skript PHP a dotaz MySQL pokaždé, když uživatel přistane na domovské stránce? Můžeme použít Varnish k ukládání do paměti nejnavštěvovanějších stránek a dosažení neuvěřitelných výsledků.


Toto jsou některá pravidla, která mohou být užitečná při instalaci 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 vidět, že v tomto příkladu ukládáme do mezipaměti všechny stránky z našeho webu, ale pro ty, které mají v adrese URL „wp-admin“ nebo „wp-login“, jsou řetězce „speciálními“ místy používanými k přihlášení Wordpress jako správce. Proto chceme mluvit přímo s webovým serverem a obejít mezipaměť Varnish.


Samozřejmě, pokud používáte Drupal, Joomla nebo web vytvořený na zakázku, musíte tato pravidla změnit, ale cíl je vždy stejný: Chcete-li odeslat všechny dynamické stránky a mezipaměť, můžete se vrátit na zadní konec.

Standard ++: Zvyšuje odolnost serveru

Někdy se webové servery zpomalí, protože mají vysoké zatížení. Lak může s tím také pomoci. Můžeme použít několik zvláštních směrnic, abychom Varnishovi řekli, aby se vyhnuli rozhovoru se zadním koncem, pokud je dole nebo reaguje příliš pomalu. V těchto případech společnost Varnish používá směrnici „milost“.


Milost v rozsahu Varnish znamená doručovat jinak expirované předměty, pokud to okolnosti vyžadují. To se může stát, protože:

  • Vybraný ředitel back-end je dole
  • Jiné vlákno již podalo požadavek na zadní konec, který ještě není dokončen.
Oba případy jsou ve VCL zpracovány stejně:

sub vcl_recv {

if (req.backend.healthy) {

set req.grace = 30s;

} else {

set req.grace = 1h;

}

}


sub vcl_fetch {

set beresp.grace = 1h;

}

Tato konfigurace řekne společnosti Varnish, aby otestovala zadní konec a zvýšila dobu odkladu, pokud má nějaké problémy. Výše uvedený příklad také zavádí směrnici „req.backend.healthy“, která se používá ke kontrole zadního konce. To je opravdu užitečné, pokud máte více zadních konců, takže se podívejme na pokročilejší příklad.

Pokročilé použití: Vytvořte odolný webový server v distribuovaném prostředí

Toto je náš konečný konfigurační soubor se všemi možnostmi, které jsme dosud viděli, a definice dvou zadních konců s nějakou speciální směrnicí pro sondu. To je to, jak Varnish určuje, zda je webový server naživu nebo ne.


.url

Společnost Lak bude s touto adresou URL zadávat požadavky na zadní konec.


.Časový limit

Určuje, jak rychle musí sonda dokončit. Musíte zadat časovou jednotku s číslem, například „0, 1 s“, „1230 ms“ nebo dokonce „1 h“.


.časový úsek

Jak dlouho čekat mezi průzkumy veřejného mínění. Zde musíte zadat také časovou jednotku. Všimněte si, že se nejedná o „sazbu“, ale o „interval“. Nejnižší míra hlasování je (.timeout + .interval).


.okno

Kolik posledních průzkumů veřejného mínění je třeba zvážit při určování, zda je zadní část zdravá.


.práh

Kolik z posledních voleb veřejného mínění musí být dobré, aby bylo zadní místo prohlášeno za zdravé.


Nyní můžeme použít směrnici „req.backend.healthy“ a získat booleovský výsledek, který nám řekne, zda jsou zadní části naživu nebo 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;

}

Výkonný nástroj

Toto je jen několik příkladů, které vám mohou pomoci začít používat Varnish. Tento nástroj je opravdu silný a může vám pomoci dosáhnout velkého zvýšení výkonu bez nutnosti nákupu dalšího hardwaru nebo virtuálních strojů. Pro mnoho správců webových stránek je to skutečná výhoda.

Lak: připravte se na lomítko!