Mājas Programmatūra Lakas: sagatavojieties slīpēšanai!

Lakas: sagatavojieties slīpēšanai!

Satura rādītājs:

Anonim

Runājot par vietņu darbību, laka ir karsta tehnoloģija. Ar vienkāršu instalēšanu un konfigurēšanu ir iespējams uzlabot jebkuras vietnes veiktspēju un apkalpot līdz miljonam lapu tikai ar nelielu virtuālu privātu serveri., Es jums parādīšu četras iespējamās konfigurācijas, kas palīdzēs uzlabot vietnes reakcijas laiku neatkarīgi no tā, vai kalpojat simtiem, tūkstošiem vai miljoniem lapu.

Ievads lakā

Lakas kešatmiņa ir tīmekļa paātrinātājs, kura mērķis ir tīmekļa vietnes kešatmiņas saglabāšana. Tas ir atvērtā koda projekts, kura mērķis ir optimizēt un paātrināt piekļuvi vietnēm neinvazīvi - nemainot kodu - un ļaut jums ievietot rokas savā vietnē.


Tiešsaistes paātrinātāju sauca Varnish Cache veidotāji, jo tā galvenais mērķis ir uzlabot un paātrināt tīmekļa vietnes priekšdaļu. Lakas to panāk, saglabājot Web servera apkalpoto lapu kopijas savā kešatmiņā. Nākamreiz, kad tiek pieprasīta tā pati lapa, laka apkalpos eksemplāru, nevis pieprasīs lapu no Web servera, radot milzīgu veiktspējas uzlabojumu.


Vēl viena no laku kešatmiņas galvenajām iezīmēm papildus tās veiktspējai ir tās konfigurācijas valodas VCL elastība. VCL dod iespēju uzrakstīt politikas, kā rīkoties ar ienākošajiem pieprasījumiem. Šādā politikā jūs varat izlemt, kādu saturu vēlaties rādīt, no kurienes vēlaties iegūt saturu un kā jāmaina pieprasījums vai atbilde.


Šajos konfigurācijas piemēros es parādīšu, kurus VCL noteikumus jāizmanto, lai sasniegtu dažus mērķus, sākot no vienkāršas attēlu un statisku objektu kešatmiņas, līdz lakas izmantošanai izplatītā vidē vai tās darbībai kā slodzes līdzsvarotājam.


Visi šie piemēri attiecas uz 3. laku. Lūdzu, ņemiet vērā, ka 2. laka izmanto atšķirīgu sintakse un kārtulas, tāpēc šie piemēri nav saderīgi ar šo versiju.


Šie ir galvenie lakas stāvokļi, kurus mēs izmantosim VCL konfigurācijas failā:


recv

Šī ir pirmā funkcija, kas tiek izsaukta, saņemot pieprasījumu. Šeit mēs varam manipulēt ar pieprasījumu, pirms dodamies pārbaudīt, vai tas atrodas kešatmiņā. Ja pieprasījumu nevar ievietot kešatmiņā, šajā posmā var izvēlēties arī fona serveri, uz kuru tiks nosūtīts pieprasījums.


caurlaide

Mēs varam izmantot šo funkciju, kad vēlamies nodot pieprasījumu Web serverim un saglabāt kešatmiņā atbildi.


pīpe

Šī funkcija apiet Laku un nosūta pieprasījumu uz Web serveri.


uzmeklēšana

Ar uzmeklēšanu Laka lūdz pārbaudīt, vai kešatmiņā ir atbilde un vai tā ir pareiza.


atnest

Šī funkcija tiek izsaukta pēc tam, kad satura atjaunošana no aizmugures gala tiek izsaukta caurlaide vai kļūda.

Pamati: kešatmiņas attēli

Tātad, apskatīsim konfigurācijas piemēru. Šajā pirmajā piemērā mēs tikai kešatmiņā glabāsim attēlus un statiskos failus, piemēram, CSS failus. Šī konfigurācija ir patiešām noderīga, ja nezināt vietni, kuru vēlaties palielināt, tāpēc varat vienkārši izlemt, ka visi attēli, CSS un JavaScript ir vienādi visiem lietotājiem. Lai atšķirtu lietotājus, HTTP protokolā tiek izmantoti sīkfaili, tāpēc mums tie ir jālikvidē šāda veida pieprasījumos, lai tie visiem būtu vienādi lakai:

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;

}

Un tas arī viss. Izmantojot šo VCL failu, jūs varat viegli kešatmiņā saglabāt statisko saturu.

Standarts: kešatmiņas attēli un lapas

Parasti jūs ne tikai nevēlaties kešatmiņā saglabāt jūsu vietnes statisko saturu, bet arī vēlaties kešatmiņā saglabāt dažas dinamiskas lapas, kuras ģenerē jūsu tīmekļa serveris, bet kuras ir vienādas visiem lietotājiem - vai vismaz visiem jūsu anonīmiem. lietotājiem. Šajā posmā jums jāzina, kuras lapas var saglabāt kešatmiņā un kuras nevar.


Labs piemērs ir Wordpress, viena no visbiežāk izmantotajām satura pārvaldības sistēmām. Wordpress dinamiski ģenerē vietņu lapas ar PHP un vaicājumus MySQL datu bāzei. Tas ir jauki, jo jūs varat viegli atjaunināt savu vietni no administrēšanas saskarnes ar dažiem klikšķiem, taču tā ir arī dārga izmantoto resursu ziņā. Kāpēc palaist to pašu PHP skriptu un MySQL vaicājumu katru reizi, kad lietotājs piezemējas mājas lapā? Mēs varam izmantot laku, lai kešatmiņā iegūtu visvairāk apmeklētās lapas un sasniegtu neticamus rezultātus.


Šie ir daži noteikumi, kas var būt noderīgi Wordpress instalācijā:

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;

}

}

Var redzēt, ka šajā piemērā mēs saglabājam kešatmiņā visas mūsu vietnes lapas, bet tām, kurām URL ir “wp-admin” vai “wp-login”, virknes ir “īpašas” vietas, kuras izmanto, lai pieteiktos WordPress kā administrators. Kā tādu mēs vēlamies runāt tieši ar Web serveri un apiet Lakas kešatmiņu.


Protams, ja jūs izmantojat Drupal, Joomla vai vietni pēc individuāla pasūtījuma, jums ir jāmaina šie noteikumi, taču mērķis vienmēr ir vienāds: lai nosūtītu visas dinamiskās lapas un kešatmiņu uz jūsu aizmuguri.

Standarta ++: palieliniet servera elastību

Dažkārt Web serveri kļūst lēni, jo tiem ir liela slodze. Arī šajā gadījumā var palīdzēt laka. Mēs varam izmantot dažas īpašas direktīvas, lai pastāstītu Lakai, lai izvairītos no sarunas ar aizmugurējo galu, ja tā ir uz leju vai uz to atbild pārāk lēni. Šajos gadījumos laka izmanto "labvēlības" direktīvu.


Žēlastība lakas jomā nozīmē piegādāt objektus, kuriem beidzies derīguma termiņš, kad apstākļi to prasa. Tas var notikt, jo:

  • Atlasītais aizmugurējais režisors ir uz leju
  • Cits pavediens jau ir iesniedzis pieprasījumu aizmugurē, kas vēl nav pabeigts.
Abas lietas VCL tiek izskatītas vienādi:

sub vcl_recv {

if (req.backend.healthy) {

set req.grace = 30s;

} else {

set req.grace = 1h;

}

}


sub vcl_fetch {

set beresp.grace = 1h;

}

Šī konfigurācija liek Lakai pārbaudīt aizmugurējo daļu un paaugstināt labvēlības periodu, ja tai ir kādas problēmas. Iepriekš minētais piemērs arī ievieš direktīvu "req.backend.healthy", kuru izmanto, lai pārbaudītu aizmugurējo daļu. Tas ir patiešām noderīgi, ja jums ir vairāki aizmugures gali, tāpēc apskatīsim sarežģītāku piemēru.

Īpaša lietošana: Izveidojiet elastīgu tīmekļa serveri izplatītā vidē

Šis ir mūsu galīgais konfigurācijas fails ar visām līdz šim redzētajām iespējām, un divu aizmugures definīcija beidzas ar kādu īpašu zondes direktīvu. Šādi Laka nosaka, vai Web serveris ir aktīvs vai nē.


.url

Lakai būs jāiesniedz pieprasījumi aizmugurē ar šo URL.


.pārtraukums

Nosaka, cik ātri zondei jāpabeidz. Jums jānorāda laika vienība ar skaitli, piemēram, "0, 1 s", "1230 ms" vai pat "1 h".


.intervāls

Cik ilgi jāgaida starp vēlēšanām. Šeit jānorāda arī laika vienība. Ievērojiet, ka tas nav "likme", bet gan "intervāls". Zemākais aptaujas līmenis ir (.timeout + .intervāls).


.loga

Cik no pēdējām aptaujām jāņem vērā, nosakot, vai aizmugures gals ir veselīgs.


.slieksnis

Cik no pēdējiem .wiki aptaujas rezultātiem jābūt labiem, lai aizmugures daļa tiktu pasludināta par veselīgu.


Tagad mēs varam izmantot direktīvu "req.backend.healthy" un iegūt Būla rezultātu, kas mums norāda, vai aizmugures gals (-i) ir dzīvs vai nē.

#

# 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;

}

Spēcīgs rīks

Šie ir tikai daži piemēri, kas var palīdzēt jums sākt lietot laku. Šis rīks ir patiešām spēcīgs un var palīdzēt sasniegt lielisku veiktspējas uzlabojumu, nepērkot vairāk aparatūras vai virtuālo mašīnu. Daudziem vietņu administratoriem tas ir reāls ieguvums.

Lakas: sagatavojieties slīpēšanai!