Преди време се сблъскахме с един интересен случай с популярния сайт Lifehack.bg, за който решихме да ви разкажем.
Накратко, става дума за случай, в който въпреки всичките активирани технологии за кеширане и ускоряване, WordPress сайт, с един единствен продукт в WooCommerce, отказваше да се зарежда в най-критичните моменти (моменти на активна реклама).
Казусът
Lifehack.bg предоставя полезно съдържание, до което обаче неговите читатели често нямаха достъп. Проблемът се появяваше в моментите, когато за сайта се пусне реклама/бюлетин и той получи по-голям брой едновременни посещения.
Хостинг услугата, която сайтът ползва, е Managed VPS – управляем виртуален сървър, с много ресурси. На този сървър се намира само този сайт. Ресурсите, които се предлагат от избрания план, са напълно достатъчни за приблизително 120 000 уникални посещения на месец. Въпреки това, те се оказват напълно недостатъчни във важните за сайта моменти и той успяваше сам да изразходи всичките ресурси на сървъра.
В очите на клиента не беше нормално сървър с толкова ресурси да не успява да обслужи посетителите на сайта в пиковите моменти, които като брой бяха далеч от очакваните възможности за услугата. А това от своя страна пораждаше съмнения в качеството на услугата, която предоставяме, съмнения, които изглеждаха напълно основателни предвид поведението на сайта и сървъра.
От клиентска гледна точка, изглеждаше невъзможно проблемът да е свързан със системата на сайта, особено предвид факта, че сайта използваше минимален брой външни плъгини както и един от най-популярните плъгини за кеширане – wp-rocket.
Пътят към решението
При първите сигнали от клиента, че сайтът спира да работи в пиковите моменти, установихме, че причината да не се зарежда, е високото натоварване на сървъра, което довежда до изчерпването на ресурсите му – цялата памет, PHP процеси, процесорен ресурс и всичко друго. В следствие на ефекта на лавината, един след друг ресурсите се изчерпваха, като първият изчерпан води до изчерпване на следващия и т.н.
Опитите ни за коригиране на това поведение на сайта, в моментите на натоварване, започнаха с активирането на уеб ускорителя SuperCache* в cPanel. SuperCache кешира целия изходен код на дадена уеб страница – динамичното и статичното й съдържание. За разлика от технологиите Memcached и Redis, които работят на ниво приложение, SuperCache* се намира пред реалния уеб сървър, който обслужва сайта.
Заедно с активирането на SuperCache, направихме и ъпгрейд на уеб сървъра до версия 2.4, което ни позволи да активираме HTTP/2 за сайта.
До тук извършените действия допринесоха за осезаемо по-бързото зареждане на сайта, но той продължи да пада при пиково увеличаване на посещенията.
Продължихме с опитите да открием какво нарушава нормалната работа на сайта, като направихме и няколко промени в конфигурацията на SuperCache. Това увеличи драстично производителността на ускорителя и над 75% от заявките вече се сервираха от кеша (в сравнение с около 10% преди промените).
За съжаление, по-бързото зареждане на страниците от кеша не промени по никакъв начин работата на сайта и вътрешните му WordPress процеси. Проблемите в самия сайт останаха и при повече едновременни посетители възпрепятстваха работата му. Ситуацията с пиково натоварване на сървъра и спирането на сайта продължи.
Когато видяхме, че всичко, с което разполагаме и правим, не помага за решаването на казуса, неудовлетворението за нас стана голямо. И се увеличаваше още повече от това, като знаем, че разочарованието на клиента вече беше огромно, и ние не успявахме да му съдействаме и да променим посоката, в която отиваха нещата.
*SuperCache Manager е новият инструмент в секцията SuperHosting Speed-up в контролния панел cPanel. SuperCache кешира динамичното и статичното съдържание на вашия сайт. Кеширането се извършва на ниво уеб сървър.
Веднъж кеширана, страницата се зарежда със скоростта на обикновена статична HTML страница, като ускорението може да се измери в пъти.
За възможностите на SuperCache престои да ви разкажем в следващи публикации. Следете блога ни.
Промяна в курса
Затова решихме да променим курса и да навлезем в дълбоките води на системата WordPress, макар казусът да излиза извън рамките на предоставяната от нас хостинг услуга.
Lifehack.bg ни гласува пълно доверие за това.
Извършихме подробна проверка на системата и работата на сайта, настройките, плъгините, темите и всичко друго, което може да е вътрешната причина за получаващия се проблем. Това означава всичко, което стои от другата страна на стената, отделяща хостинг услугата от уеб разработването.
Проверката направихме на копие на реалния сайт, за да не попречим на работата му към момента.
В процеса на диагностика и десетки тестове извършени от наша страна, попаднахме на нещо много странно – оказа се, че wp-rocket успява да кешира изключително малка част от съдържанието на сайта. Знаейки, че wp-rocket е платен и реномиран плъгин за кеширане, най-малко очаквахме да има проблем в неговата работа.
Именно в този плъгин се оказа основната причина за проблемите с натоварването генерирано от сайта и падането на сървъра. Поради неясна за нас причина wp-rocket не успяваше да кешира голяма част от съдържанието на сайта, което вероятно се дължеше на несъвместимост с някоя от настройките на WordPress или WooCommerce.
Кеширането е от съществено значение за оптимизацията на един сайт, неговото бързодействие и консумация на ресурси. И когато сайт с голям брой посещения, не успява да използва ефективно технологии за кеширане, това резултира в значително по-бавно зареждане и много голяма консумация на сървърни ресурси.
След като заменихме wp-rocket с друг кеширащ плъгин – W3 Total Cache и се уверихме, че той работи коректно, работата на сайта се промени коренно.
Замяната на плъгина в комбинация с другите извършени до момента промени, доведоха до значително по-добро бързодействие на сайта и много по-оптимална консумация на сървърни ресурси.
След като клиентът направи тест на оптимизираната версия на сайта, всички промени се пренесоха и на реалния сайт.
От този ден нататък, проблемът при пикова посещаемост на сайта не се повтори повече.
Ето и кратък списък на основните промени, които извършихме:
- Деактивирахме wp-rocket.
- Инсталирахме, активирахме и конфигурирахме W3 Total Cache.
- Променихме php версията на 7.1.
- Активирахме opcode кеширане посредством OPcache в PHP.
- Активирахме Redis инстанция в cPanel, след което настроихме W3TC да съхранява кешираните обекти в паметта посредством Redis.
- Настроихме browser caching функционалност в W3TC.
- Извършихме интеграция на W3 Total Cache със SuperCache, с което кеша на SuperCache да се изчиства автоматично при промени в сайта.
Сравнителни данни и резултати от оптимизацията на WordPress
Описаните промени доведоха до многократни подобрения в различни аспекти от работата на сайта:
- Над 30 пъти по-малък CPU ресурс при обработката на вече кеширани адреси.
- Около 3 пъти по-малка консумация на CPU за адресите, които получават първи хит (т.е. до момента не са кеширани).
- Преди оптимизациите, при зареждането на една страница от сайта се изпълняваха средно между 150 – 250 заявки към базата. След оптимизациите средната стойност се понижи значително и варира в границите 50-80.
Брой SQL заявки, преди оптимизациите:
Брой SQL заявки, след оптимизациите:
- Драстично се понижи времето за зареждане на отделните страници, като времето за зареждане на Home страницата се понижи от около 9 секунди до 2,2 секунди, при липса на браузър кеш. При наличието на браузър кеш, времето за зареждане падна на около 0,5 секунди.
време за зареждане на началната страница, преди оптимизациите:
време за зареждане на началната страница, след оптимизациите:
време за зареждане на страница с категория, преди оптимизациите:
време за зареждане на страница с категория, след оптимизациите:
- И не на последно място – генерираните от сайта CPU минути намаляват почти тройно, или казано по друг начин – зареждането на сайта консумира до 3 пъти по-малко процесорен ресурс.
CPU минути:
в цифри:
Изводът от този случай
Правилната комуникация е ключът към успеха.
Ние помагаме на нашите клиенти, не по задължение, а заради високото удовлетворение, положителната енергия и емоция, чистата мотивация и стимул да продължим да действаме в същия дух.
Вярно е, че понякога достигаме до ограничения, наложени от специфичната област – хостинг услуги, в която работим, имаме знания и опит. Но именно случаите, като този, в които излизаме от полето си на комфорт и експертност, ни правят още по-способни и увеличават нивото ни на професионализъм. И сме още по-готови да посрещнем следващото предизвикателство.
Полезни насоки и съвети, добити от опита ни по този случай
WordPress е страхотна система за създаване и управление на сайт, която ни предоставя огромен набор от плъгини и инструменти, които можем да ползваме.
Но когато стане въпрос за оптимизации и ускоряване, трябва да подхождаме много внимателно. Независимо каква промяна решим да извършим с цел оптимизация (инсталация на плъгин или промяна в настройките) винаги трябва да има и сравнителни тестове, с които да се уверим, че промените наистина оказват положителен ефект върху работата на сайта.
Много често малки камъчета (под формата на настройка или плъгин) може да променят драстично бързодействието на един сайт.
Най-лесното решение е да „оправяме“ проблемите с бързодействието, като закупуваме допълнителен сървърен ресурс. Но по този начин се опитваме да излекуваме симптомите, а не причината за възникването им.
Оптимизацията на сайта (когато е възможна такава) е по-ефективното и правилно в дългосрочен план решение.
Благодарности на Христо Стоянов, който ни гласува пълно доверие и ни позволи да споделим казуса с Lifehack.bg. Надяваме се да е полезен на читателите на нашия блог.