Sisällysluettelo:
- Johdanto lakkaan
- Perusteet: välimuistikuvat
- Vakio: välimuistikuvat ja sivut
- Vakio ++: Lisää palvelimen joustavuutta
- Edistynyt käyttö: Luo joustava Web-palvelin hajautetussa ympäristössä
- Tehokas työkalu
Verkkosivuston suorituskyvyn suhteen lakka on kuuma tekniikka. Yksinkertaisella asennuksella ja kokoonpanolla on mahdollista parantaa minkä tahansa verkkosivuston suorituskykyä ja palvella jopa miljoona sivua vain pienellä virtuaalisella yksityisellä palvelimella., Näytän sinulle neljä mahdollista kokoonpanoa, joiden avulla voit parantaa sivustosi reaktioaikaa, palvelemme satoja, tuhansia vai miljoonia sivuja.
Johdanto lakkaan
Lakka-välimuisti on Web-kiihdytin, jonka tavoitteena on välimuisti verkkosivuston sisältö. Se on avoimen lähdekoodin projekti, jonka tavoitteena on optimoida ja nopeuttaa pääsyä verkkosivustoille ei-invasiivisesti - muuttamatta koodia - ja antaa sinun laittaa kädet verkkosivustollesi.
Varnish Cachen luojat kutsuivat sitä Web-kiihdyttimeksi, koska sen päätavoite on parantaa ja nopeuttaa verkkosivuston käyttöliittymää. Lakka saavuttaa tämän tallentamalla kopioita web-palvelimen palvelemista sivuista välimuistiin. Seuraavan kerran kun samaa sivua pyydetään, Varnish näyttää kopion sen sijaan, että pyysi sivua Web-palvelimelta, mikä johtaa valtavaan suorituskyvyn paranemiseen.
Toinen lakkavälimuistin tärkeimmistä ominaisuuksista suorituskyvyn lisäksi on sen konfigurointikielen, VCL: n, joustavuus. VCL antaa mahdollisuuden kirjoittaa käytäntöjä siitä, kuinka saapuvia pyyntöjä tulisi käsitellä. Tällaisessa käytännössä voit päättää, mitä sisältöä haluat näyttää, mistä haluat saada sisältöä ja kuinka pyyntöä tai vastausta tulisi muuttaa.
Seuraavissa esimerkkien kokoonpanossa esitän sinulle, mitä VCL-sääntöjä on käytettävä saavuttamaan joitain tavoitteita, yksinkertaisesta kuvien ja staattisten esineiden välimuistista aina Lakan käyttämiseen hajautetussa ympäristössä tai sen käyttämiseen kuorman tasapainottajana.
Kaikki seuraavat esimerkit koskevat lakkaa 3.x. Huomaa, että Varnish 2.x käyttää erilaisia syntaksia ja sääntöjä, joten nämä esimerkit eivät ole yhteensopivia kyseisen version kanssa.
Seuraavat ovat lakan päätilat, joita käytämme VCL-asetustiedostossa:
V.otet
Tämä on ensimmäinen toiminto, jota kutsutaan, kun pyyntö vastaanotetaan. Täällä voimme manipuloida pyyntöä ennen tarkistamista, onko sitä välimuistissa. Jos pyyntöä ei voida laittaa välimuistiin, tässä vaiheessa voidaan valita myös taustapalvelin, jolle pyyntö lähetetään.
kulkea
Voimme käyttää tätä toimintoa, kun haluamme välittää pyynnön Web-palvelimelle ja välimuistin vastauksen.
putki
Tämä toiminto ohittaa Varnishin ja lähettää pyynnön Web-palvelimelle.
Katso ylös
Haun avulla Lakka pyytää tarkistamaan, onko vastaus läsnä ja pätevä välimuistissa.
noutaa
Tätä toimintoa kutsutaan sen jälkeen, kun sisällön palauttaminen taustapuolelta on vedonnut läpäisyllä tai puutteellisella tavalla.
Perusteet: välimuistikuvat
Katsotaanpa esimerkkiä kokoonpanosta. Tässä ensimmäisessä esimerkissä välimuisti tallennamme vain kuvat ja staattiset tiedostot, kuten CSS-tiedostot. Tämä kokoonpano on todella hyödyllinen, kun et tiedä verkkosivustoa, jota haluat parantaa, joten voit vain päättää, että kaikki kuvat, CSS ja JavaScript ovat samat kaikille käyttäjille. Käyttäjien erottamiseksi HTTP-protokolla käyttää evästeitä, joten meidän on poistettava heidät tämän tyyppisissä pyynnöissä, jotta ne ovat kaikki samat Lakalle:
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;
}
Ja siinä se on. Tämän VCL-tiedoston avulla voit välimuistaa staattisen sisällön.
Vakio: välimuistikuvat ja sivut
Yleensä et halua vain tallentaa välimuistiin verkkosivustosi staattista sisältöä, vaan haluat myös välimuistiin joitain dynaamisia sivuja, jotka Web-palvelimesi on luonut, mutta jotka ovat samat kaikille käyttäjille - tai ainakin kaikille tuntemattomille käyttäjille. Tässä vaiheessa sinun on tiedettävä valita, mitkä sivut voidaan välimuistiin tallentaa ja mitkä eivät.
Hyvä esimerkki on Wordpress, yksi yleisimmin käytetyistä sisällönhallintajärjestelmistä. Wordpress luo verkkosivusivut dynaamisesti PHP: n avulla ja kyselyitä MySQL-tietokantaan. Tämä on hienoa, koska voit päivittää verkkosivustosi helposti käyttöliittymästä muutamalla napsautuksella, mutta se on myös kallis resurssien suhteen. Miksi suorittaa sama PHP-skripti ja MySQL-kysely joka kerta, kun käyttäjä laskeutuu kotisivulle? Voimme käyttää lakkaa välimuistiin suosituimpia sivuja ja saavuttaa uskomattomia tuloksia.
Nämä ovat joitain sääntöjä, joista voi olla hyötyä Wordpress-asennuksessa:
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;
}
}
Voit nähdä, että tässä esimerkissä välimuistiin tallennetaan kaikki verkkosivustomme sivut, mutta niille, joiden URL-osoitteessa on "wp-admin" tai "wp-login", merkkijonot ovat "erityisiä" paikkoja, joihin kirjaudutaan Wordpress järjestelmänvalvojana. Sellaisena haluamme puhua suoraan web-palvelimelle ja ohittaa Varnish-välimuistin.
Luonnollisesti, jos käytät Drupalia, Joomlaa tai räätälöityä verkkosivustoa, sinun on muutettava nämä säännöt, mutta tavoite on aina sama: Lähettää kaikki dynaamiset sivut ja välimuisti takaosaan.
Vakio ++: Lisää palvelimen joustavuutta
Joskus Web-palvelimet hidastuvat, koska niiden kuormitus on suuri. Lakka voi auttaa myös tässä. Voimme käyttää joitain erityisdirektiivejä, jotta käskymme lakkaa välttämään puhumista takaosan kanssa, jos se on alhaalla tai vastaa liian hitaasti. Näissä tapauksissa Lakka käyttää "armon" direktiiviä.
Arkki lakalla tarkoittaa sitä, että muuten vanhentuneet esineet toimitetaan, kun olosuhteet sitä vaativat. Tämä voi tapahtua, koska:
- Valittu taustapäällikkö on alhaalla
- Eri säie on jo tehnyt pyynnön takaosaan, joka ei ole vielä valmis.
sub vcl_recv {
if (req.backend.healthy) {
set req.grace = 30s;
} else {
set req.grace = 1h;
}
}
sub vcl_fetch {
set beresp.grace = 1h;
}
Tämä kokoonpano käskee Lakka testaamaan takaosan ja nostamaan lisäaikaa, jos siinä on joitain ongelmia. Yllä oleva esimerkki tuo myös käyttöön direktiivin "req.backend.healthy", jota käytetään tarkistamaan loppupää. Tämä on todella hyödyllinen, kun sinulla on useita takaosia, joten katsotaanpa edistyneempää esimerkkiä.
Edistynyt käyttö: Luo joustava Web-palvelin hajautetussa ympäristössä
Tämä on lopullinen kokoonpanotiedostomme kaikilla tähän mennessä näkemillämme vaihtoehdoilla ja kahden takaosan määritelmä päättyy erällä koettimen erityisdirektiivillä. Näin Lakka määrittää onko Web-palvelin elossa vai ei.
.url
Lakka tekee loppupyyntöjä tällä URL-osoitteella.
.Aikalisä
Määrittää, kuinka nopeasti anturin on päästävä loppuun. Sinun on määritettävä aikayksikkö numerolla, kuten "0, 1 s", "1230 ms" tai jopa "1 h".
.interval
Kuinka kauan odottaa kyselyiden välillä. Tässä on määritettävä myös aikayksikkö. Huomaa, että tämä ei ole "korko", vaan "aikaväli". Pienin äänestysprosentti on (.timeout + .interval).
.ikkuna
Kuinka monta viimeisintä kyselyä on otettava huomioon määritettäessä onko takaosa terve.
.threshold
Kuinka monen viimeisen .window-kyselyn on oltava hyviä, jotta takaosa voidaan julistaa terveeksi.
Nyt voimme käyttää direktiiviä "req.backend.healthy" ja saada Boolen tulos, joka kertoo meille, ovatko takapäät elossa vai eivät.
#
# 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;
}
Tehokas työkalu
Nämä ovat vain muutamia esimerkkejä, jotka voivat auttaa sinua pääsemään alkuun lakan käytöstä. Tämä työkalu on todella tehokas ja voi auttaa sinua saavuttamaan suuren suorituskyvyn parantamisen ostamatta lisää laitteita tai virtuaalikoneita. Monille verkkosivustojen ylläpitäjille se on todellinen etu.