Turinys:
- Įvadas į laką
- Pagrindai: talpyklos atvaizdai
- Standartas: talpyklos atvaizdai ir puslapiai
- Standartinis ++: padidinkite serverio atsparumą
- Išplėstinis naudojimas: sukurkite atsparų interneto serverį paskirstytoje aplinkoje
- Galingas įrankis
Kalbant apie svetainių našumą, lakas yra karšta technologija. Paprasta įdiegti ir konfigūruoti galima padidinti bet kurios svetainės našumą ir aptarnauti iki milijono puslapių tik su mažu virtualiu privačiu serveriu., Parodysiu jums keturias galimas konfigūracijas, kurios padės pagerinti jūsų svetainės reakcijos laiką, nesvarbu, ar aptarnaujate šimtus, tūkstančius, ar milijonus puslapių.
Įvadas į laką
„Varnish-Cache“ yra žiniatinklio greitintuvas, skirtas talpyklos išsaugojimui. Tai atvirojo kodo projektas, kurio tikslas - neinvaziškai - nekeičiant kodo - optimizuoti ir pagreitinti prieigą prie svetainių ir leisti į savo rankas patekti į savo svetainę.
„Varnish Cache“ kūrėjai jį pavadino interneto greitintuvu, nes pagrindinis jo tikslas yra patobulinti ir pagreitinti svetainės priekinę dalį. Lakas tai pasiekia laikydamas savo talpykloje interneto serverio aptarnaujamų puslapių kopijas. Kitą kartą paprašius to paties puslapio, „Varnish“ įteiks kopiją, o ne paprašys puslapio iš žiniatinklio serverio, o tai padidins našumą.
Kitas svarbus „Varnish Cache“ bruožas, be jo veikimo, yra jo konfigūracijos kalbos VCL lankstumas. VCL suteikia galimybę surašyti strategijas, kaip turėtų būti tvarkomos gaunamos užklausos. Tokioje politikoje galite nuspręsti, kokį turinį norite pateikti, iš kur norite gauti turinį ir kaip turėtų būti pakeista užklausa ar atsakymas.
Tolesniuose konfigūravimo pavyzdžiuose aš jums parodysiu, kurias VCL taisykles reikia naudoti norint pasiekti kai kuriuos tikslus, pradedant paprastu vaizdų ir statinių objektų kaupimu talpykloje, baigiant lako naudojimu paskirstytoje aplinkoje arba turinčiu jį veikti kaip apkrovos balansavimo įrenginį.
Visi šie pavyzdžiai yra skirti lakui 3.x. Atkreipkite dėmesį, kad „Varnish 2.x“ naudoja skirtingą sintaksę ir taisykles, todėl šie pavyzdžiai nesuderinami su ta versija.
Tai yra pagrindinės lako būsenos, kurias naudosime VCL konfigūracijos faile:
rekv
Tai yra pirmoji funkcija, kuri iškviečiama gaunant prašymą. Čia galime manipuliuoti užklausa prieš eidami patikrinti, ar jos nėra talpykloje. Jei užklausos negalima įdėti į talpyklą, šiame etape taip pat galima pasirinkti foninį serverį, kuriam bus siunčiama užklausa.
praeiti
Šia funkcija galime naudotis norėdami perduoti užklausą žiniatinklio serveriui ir talpinti atsakymą.
vamzdis
Ši funkcija aplenkia laką ir siunčia užklausą į interneto serverį.
peržiūra
Peržiūrėjęs, Lakas prašo patikrinti, ar atsakymas yra ir tinkamas talpykloje.
atnešti
Ši funkcija iškviečiama po to, kai turinio atkūrimas iš užpakalinio galo yra išduodamas leidimu ar praleidimu.
Pagrindai: talpyklos atvaizdai
Taigi pažvelkime į konfigūracijos pavyzdį. Šiame pirmame pavyzdyje tiesiog talpinsime vaizdus ir statinius failus, tokius kaip CSS failai. Ši konfigūracija yra tikrai naudinga, kai nežinote svetainės, kurią norite padidinti, todėl galite tiesiog nuspręsti, kad visi vaizdai, CSS ir „JavaScript“ yra vienodi visiems vartotojams. Norėdami atskirti vartotojus, HTTP protokole naudojami slapukai, todėl mes turime juos pašalinti tokio tipo užklausose, kad jie būtų vienodi lakui:
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;
}
Štai ir viskas. Naudodami šį VCL failą galite lengvai išsaugoti statinį turinį.
Standartas: talpyklos atvaizdai ir puslapiai
Paprastai jūs norite ne tik talpinti statinį savo svetainės turinį, bet taip pat norite talpykloje išsaugoti keletą dinaminių puslapių, kuriuos sugeneruoja jūsų tinklo serveris, tačiau kurie yra vienodi visiems vartotojams - ar bent jau visiems jūsų anonimams. vartotojų. Šiame etape turite žinoti, kurie puslapiai gali būti talpykloje, o kurie ne.
Puikus pavyzdys yra „Wordpress“, viena iš dažniausiai naudojamų turinio valdymo sistemų. „Wordpress“ dinamiškai kuria svetainių puslapius naudodama PHP ir pateikia užklausas „MySQL“ duomenų bazei. Tai malonu, nes jūs galite lengvai atnaujinti savo svetainę iš administravimo sąsajos keliais paspaudimais, tačiau ji taip pat yra brangi naudojamų išteklių atžvilgiu. Kodėl paleisti tą patį PHP scenarijų ir „MySQL“ užklausą kiekvieną kartą, kai vartotojas nusileidžia pagrindiniame puslapyje? Laką galime naudoti, norėdami talpinti lankomiausius puslapius ir pasiekti neįtikėtinų rezultatų.
Tai yra keletas taisyklių, kurios gali būti naudingos diegiant „Wordpress“:
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;
}
}
Galite pamatyti, kad šiame pavyzdyje talpiname visus mūsų svetainės puslapius, tačiau tiems, kurių URL yra „wp-admin“ arba „wp-login“, eilutės yra „specialios“ vietos, naudojamos prisijungti prie „Wordpress“ kaip administratorius. Taigi norime kalbėtis tiesiogiai su interneto serveriu ir apeiti „Varnish“ talpyklą.
Natūralu, kad jei naudojate „Drupal“, „Joomla“ ar pagal užsakymą sukurtą svetainę, turite pakeisti šias taisykles, tačiau tikslas visada yra tas pats: Norėdami atsiųsti visus dinaminius puslapius ir talpyklą, galite į savo galinę dalį.
Standartinis ++: padidinkite serverio atsparumą
Kažkada interneto serveriai tampa lėti, nes jie turi didelę apkrovą. Tam gali padėti ir lakas. Mes galime naudoti kai kurias specialias direktyvas, kad lieptume lakui vengti kalbėjimo su galiniu galu, jei jis neveikia arba į jį atsakoma per lėtai. Šiais atvejais lakas naudoja „malonės“ direktyvą.
Malonė lako srityje reiškia daiktų, kuriems pasibaigęs galiojimo laikas, pristatymą, kai to reikalauja aplinkybės. Taip gali nutikti dėl:
- Pasirinktas foninis režisierius neveikia
- Skirtinga gija jau pateikė užklausą dėl dar nepabaigtos galinės dalies.
sub vcl_recv {
if (req.backend.healthy) {
set req.grace = 30s;
} else {
set req.grace = 1h;
}
}
sub vcl_fetch {
set beresp.grace = 1h;
}
Ši konfigūracija nurodo lakui išbandyti galinį galą ir pakelti lengvatinį laikotarpį, jei jis turi tam tikrų problemų. Aukščiau pateiktame pavyzdyje taip pat pristatoma direktyva „req.backend.healthy“, kuri naudojama norint patikrinti galinį variantą. Tai tikrai naudinga, kai turite kelis galinius variantus, todėl pažvelkime į sudėtingesnį pavyzdį.
Išplėstinis naudojimas: sukurkite atsparų interneto serverį paskirstytoje aplinkoje
Tai yra mūsų galutinis konfigūracijos failas su visomis iki šiol matytomis galimybėmis ir dviejų galinių dalių apibrėžimas baigiasi specialia zondo direktyva. Taip „Varnish“ nustato, ar žiniatinklio serveris yra gyvas, ar ne.
.url
Lakas pateiks užklausas dėl šio URL pabaigos.
.laikas baigėsi
Nustato, kaip greitai turi baigtis zondas. Turite nurodyti laiko vienetą su skaičiumi, pavyzdžiui, „0, 1 s“, „1230 ms“ ar net „1 h“.
.intervalas
Kiek laiko reikia laukti tarp apklausų. Čia taip pat turite nurodyti laiko vienetą. Atkreipkite dėmesį, kad tai nėra „norma“, o „intervalas“. Mažiausias apklausos rodiklis yra (.toutout + .intervallas).
.langas
Kiek naujausių apklausų reikia atsižvelgti nustatant, ar užpakalinė dalis yra sveika.
.slenkstis
Kiek paskutinių. Lango apklausų turi būti gera, kad galinė dalis būtų paskelbta sveika.
Dabar galime naudoti direktyvą „req.backend.healthy“ ir gauti loginį rezultatą, kuris mums nurodo, ar galinis (-ieji) galas (-ai) yra gyvi, ar 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;
}
Galingas įrankis
Tai tik keli pavyzdžiai, kurie gali padėti jums pradėti naudoti laką. Šis įrankis yra išties galingas ir gali padėti pasiekti puikų našumą, nepirkant daugiau aparatūros ar virtualių mašinų. Daugeliui svetainių administratorių tai yra tikras pranašumas.
