Skrócenie czasu ładowania strony z 4.2s do 1.4s dla portalu
Przeniesienie bazy danych na dedykowane macierze NVMe i zmiana konfiguracji serwera Nginx w warszawskim centrum danych.
Redakcja portalu Wiadomości Lokalne borykała się z powolnym działaniem serwisu informacyjnego. Przy 47 tysiącach unikalnych użytkowników miesięcznie, czas ładowania przekraczający 4 sekundy powodował, że czytelnicy uciekali do konkurencji, zanim zdążyli przeczytać nagłówek.
Wyzwanie
Portal działał na starym serwerze wirtualnym z dyskami HDD, co przy większym ruchu całkowicie blokowało odczyt bazy danych. W godzinach szczytu, czyli między 8:15 a 10:40 rano, czas odpowiedzi serwera (TTFB) wzrastał do 2.3 sekundy. Czytelnicy zgłaszali błędy przy próbie dodawania komentarzy, a redaktorzy nie mogli sprawnie publikować pilnych wiadomości. Strona główna ważyła 3.7 MB, co przy słabszym łączu mobilnym trwało wieki.
Problem pogłębiał się podczas publikacji popularnych materiałów wideo, które nadmiernie obciążały procesor. Brak odpowiedniego buforowania sprawiał, że każde zapytanie do bazy danych musiało być przetwarzane od nowa, co generowało niepotrzebne kolejki na serwerze.
Podejście
Nasz 3-osobowy zespół przeprowadził audyt infrastruktury trwający 4 dni robocze. Przeanalizowaliśmy logi serwera Nginx i zapytania SQL, które wykonywały się najdłużej. Zamiast proponować drogie maszyny o ogromnej mocy, skupiliśmy się na zmianie architektury przechowywania danych.
Wytypowaliśmy 18 najbardziej problematycznych wtyczek w systemie CMS, które generowały zbędne zapytania. Zdecydowaliśmy się na migrację do centrum danych zlokalizowanego przy ul. Konstruktorskiej w Warszawie, aby skrócić fizyczną drogę pakietów do użytkowników z Mazowsza. Całość prac podzieliliśmy na 3 etapy, aby uniknąć przestojów w działaniu portalu podczas dnia pracy redakcji.
Rozwiązanie
Przenieśliśmy całą strukturę na dedykowaną instancję z macierzą NVMe w układzie RAID 10. Pozwoliło to na drastyczne przyspieszenie operacji zapisu i odczytu bazy danych o rozmiarze 147 GB. Skonfigurowaliśmy serwer Nginx do obsługi kompresji Brotli oraz wdrożyliśmy mechanizm FastCGI Cache, który serwuje gotowe pliki HTML zamiast generować je przy każdym wejściu.
Dodatkowo zoptymalizowaliśmy pulę PHP-FPM, dopasowując ją do 8-rdzeniowego procesora, co ustabilizowało zużycie pamięci RAM na poziomie 63% nawet przy nagłych skokach ruchu. Wszystkie obrazy na stronie są teraz automatycznie konwertowane do formatu WebP przez moduł serwerowy, co zmniejszyło wagę strony głównej z 3.7 MB do 1.2 MB.
Rezultaty
Dzięki zmianie sprzętu na NVMe oraz poprawie konfiguracji oprogramowania, portal Wiadomości Lokalne odzyskał stabilność i płynność działania nawet w godzinach największego natężenia ruchu.
Harmonogram
-
4-7 Października 2024Audyt wydajnościowy i analiza logów SQL
-
12 Października 2024Konfiguracja nowego środowiska na dyskach NVMe
-
14 Października 2024Migracja bazy danych i testy obciążeniowe
-
15 Października 2024Uruchomienie kompresji Brotli i FastCGI Cache
"Początkowo myśleliśmy, że to wina kodu strony, ale Gbu Vps pokazało nam, że to dyski serwera były wąskim gardłem. Teraz portal działa błyskawicznie, a redakcja wreszcie nie czeka 20 sekund na zapisanie artykułu."