Увеличете ефективността на уебсайта си с 20%

За да подобря производителността на Paul’s dev blog и да подобря потребителското изживяване за всички посетители, реших да потърся възможност за интегриране на HTTP кеш в моята Docker Swarm среда.

След като проучвах дълго време и също питах други хора в Reddit (за съжаление, никой не можа да ми помогне), намерих решение, което отговаря на очакванията ми.

Докато проучвах, научих за Varnish, който е ускорител на уеб приложения, известен също като кеширащ HTTP обратен прокси. Може да се инсталира пред всеки сървър, който използва HTTP за кеширане на съдържанието. Той е наистина, наистина бърз и обикновено ускорява доставката с коефициент 300–1000 пъти, намалява времето за зареждане и може да се справи с пикове на трафика.

Общ преглед на високо ниво на това, което Varnish прави, може да се види в това видео:

Конфигурацията

Новата ми настройка включва Varnish HTTP Cache сървър, внедрен с помощта на Docker в моята среда на Docker Swarm. Позициониран е между моя Traefik Proxy и моя Ghost блог. В тази настройка Varnish се използва за кеширане на различно статично съдържание на страницата, като JavaScript, CSS, изображения и текстови файлове.

Бенчмаркинг

За да сравня моя уебсайт, използвам „разширението Lighthouse от Google“, „giftofspeed.com“ и „tools.pingdom.com“. Всички тестови сайтове зареждат целия сайт, сякаш сме в браузъра. Проведох различни тестове от различни държави със и без Varnish. Докато тествах, видях увеличение на производителността с ~20%.

Например на giftofspeed.com тествах един и същ URL адрес няколко пъти със и без Varnish HTTP Cache и получих следните резултати:

Без Varnish HTTP Cache

С Varnish HTTP Cache

Настройте го сами

Първо се уверете, че имате инсталирани docker и docker-compose. Освен това ви трябва Traefik Load balancer, който препраща заявки към моя Ghost блог. Всички правила (етикети) във файла Compose ще се основават на моята лична инсталация на Traefik.

Сега, за да настроя Varnish HTTP Cache между моя Ghost блог и Traefik Proxy, разширявам Compose файла за този блог (прочетете как го настроих тук), като първо добавям varnish раздел и след това премествам всички етикети от моя ghost услуга към varnish услуга. След това променям порта на сървъра за балансиране на натоварването от 2368 (призрачен порт) на 80 (лакиран порт).

Друга необходима промяна е, че networks за услугата ghost се променя, тъй като има само default, а услугата varnish има default и traefik-public. Последната промяна ще бъде добавянето на конфигурация към Compose файла, съдържащ Varnish Config.

Получената част от Compose файла ще изглежда така:

В рамките на услугата ghost дефинирахме конфигурация, сочеща към default.vcl, която ще изглежда така:

В този файл декларирах някои специални правила за Varnish HTTP кеша:

  • Задайте backend на ghost:2368, защото в рамките на вътрешната мрежа по подразбиране призракът е достъпен през ghost:2368.
  • Премахнете /ghost/..., /p/... и /admin/... от кеша, защото администраторското меню не трябва да се кешира.
  • Премахнете основния URL адрес на този блог, за да нямате никога остарял списък със статии поради кеширане.
  • Добавете URL (/testclear), за да изчистите ръчно кеша.

Създавам конфигурационния файл на Varnish в същата папка като docker-compose.

Сега бих могъл да разположа „пълния Compose файл, който можете да изтеглите от GitHub Gist“ с тази команда:

$ docker stack deploy -c docker-compose.yml blog

Ако искате да го използвате, моля, актуализирайте хоста, базата данни (MySQL) и настройките на пощата.

Обработка на грешки

Регулиране на конфигурацията на лака

Ако някога искам да променя конфигурацията на Varnish, е необходимо да променя името на конфигурацията, защото не можете да промените конфигурациите в Docker среда. Можете лесно да го промените на ново име във файла Compose, да го внедрите и след това да изтриете стария ключ, за да промените между две имена на конфигурация.

След това трябва да презаредите конфигурацията, защото тя няма да се приложи автоматично. За да направя това, превключих на сървъра, където е разположен моят Varnish контейнер, и използвах docker exec за презареждане на Varnish конфигурацията:

$ docker exec YOUR_VARNISH_CONTAINER varnishreload

Изтегленият файл не работи

Ако сляпо сте изтеглили файла в GitHub Gist, той няма да работи, без да зададете необходимите променливи за Mail, MySQL и Host. Разгледайте този урок, обясняващ настройката на Ghost с Docker. Освен това коригирайте настройките на Mysql, защото урокът за Ghost е създаден преди преминаването към MySQL и тази част липсва. Но аз работя върху прости инструкции, които ще бъдат публикувани след няколко седмици.

Заключителни бележки

Поздравления, ако сте последвали моя подход, току-що сте инсталирали свой собствен Ghost блог с Varnish HTTP Cache, което ще подобри производителността!

Пълният Compose файл може да бъде намерен в GitHub Gist, който създадох за тази статия. Ако все още имате въпроси относно създаването на Ghost блог, можете да следвате моя урок за правене на това в Docker Swarm.

Това е краят на този урок. Надяваме се, че вече можете да настроите вашата инсталация. Ако ви е харесало да прочетете тази статия, помислете дали да коментирате ценните си мисли в секцията за коментари. Ще се радвам да чуя вашите отзиви за Varnish HTTP Cache. Освен това, споделете тази статия с колеги блогъри, за да им помогнете да подобрят ефективността на своя блог!

Want to Connect?
You can find me on my Personal Blog, LinkedIn, Twitter, and GitHub.

Тази статия първоначално беше публикувана в моя блог на адрес https://www.paulsblog.dev/how-to-use-varnish-as-http-cache-for-your-blog/