Itthon Szoftver Lakkozás: készüljön fel a slashdot-ra!

Lakkozás: készüljön fel a slashdot-ra!

Tartalomjegyzék:

Anonim

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.
A VCL-ben mindkét esetet azonos módon kezelik:

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.

Lakkozás: készüljön fel a slashdot-ra!