Bahay Software Varnish: maghanda na maging slashdotted!

Varnish: maghanda na maging slashdotted!

Talaan ng mga Nilalaman:

Anonim

Pagdating sa pagganap ng website, ang Varnish ay isang mainit na teknolohiya. Sa isang simpleng pag-install at pagsasaayos, posible na mapalakas ang pagganap ng anumang website at maglingkod hanggang sa isang milyong pahina na may maliit na virtual pribadong server., Ipapakita ko sa iyo ang apat na posibleng mga pagsasaayos na makakatulong sa iyo na mapagbuti ang oras ng pagtugon sa iyong site, kung naglilingkod ka daan-daang, libo o milyon-milyong mga pahina.

Isang Panimula sa Varnish

Ang Varnish-Cache ay isang web accelerator na may layunin ng nilalaman ng caching ng website. Ito ay isang bukas na mapagkukunan na proyekto na naglalayong i-optimize at mapabilis ang pag-access sa mga website na hindi nagsasalakay - nang hindi binabago ang code - at pinapayagan kang ilagay ang iyong mga kamay sa iyong website.


Ito ang mga tagalikha ng Varnish Cache na tinawag itong isang web accelerator, dahil ang pangunahing layunin nito ay upang mapabuti at mapabilis ang harap ng isang website. Nakamit ito ng Varnish sa pamamagitan ng pag-iimbak ng mga kopya ng mga pahina na isinilbi ng Web server sa cache nito. Sa susunod na hiniling ang parehong pahina, ang Varnish ay magsisilbi sa kopya sa halip na humiling ng pahina mula sa Web server, na nagreresulta sa isang napakalakas na pagpapalakas ng pagganap.


Ang isa pang pangunahing tampok ng Varnish Cache, bilang karagdagan sa pagganap nito, ay ang kakayahang umangkop ng wika ng pagsasaayos nito, VCL. Ginagawang posible ng VCL na magsulat ng mga patakaran sa kung paano dapat mahawakan ang mga papasok na kahilingan. Sa ganitong patakaran, maaari kang magpasya kung anong nilalaman ang nais mong maglingkod, mula sa kung saan nais mong makuha ang nilalaman at kung paano mabago ang kahilingan o tugon.


Sa mga sumusunod na halimbawa ng pagsasaayos, ipapakita ko sa iyo kung aling mga tuntunin ng VCL na gagamitin upang makamit ang ilang mga layunin, mula sa isang simpleng pag-cache ng mga imahe at static na mga bagay, sa paggamit ng Varnish sa isang ipinamamahagi na kapaligiran o ang pagkakaroon nito ay kumilos bilang isang load balancer.


Ang lahat ng mga sumusunod na halimbawa ay para sa Varnish 3.x. Mangyaring tandaan na ang Varnish 2.x ay gumagamit ng iba't ibang syntax at mga panuntunan, kaya ang mga halimbawang ito ay hindi katugma sa bersyon na iyon.


Ang mga sumusunod ay ang pangunahing estado ng Varnish, na gagamitin namin sa file ng pagsasaayos ng VCL:


recv

Ito ang unang pagpapaandar na tinawag kapag tumatanggap ng isang kahilingan. Dito maaari naming manipulahin ang kahilingan bago magpunta upang suriin kung naroroon ito sa cache. Kung ang isang kahilingan ay hindi maaaring ilagay sa isang cache, ang back-end server na kung saan ang kahilingan ay ipadala ay maaari ring mapili sa yugtong ito.


pumasa

Maaari naming gamitin ang function na ito kapag nais naming ipasa ang kahilingan sa Web server at cache ang sagot.


pipe

Ang function na ito ay tumatakbo sa Varnish at ipinapadala ang kahilingan sa Web server.


lookup

Sa isang lookup, hiniling ng Varnish na i-verify kung naroroon at wasto ang tugon sa cache.


sunduin

Ang pagpapaandar na ito ay tinatawag na matapos ang pagbawi ng nilalaman mula sa likod na dulo ay hinihimok ng isang pass o isang miss.

Ang Mga Pangunahing Kaalaman: Mga Larawan ng Cache

Kaya tingnan natin ang isang halimbawa ng pagsasaayos. Sa unang halimbawa na ito, mai-cache lamang namin ang mga imahe at ang mga static na file tulad ng mga file ng CSS. Ang pagsasaayos na ito ay talagang kapaki-pakinabang kapag hindi mo alam ang website na nais mong mapalakas, kaya maaari mo lamang magpasya na ang lahat ng mga imahe, CSS at JavaScript ay pareho para sa lahat ng mga gumagamit. Upang makilala ang mga gumagamit, ang protocol ng HTTP ay gumagamit ng mga cookies, kaya kailangan nating alisin ang mga ito sa ganitong uri ng kahilingan upang pareho silang pareho para sa Varnish:

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;

}

At ito na. Gamit ang VCL file na ito maaari mong madaling cache static na nilalaman.

Ang Pamantayang: Mga Larawan at Mga Pahina ng Cache

Karaniwan, hindi mo lamang nais na cache ang mga static na nilalaman ng iyong website ngunit nais mo ring i-cache ang ilang mga dinamikong pahina na nalilikha ng iyong Web server, ngunit pareho ito para sa lahat ng mga gumagamit - o hindi bababa sa lahat ng iyong hindi nagpapakilalang mga gumagamit. Sa yugtong ito, dapat mong malaman na piliin kung aling mga pahina ang maaaring mai-cache at kung saan hindi magagawa.


Ang isang mabuting halimbawa ay ang Wordpress, isa sa mga karaniwang ginagamit na sistema ng pamamahala ng nilalaman. Ang Wordpress ay bumubuo ng mga pahina ng website nang dinamikong may PHP at mga query sa isang database ng MySQL. Maganda ito dahil madali mong mai-update ang iyong website mula sa interface ng administrasyon na may kaunting pag-click, ngunit mahal din ito sa mga tuntunin ng mga mapagkukunan na ginamit. Bakit patakbuhin ang parehong script ng PHP at MySQL query sa tuwing ang isang gumagamit ay nasa homepage? Maaari naming gamitin ang Varnish upang cache ang pinaka binisita na mga pahina at makamit ang hindi kapani-paniwala na mga resulta.


Ito ang ilang mga patakaran na maaaring maging kapaki-pakinabang sa isang pag-install ng 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;

}

}

Maaari mong makita na sa halimbawang ito, tinatalakay namin ang lahat ng mga pahina mula sa aming website, ngunit para sa mga mayroong "wp- admin" o "wp-login" sa url ang mga string ay mga "espesyal" na mga lokasyon na ginamit upang mag-log in Wordpress bilang isang tagapangasiwa. Tulad nito, nais naming makipag-usap nang direkta sa Web server at i-bypass ang Varnish cache.


Naturally, kung gumagamit ka ng Drupal, Joomla o isang pasadyang website na ginawa, kailangan mong baguhin ang mga patakarang ito, ngunit ang layunin ay palaging pareho: Upang maipadala ang lahat ng mga dinamikong pahina at cache na maaari mong sa iyong likuran.

Ang Pamantayang ++: Dagdagan ang Pagkamamalayan ng Server

Paminsan-minsan ay mabagal ang mga server ng Web dahil mayroon silang isang mataas na pagkarga. Makakatulong din ang Varnish sa ito. Maaari kaming gumamit ng ilang mga espesyal na direktiba upang sabihin kay Varnish na maiwasan ang pakikipag-usap sa back end kung bababa ito o masyadong mabagal ang pagsagot. Para sa mga kasong ito, ginagamit ni Varnish ang direktiba ng "biyaya".


Ang biyaya sa saklaw ng Varnish ay nangangahulugang naghahatid ng kung hindi man nag-expire na mga bagay kapag tinawag ito ng mga pangyayari. Maaaring mangyari ito sapagkat:

  • Ang direktor ng back-end na napili ay pababa
  • Ang isang iba't ibang mga thread ay gumawa ng isang kahilingan sa back end na hindi pa tapos.
Ang parehong mga kaso ay hawakan ng parehong sa VCL:

sub vcl_recv {

if (req.backend.healthy) {

set req.grace = 30s;

} else {

set req.grace = 1h;

}

}


sub vcl_fetch {

set beresp.grace = 1h;

}

Ang pagsasaayos na ito ay nagsasabi kay Varnish na subukan ang back end at itaas ang panahon ng biyaya kung mayroon itong ilang mga problema. Ang halimbawa sa itaas ay nagpapakilala rin sa direktang "req.backend.healthy", na ginagamit upang suriin ang isang pagtatapos sa likod. Ito ay talagang kapaki-pakinabang kapag mayroon kang maraming mga dulo ng likod, kaya tingnan natin ang isang mas advanced na halimbawa.

Advanced na Gumamit: Lumikha ng isang nababanat na Web Server sa isang Pamamahagi na Kapaligiran

Ito ang aming panghuling file ng pagsasaayos sa lahat ng mga pagpipilian na nakita namin hanggang ngayon at ang kahulugan ng dalawang likod ay nagtatapos sa ilang espesyal na direktiba para sa pagsisiyasat. Ito ay kung paano tinutukoy ni Varnish kung buhay o hindi ang isang Web server.


.url

Ang Varnish ay gagawa ng mga kahilingan sa back end gamit ang URL na ito.


.timeout

Natutukoy kung gaano kabilis ang dapat matapos ang pagsisiyasat. Dapat mong tukuyin ang isang yunit ng oras na may isang numero, tulad ng "0.1 s", "1230 ms" o kahit na "1 h".


.interval

Gaano katagal maghintay sa pagitan ng mga botohan. Dapat mong tukuyin din ang isang yunit ng oras dito. Pansinin na hindi ito isang "rate" ngunit isang "agwat". Ang pinakamababang rate ng poll ay (.timeout + .interval).


.window

Ilan sa pinakabagong mga botohan ang dapat isaalang-alang kung alamin kung malusog ang back end.


.tataguyod

Ilan sa .window last polls ay dapat na mabuti para sa back end na ipinahayag na malusog.


Ngayon ay maaari naming gamitin ang direktang "req.backend.healthy" at makakuha ng isang resulta ng Boolean na nagsasabi sa amin kung ang mga likod na (mga) ay buhay o hindi.

#

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

}

Isang Napakahusay na tool

Ito ay ilan lamang sa mga halimbawa na makakatulong sa pagsisimula sa paggamit ng Varnish. Ang tool na ito ay talagang malakas at makakatulong sa iyo na makamit ang isang mahusay na pagpapalakas ng pagganap nang hindi bumili ng mas maraming hardware o virtual machine. Para sa maraming mga website administrator, iyon ay isang tunay na pakinabang.

Varnish: maghanda na maging slashdotted!