WYDAJNOŚĆ SYSTEMÓW PORTALOWYCH

czyli - hybrydowy cache w portalu.

Uruchomiliśmy portal Cozadzien.pl; stary portal nie był zbyt urodziwy, nie był responsywny i silnie kulała jego wydajność. Budowa portalu zajęła kilka miesięcy. System został dokładnie zoptymalizowany do kątem minimalizacji ilości zapytań do bazy danych, implementowaliśmy system cache - memcached. Portal działa bardzo szybko, lekko jak ptaszek. 500 userów na raz nie robi na nim żadnego wrażenia. Zadbaliśmy też o inteligentne przekierowania ze starego adresowania, tak, by rozsiane po sieci linki do podstron w strukturze starego portalu trafiały we właściwe miejsca na nowym. Przez kilka dni była bajka. 

Każdy, kto używa memcached wie, że pojemność cache w pamięci serwera jest ograniczona, i współdzielona między strony. Pamięć cache (skonfigurowana na 64MB) zwykle przechowuje ostatnio odpytywane strony i szybciutko serwuje je internautom. Jeżeli internauta odpyta o stronę zakeszowaną, natychmiast jest ona serwowana - mamy do czynienia z "hitem", a system nie odpytuje bazy sql, wykonuje tylko szybki insert, żeby zebrać statystyki. Pamięć stopniowo się zapełnia, raz na jakiś czas (z góry ustalony przez programistów) niektóre podstrony ekspirują z cache i są renderowane od nowa. Jak pamięć cache się kończy, usuwane są z niej niektóre podstrony, by zrobić miejsce nowym. Sielanka trwa.

Do czasu!

Semrush, Ahefs, Google, Bing i kilka mniejszych robotów postanowiło przeczesać nową strukturę portalu. Kto by się spodziewał 15 000 różnych zapytań od samych tylko robotów na godzinę? Na pewno nie memcached, który to bombardowany coraz to nowymi zapytaniami, tworzył cache podstron bardzo rzadko przywoływanych przez internautów. Memcached usuwał z pamięci strony częściej odwiedzane, zmuszając portal do renderowania coraz to innych podstron i zapychając cache nieatrakcyjnymi danymi. Portal zwolnił. Statysyki mysql oszalały, pokazując czasem liczbę zapytań do bazy dwudziestokrotnie wyższą, niż normalnie!

Szybka analiza logów pozwoliła wychwycić kilka "dziwnych" zapytań z portali sprawdzających istnienie linków (Semrush i Ahrefs); ponieważ zawierały one specyficzne frazy, na kilka godzin wyblokowaliśmy je na poziomie rutera i htaccessa. Czasowo też wyłączyliśmy niektóre roboty indeksujące, dopuściliśmy tylko Google i Bing. Analiza zachowania cache, wspomagana PHPMemcachedAminem wykazała, że liczba "hitów" w cache spadła bardzo znacząco. Krótka narada: wykorzystajmy szybki cache dla najczęściej odwiedzanych stron, a te starsze niech renderują się w locie! Ten ruch przyniósł ulgę systemowi - liczba zapytań do bazy spadła. współczynnik hitów w memcached stabilizuje się na poziomie ponad 90%! 

Można jednak zrobić więcej. Wymyśliliśmy, że optymalny dla portalu będzie cache hybrydowy. Najczęściej odwiedzane strony obsługuje memcached, a te rzadziej wywoływane i starsze - cache dyskowy, któremu nie straszny brak pamięci. Taka hybryda ogranicza znacznie liczbę zapytań do bazy i powoduje, że nawet w trakcie dużego obciążenia serwer portalu się nudzi :). Memcached jest wykorzystany w 50%, cache dyskowy jest tylko odrobinkę wolniejszy niż cache w pamięci, a baza danych przy ponad 90% wyświetleń stron portalu ma wolne.

Optymalizacja to proces złożony i długotrwały. Cały czas obserwujemy statystyki serwera, logujemy większe aktywności i analizujemy logi. Czasem znajdujemy coś, co można poprawić we wdrożeniu portalu. 

Portal działą już ponad dwa miesiące, a w styczniu przekroczył 10 000 000 odsłon - to naprawdę sporo, jak na lokalny serwis informacyjny! Cieszymy się, że możemy w tym uczestniczyć!


Autor: Marcin Pawelec
2018-02-06

Chciałbyś, abyśmy omówili jakiś temat? Napisz.


Powrót na górę strony

Podziel się z innymi:

Chcesz z nami współpracować?
Skontaktuj się!

Sprzedaż mieszkań w praktyce SCRUM