Tartalomjegyzék:
- Bevezetés a lakkba
- Alapok: gyorsítótár-képek
- A szabvány: Gyorsítótár-képek és oldalak
- A Standard ++: Növelje a szerver rugalmasságát
- Haladó használat: hozzon létre rugalmas webszervert elosztott környezetben
- Erőteljes eszköz
A weboldal teljesítményét illetően a Lakka forró technológia. Egy egyszerű telepítéssel és konfigurálással bármilyen weboldal teljesítményét javíthatja, és akár egy millió virtuális magánszerverrel akár millió oldal kiszolgálását is lehetővé teszi., Megmutatom négy lehetséges konfigurációt, amelyek segítenek javítani webhelyének válaszidejét, akár száz, ezer, akár millió oldalt szolgálnak fel.
Bevezetés a lakkba
A Varnish-Cache egy web-gyorsító, amelynek célja a weboldal tartalmának gyorsítótárazása. Ez egy nyílt forráskódú projekt, amelynek célja nem invazív módon - a kód megváltoztatása nélkül - a webhelyekhez való hozzáférés optimalizálása és felgyorsítása, és lehetővé téve, hogy kezét a webhelyére tegye.
A Varnish Cache alkotói hívták web-gyorsítónak, mert elsődleges célja a weboldal felületének fejlesztése és felgyorsítása. A Lakk ezt úgy érinti el, hogy a webszerver által kiszolgált oldalak másolatát tárolja a gyorsítótárban. Amikor ugyanazt az oldalt legközelebb kérik, a Varnish kiszolgálja a másolatot, ahelyett, hogy az oldalt a webszerveren kéri, és ez óriási teljesítménynövekedést eredményez.
A Varnish Cache másik kulcsfontosságú tulajdonsága a teljesítményén kívül a konfigurációs nyelv, a VCL rugalmassága. A VCL lehetővé teszi a beérkező kérelmek kezelésére vonatkozó irányelvek írását. Egy ilyen irányelvben eldöntheti, hogy melyik tartalmat kívánja megjeleníteni, honnan kívánja megszerezni a tartalmat, és hogyan kell megváltoztatni a kérést vagy a választ.
A következő konfigurációs példákban megmutatom, mely VCL szabályokat kell használni egyes célok eléréséhez, a képek és statikus objektumok egyszerű gyorsítótárazásától a lakkozás elosztott környezetben történő használatáig vagy annak terheléselosztóként történő használatáig.
Az alábbi példák mind a 3. lakkra vonatkoznak. Felhívjuk figyelmét, hogy a Varnish 2.x eltérő szintaxist és szabályokat használ, tehát ezek a példák nem kompatibilisek az adott verzióval.
Az alábbiakban bemutatjuk a lakk fő állapotait, amelyeket a VCL konfigurációs fájlban használunk:
recv
Ez az első funkció, amelyet kérés fogadásakor hívnak meg. Itt manipulálhatjuk a kérést, mielőtt ellenőriznénk, van-e a gyorsítótárban. Ha a kérést nem lehet gyorsítótárba helyezni, akkor ebben a szakaszban a háttér-kiszolgálót is választhatja, amelyre a kérést elküldi.
elhalad
Ezt a funkciót akkor használhatjuk, ha a kérést át akarjuk adni a webszervernek, és gyorsítótárazni a választ.
pipa
Ez a funkció megkerüli a Lakkot, és elküldi a kérést a webszervernek.
Nézz fel
Kutatással a Varnish megkérdezi, hogy a válasz jelen van-e és érvényes-e a gyorsítótárban.
lekérés
Ezt a funkciót akkor hívják meg, miután a tartalom helyreállítását a hátsó részből átadás vagy hiányzás hívja meg.
Alapok: gyorsítótár-képek
Nézzünk egy példát a konfigurációra. Ebben az első példában gyorsítótárazzuk a képeket és a statikus fájlokat, például a CSS fájlokat. Ez a konfiguráció nagyon hasznos, ha nem ismeri a weboldalt, amelyet meg szeretne növelni, így eldöntheti, hogy az összes kép, a CSS és a JavaScript minden felhasználó számára azonos. A felhasználók megkülönböztetése érdekében a HTTP protokoll sütiket használ, ezért ezeket az ilyen típusú kérésekben meg kell szüntetnünk, hogy mind a Lakk esetében azonosak legyenek:
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;
}
És ez az. Ezzel a VCL fájlkal könnyedén tárolhatja a statikus tartalmat.
A szabvány: Gyorsítótár-képek és oldalak
Általában nem csak a webhely statikus tartalmának gyorsítótárazására van szükség, hanem a dinamikus oldalak gyorsítótárazásához is, amelyeket a webszerver generált, de amelyek megegyeznek az összes felhasználó - vagy legalábbis az összes névtelen név nélkül felhasználók számára. Ebben a szakaszban tudnia kell, hogy mely oldalakat tárolhatja gyorsítótárban, és melyeket nem.
Jó példa a Wordpress, az egyik leggyakrabban használt tartalomkezelő rendszer. A Wordpress dinamikusan generálja a weblapokat a PHP segítségével, és lekérdezéseket készít a MySQL adatbázisba. Ez nagyon kedves, mivel webhelyét néhány kattintással könnyen frissítheti az adminisztrációs felületről, de a felhasznált erőforrások szempontjából is drága. Miért futtassa ugyanazt a PHP szkriptet és a MySQL lekérdezést minden alkalommal, amikor egy felhasználó a weboldalra kerül? A Lakk segítségével tárolhatjuk a leglátogatottabb oldalakat, és hihetetlen eredményeket érhetünk el.
Ez a szabályok hasznosak lehetnek a Wordpress telepítésében:
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;
}
}
Láthatjuk, hogy ebben a példában a webhelyünk összes oldalát gyorsítótárba helyezzük, de azoknak, amelyek URL-jében "wp-admin" vagy "wp-login" vannak, a karakterláncok "speciális" helyekkel vannak bejelentkezve Wordpress rendszergazdaként. Mint ilyen, közvetlenül a webszerverrel akarunk beszélni, és megkerülni a Lakk gyorsítótárát.
Természetesen, ha Drupal, Joomla vagy egyedi igényekre szabott webhelyet használ, akkor meg kell változtatnia ezeket a szabályokat, de a cél mindig ugyanaz: Az összes dinamikus oldal és gyorsítótár elküldése a hátsó oldalra.
A Standard ++: Növelje a szerver rugalmasságát
A webszerverek néha lassúvá válnak, mert nagy terhelésük van. A lakk is segíthet ebben. Néhány speciális irányelv felhasználásával megmondhatjuk a Lakknak, hogy kerülje a hátsó végével való beszélgetést, ha az lefelé van, vagy túl lassan válaszol. Ezekben az esetekben a Lakk a "kegyelem" irányelvet használja.
A lakk körében a kegyelem azt jelenti, hogy egyébként lejárt tárgyakat szállítanak, amikor a körülmények azt megkövetelik. Ez akkor fordulhat elő, mert:
- A kiválasztott háttérbeli rendező nem működik
- Egy másik szál már készített egy kérést a hátsó oldalról, amely még nem fejeződött be.
sub vcl_recv {
if (req.backend.healthy) {
set req.grace = 30s;
} else {
set req.grace = 1h;
}
}
sub vcl_fetch {
set beresp.grace = 1h;
}
Ez a konfiguráció azt mondja a Laknak, hogy tesztelje a hátlapját, és emelje a türelmi időt, ha van valamilyen problémája. A fenti példa bevezeti az "req.backend.healthy" irányelvet is, amelyet a háttér ellenőrzésére használnak. Ez nagyon hasznos, ha több hátsó vége van, tehát vessünk egy pillantást egy fejlettebb példára.
Haladó használat: hozzon létre rugalmas webszervert elosztott környezetben
Ez a mi végső konfigurációs fájlunk az összes eddig látott lehetőséggel, és a két hát meghatározása a szonda speciális irányelveivel zárul. Így határozza meg a Varnish, hogy a webszerver életben van-e vagy sem.
.url
A Lakk ezt az URL-t használja a háttér végén.
.időtúllépés
Meghatározza, hogy a szonda milyen gyorsan kell befejeződnie. Meg kell adnia egy időegységet egy számmal, például "0, 1 s", "1230 ms" vagy akár "1 óra".
.intervallum
Meddig kell várni a közvélemény-kutatások között. Itt is meg kell adnia az időegységet. Vegye figyelembe, hogy ez nem "arány", hanem "intervallum". A legalacsonyabb szavazási arány (.timeout + .intervallum).
.ablak
A legfrissebb közvélemény-kutatások közül hányat kell figyelembe venni annak meghatározásakor, hogy a hátsó rész egészséges-e.
.küszöb
Az utolsó .wikla szavazások közül hánynak kell lennie ahhoz, hogy a hátsó rész egészséges legyen.
Most felhasználhatjuk az "req.backend.healthy" irányelvet, és olyan logikai eredményt kaphatunk, amely megmondja, hogy a hátsó vég (ek) életben vannak-e vagy sem.
#
# 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;
}
Erőteljes eszköz
Ez csak néhány példa, amelyek segíthetnek a lakkozás használatának megkezdésében. Ez az eszköz nagyon hatékony és segít nagy teljesítménynövelést elérni anélkül, hogy további hardvert vagy virtuális gépet vásárolna. Sok webhely adminisztrátorának ez valódi előnye.