Преглед садржаја:
- Увод у лак
- Основе: Предмеморирање слика
- Стандард: Предмеморирање слика и страница
- Стандард ++: Повећајте отпорност сервера
- Напредна употреба: Креирајте еластичан веб сервер у дистрибуисаној околини
- Моћан алат
Када је ријеч о перформансама веб страница, Варнисх је врућа технологија. Једноставном инсталацијом и конфигурацијом, могуће је побољшати перформансе било које веб локације и опслужити до милион страница, само уз мали мали виртуелни приватни сервер., Показаћу вам четири могуће конфигурације које ће вам помоћи да побољшате време одзива на вашој веб локацији, било да послужујете стотине, хиљаде или милионе страница.
Увод у лак
Варнисх-цацхе је веб акцелератор са циљем да кешира садржај веб локације. То је пројекат отвореног кода који има за циљ оптимизирати и убрзати приступ веб локацијама неинвазивно - без промене кода - и омогућити вам да ставите руке у своју веб локацију.
Креатори Варнисх Цацхе-а назвали су га веб акцелератором, јер је његов основни циљ побољшање и убрзање предњег дела веб локације. Лак то постиже чувањем копија страница које сервира Веб сервер у своју кеш меморију. Следећи пут када се затражи иста страница, Варнисх ће послужити копију уместо да је затражи од веб сервера, што резултира невероватним повећањем перформанси.
Још једна од кључних карактеристика Варнисх цацхе-а, поред перформанси, је и флексибилност језика његовог конфигурације, ВЦЛ. ВЦЛ омогућава писање правила о начину на који треба поступати са долазним захтевима. У таквој политици можете одлучити који садржај желите да приказујете, одакле желите да добијете садржај и како треба променити захтев или одговор.
У следећим примерима конфигурације показат ћу вам која ВЦЛ правила користити за постизање неких циљева, од једноставног кеширања слика и статичких објеката, до употребе Варнисх-а у дистрибуираном окружењу или да делује као уравнотеживач оптерећења.
Сви следећи примери су за лак 3.к. Имајте на уму да Варнисх 2.к користи различите синтаксе и правила, тако да ови примери нису компатибилни са том верзијом.
Следе главна стања лака која ћемо користити у конфигурацијској датотеци ВЦЛ:
рецв
Ово је прва функција која се позива приликом пријема захтева. Овде можемо да манипулишемо захтевом пре него што проверимо да ли постоји у кешу. Ако се захтев не може ставити у кеш меморију, у овој фази може се изабрати и позадински послужитељ на који ће захтјев бити послан.
пролаз
Ову функцију можемо да користимо када захтев желимо да проследимо на Веб сервер и одговоримо у кеширање.
цев
Ова функција заобилази Варнисх и шаље захтев веб серверу.
потражити
Претрагом Варнисх тражи да провери да ли је одговор присутан и валидан у кешу.
дохватити
Ова се функција позива након што се пропуст или пропуст позва на обнављање садржаја са задњег краја.
Основе: Предмеморирање слика
Погледајмо пример конфигурације. У овом првом примеру ћемо само кеширати слике и статичке датотеке попут ЦСС датотека. Ова конфигурација је заиста корисна када не знате веб локацију коју желите да побољшате, тако да можете једноставно да одлучите да су све слике, ЦСС и ЈаваСцрипт исте за све кориснике. Да бисмо разликовали кориснике, ХТТП протокол користи колачиће, тако да их морамо елиминисати у овој врсти захтева тако да су сви исти за Варнисх:
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;
}
И то је то. Помоћу ове ВЦЛ датотеке лако можете кеширати статички садржај.
Стандард: Предмеморирање слика и страница
Обично не желите само да кеширате статички садржај веб локације, већ такође желите да кеширате неке динамичне странице које генерише ваш веб сервер, али које су исте за све кориснике - или бар за све ваше анонимне корисника. У овој фази морате знати које странице се могу кеширати, а које не могу.
Добар пример је Вордпресс, један од најчешће коришћених система за управљање садржајем. Вордпресс генерира странице веб страница динамички са ПХП-ом и поставља упите у МиСКЛ базу података. Ово је лепо јер можете лако ажурирати веб локацију са административног сучеља са неколико кликова, али је и скупо у погледу коришћених ресурса. Зашто покренути исту ПХП скрипту и МиСКЛ упит сваки пут када корисник дође на почетну страницу? Лак можемо да користимо за кеширање најпосећенијих страница и постигнемо невероватне резултате.
Ово су нека правила која могу бити корисна у Вордпресс инсталацији:
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;
}
}
Можете видети да у овом примеру кеширамо све странице са наше веб локације, али за оне које у УРЛ-у имају „вп-админ“ или „вп-логин“, жице су „посебне“ локације које се користе за пријављивање у Вордпресс као администратор. Као такав, желимо директно разговарати са веб сервером и заобићи Варнисх кеш.
Наравно, ако користите Друпал, Јоомла или веб локацију израђену по мери, морате да промените ова правила, али циљ је увек исти: да пошаљете све динамичке странице и кеш меморију на свој задњи део.
Стандард ++: Повећајте отпорност сервера
Понекад Веб сервери постају спори јер имају велико оптерећење. Лак вам такође може помоћи у томе. Можемо употријебити неке посебне директиве да кажемо Варнисх-у да избјегава разговор са задњим дијелом ако је на доље или ако одговори превише споро. У тим случајевима Варнисх користи директиву "граце".
Милост у подручју лака значи испорука предмета којима је иначе истекао рок трајања када околности то затраже. То се може догодити због:
- Изабрани позадински директор је искључен
- Другачија нит већ је послала захтев за задњи крај који још није завршен.
sub vcl_recv {
if (req.backend.healthy) {
set req.grace = 30s;
} else {
set req.grace = 1h;
}
}
sub vcl_fetch {
set beresp.grace = 1h;
}
Ова конфигурација налаже Варнисху да тестира задњи део и подигне грејс период ако има неких проблема. Горњи пример такође уводи директиву "рек.бацкенд.хеалтхи", која се користи за проверу задњег дела. Ово је заиста корисно када имате више стражњих крајева, па погледајмо напреднији пример.
Напредна употреба: Креирајте еластичан веб сервер у дистрибуисаној околини
Ово је наша коначна конфигурациона датотека са свим опцијама које смо до сада видели и дефиниција два задња дела завршава се неком посебном директивом за сонду. На овај начин Варнисх одређује да ли је веб сервер жив или не.
.урл
Лак ће са овом УРЛ адресом слати захтеве на задњој страни.
.пауза у утакмици
Одређује колико брзо мора сонда завршити. Морате навести временску јединицу са бројем, попут "0, 1 с", "1230 мс" или чак "1 х".
.интервал
Колико дуго чекати између анкета. Овде морате навести и временску јединицу. Примјетите да ово није "стопа", већ "интервал". Најнижа стопа анкете је (.тимеоут + .интервал).
.виндов
Колико најновијих анкета треба узети у обзир приликом одређивања да ли је задњи крај здрав.
.тхресхолд
Колико последњих анкета на прозору мора бити добро да би се задњи крај прогласио здравим.
Сада можемо да користимо директиву "рек.бацкенд.хеалтхи" и добијемо буолов резултат који нам говори да ли су задњи крај (и) живи или не.
#
# 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;
}
Моћан алат
Ово су само неки примери који вам могу помоћи да започнете са коришћењем Варнисх-а. Овај алат је заиста моћан и може вам помоћи да побољшате перформансе без куповине више хардвера или виртуелних машина. За многе администраторе веб локација то је права корист.