Как да ускорите вашия сайт с помощта на Varnish кеширащ прокси сървър, блог, разработка и дизайн

varnish

Рано или късно, с нарастването на посетителите, всеки разработчик на проекти има въпрос как да ускори зареждането на сайта, как да реши проблема с неговата скорост. Най-ефективното решение за подобряване на производителността на сайта и ускоряване на зареждането на страницата е използването на ESI-активиран Varnish кеширащ прокси сървър. На страницата с документация можете да намерите методи за инсталиране на популярни Linux дистрибуции или да изтеглите изходния код, тъй като това е напълно безплатен продукт и се пуска под BSD лиценз.

Инсталиране и конфигуриране на софтуера Varnish

Към момента на писане текущата версия беше 4.0.3, пример за инсталиране на Ubuntu 14.04 (Trusty Tahr):

След инсталирането ще се появи списък с налични помощни програми:

  • varnishadm - за администриране на varnishd демон;
  • varnishhist - хистограма на заявките;
  • varnishlog - дневник на операциите;
  • varnishncsa - показва регистрационни файлове във формат Apache / NCSA;
  • varnishstat - статистика за използването на кеша;
  • varnishtest - помощна програма за тестване;
  • varnishtop - топ статистика за използване на кеша.

Varnish използва специфичния за домейна език за програмиране VCL (Varnish configuration Language) за конфигуриране. Конфигурационен файл /etc/varnish/default.vcl:

default_server - използва се за конфигуриране на бекенд сървъри, в този случай е регистриран един "default_server" - приложение на symfony на порт 8080, varnish слуша на порт 6081 по подразбиране, може да се промени в конфигурационния файл на демон /etc/default/varnish.

vcl_recv - извиква се в началото на заявката.

vcl_backend_response - използва се при получаване на отговор от бекенд сървъра.

Струва си да се отбележи, че HTTP кеширането работи само с "безопасни" методи като GET, HEAD. Под „безопасно“ имам предвид, че тези методи няма да променят състоянието на данните (редактиране, изтриване). Никога не трябва да кеширате методи, които променят състоянието (POST, DELETE, PUT, PATH), тъй като заявките може да не достигнат функционалното ниво на изпълнение на бекенда и ще бъдат обработени на ниво кеш.

На този етап конфигурацията на Varnish е завършена.

Настройване на кеширане с помощта на Varnish прокси сървър за сайтове, разработени на Symfony2 PHP framework

ускорите

Тъй като на този етап приложението Symfony2 все още не е конфигурирано да работи с прокси сървър, се показва грешка 503. Към момента на писане текущата версия беше 2.7, така че конфигурацията ще съответства на тази версия. Процесът на инсталиране може да бъде намерен в предишната ни статия. Първо трябва да замените някои опции за конфигурация на рамката в app/config/config.yml:

От описанието на параметрите трябва да е ясно предназначението им. Първият esi активира поддръжката на esi, trusted_proxies е списък с прокси сървъри, fragments е маршрут за генериране на фрагменти от съдържание. След това трябва да зададете параметрите на кеша за съответните действия:

Възраст - време в секунди, възраст на кеша.

Cache-Control: public показва, че това съдържание е публично (може да се кешира от публични проксита и се споделя от всички потребители); s-maxage определя живота в секунди. Като алтернатива, ако замените @Cache(smaxage=30) с @Cache(maxage=30), private ще покаже, че само частни сървъри (браузъри) могат да кешират отговорите.

За да кеширате динамични блокове съдържание, трябва да използвате ESI. ДА СЕНапример общата схема на работа:

вашия

Първо, потребителят изпраща заявка за ресурс. Ако тялото на отговора съдържа специални тагове, кеширащият сървър отправя запитване към бекенда за допълнителни блокове съдържание. Symfony2 имплементира функцията render_esi Twig за изобразяване на esi тагове, входният параметър може да бъде обект от тип ControllerReference (например, )) >> ), или URL връзки ( )) >> ). След добавяне на блока esi шаблонът app/Resources/views/default/index.html.twig ще изглежда така:

Трябва също да добавите действието esiFragment в контролера:

резултати

В този случай основният блок indexAction ще бъде кеширан за 30 секунди, а допълнителният esiFragmentAction за 15 секунди. Нека направим малък тест, за да сравним резултатите.

С Varnish $ ab -c 10 -n 1000 http://localhost:6081/app/example

И без да го използвате $ ab -c 10 -n 1000 http://localhost:8080/app/example

Както можете да видите от резултатите, разликата в увеличението на производителността е 9197 спрямо 143 заявки, което е около 65 пъти по-бързо. По този начин, с помощта на varnish proxy, можем значително да ускорим силно натоварените сайтове на Symfony2.