Jak określić wąskie gardło serwera i szybko rozwiązać powodowane przez nie problemy, poprawić wydajność serwera i zapobiec regresjom.
Przegląd
Z tego przewodnika dowiesz się, jak rozwiązać problem z przeciążonym serwerem w 4 krokach:
- Oceń: określ wąskie gardło serwera.
- Stabilizuj: wdrażaj szybkie poprawki, aby ograniczyć skutki.
- Usprawnij: rozszerzaj i optymalizuj możliwości serwerów.
- Monitoruj: korzystaj z automatycznych narzędzi, aby zapobiegać problemom w przyszłości.
Oceń
Jeśli ruch przeciąża serwer, może powstać wąskie gardło: procesor, sieć, pamięć lub wejścia/wyjścia dysku. Określenie, który z nich jest przyczyną wąskiego gardła, pozwala skoncentrować działania na najskuteczniejszych środkach zaradczych.
- Procesor: wykorzystanie procesora na poziomie ponad 80% należy zbadać i wyeliminować. Wydajność serwera często spada, gdy wykorzystanie procesora osiągnie ok. 80–90%, i staje się bardziej widoczne w miarę wykorzystania zbliżającego się 100%. Wykorzystanie procesora przez obsługę pojedynczego żądania jest znikome, ale robienie tego na dużą skalę podczas nagłego zwiększenia ruchu może czasem przeciążyć serwer. Przeniesienie obsługi do innej infrastruktury, ograniczenie kosztownych operacji i ograniczenie liczby żądań zmniejszy wykorzystanie procesora.
- Sieć: w okresach dużego ruchu przepustowość sieci wymagana do realizowania żądań użytkowników może przekroczyć przepustowość. W przypadku niektórych witryn, w zależności od dostawcy usług hostingowych, również mogą obowiązywać limity przesyłania danych łącznie. Zmniejszenie rozmiaru i ilości danych przesyłanych do i z serwera spowoduje usunięcie tego wąskiego gardła.
- Pamięć – gdy w systemie nie ma wystarczającej ilości pamięci, dane muszą zostać przeładowane, aby można było je zapisać na dysku. Dostęp do dysku jest znacznie wolniejszy niż do pamięci, co może spowolnić całą aplikację. Całkowite wyczerpanie pamięci może wywołać błędy Za mało pamięci (OOM). Dostosowanie alokacji pamięci, usunięcie wycieków pamięci i uaktualnienie pamięci może usunąć to wąskie gardło.
- Wejście-wyjście dysku: szybkość, z jaką dane mogą być odczytywane lub zapisywane z dysku, jest ograniczona przez sam dysk. Jeśli operacje wejścia-wyjścia dysku występują w przypadku wąskiego gardła, zwiększenie ilości danych w pamięci podręcznej może złagodzić ten problem (kosztem zwiększonego wykorzystania pamięci). Jeśli to nie pomoże, może być konieczne uaktualnienie dysków.
Techniki opisane w tym przewodniku skupiają się na rozwiązywaniu problemów z wąskim gardłem procesora i sieci. W przypadku większości witryn najistotniejsze wąskie gardła związane z wykorzystaniem procesora i sieci będą najbardziej odpowiednie w okresie nagłego zwiększenia ruchu.
Uruchomienie narzędzia top
na serwerze, na którym występuje problem, jest dobrym punktem wyjścia do badania wąskich gardła. W miarę możliwości uzupełnij je danymi historycznymi od dostawcy usług hostingowych lub narzędzi do monitorowania.
Stabilizacja
Przeciążenie serwera może szybko doprowadzić do kaskadowych awarii w innych miejscach systemu. Dlatego przed wprowadzeniem większych zmian należy ustabilizować serwer.
Ograniczenie liczby żądań
Ograniczenie liczby żądań chroni infrastrukturę, ograniczając liczbę żądań przychodzących. Jest to coraz ważniejsze ze względu na spadek wydajności serwera. Wraz ze wzrostem czasu odpowiedzi użytkownicy często odświeżają stronę, co jeszcze bardziej zwiększa obciążenie serwera.
Napraw
Odrzucenie żądania jest stosunkowo niedrogie, ale najlepszym sposobem zabezpieczenia serwera jest ograniczenie szybkości w jego kierunku, na przykład przez system równoważenia obciążenia, odwrotny serwer proxy lub CDN.
Instrukcje:
Więcej informacji:
Buforowanie HTTP
Poszukaj sposobów na bardziej agresywne zapisywanie treści w pamięci podręcznej. Jeśli zasób może być udostępniany z pamięci podręcznej HTTP (np. z pamięci podręcznej przeglądarki czy sieci CDN), nie trzeba go żądać z serwera pierwotnego, co zmniejsza obciążenie serwera.
Nagłówki HTTP, takie jak Cache-Control
, Expires
i ETag
, wskazują sposób przechowywania zasobu przez pamięć podręczną HTTP. Kontrola i naprawienie tych nagłówków poprawi buforowanie.
Chociaż skrypty service worker mogą być również używane do buforowania, wykorzystują one oddzielną pamięć podręczną i stanowią uzupełnienie, a nie zamiennik dla prawidłowego buforowania HTTP. Dlatego w przypadku przeciążonego serwera należy skupić się na optymalizacji buforowania HTTP.
Diagnozuj
Uruchom Lighthouse i przejrzyj kontrolę Udostępniania zasobów statycznych z wykorzystaniem zasad pamięci podręcznej, aby zobaczyć listę zasobów o krótkim lub średnim czasie życia (TTL). Dla każdego wymienionego zasobu zastanów się, czy należy zwiększyć wartość TTL. Ogólne wytyczne:
- Zasoby statyczne powinny być przechowywane w pamięci podręcznej z długim czasem TTL (1 rok).
- Zasoby dynamiczne powinny być przechowywane w pamięci podręcznej z krótkim czasem TTL (3 godziny).
Napraw
Ustaw odpowiednią liczbę sekund w dyrektywie max-age
w nagłówku Cache-Control
.
Instrukcje:
Łagodne pogorszenie
Łagodne pogorszenie to strategia tymczasowego ograniczania funkcjonalności w celu pozbycia się nadmiernego obciążenia systemu. Koncepcję tę można zastosować na wiele różnych sposobów, na przykład wyświetlając statyczną stronę tekstową zamiast pełnej aplikacji, wyłączenie wyszukiwania lub zwracanie mniejszej liczby wyników wyszukiwania albo wyłączenie pewnych kosztownych lub mniej ważnych funkcji. Należy położyć nacisk na usuwanie funkcji, które można bezpiecznie i łatwo usunąć przy minimalnym wpływie na działalność.
Ulepsz
Korzystanie z sieci dostarczania treści (CDN)
Wyświetlane zasoby statyczne można przenieść z serwera do sieci dystrybucji treści (CDN), zmniejszając w ten sposób obciążenie.
Podstawową funkcją sieci CDN jest szybkie dostarczanie treści użytkownikom dzięki dużej sieci serwerów znajdujących się w pobliżu użytkowników. Większość sieci CDN oferuje jednak również dodatkowe funkcje związane z wydajnością, takie jak kompresja, równoważenie obciążenia i optymalizacja mediów.
Konfigurowanie sieci CDN
Sieci CDN korzystają z skalowalności, więc obsługa własnej sieci rzadko ma sens. Podstawową konfigurację CDN można dość szybko skonfigurować (około 30 minut) i polega na zaktualizowaniu rekordów DNS tak, aby wskazywały sieć CDN.
Optymalizowanie wykorzystania CDN
Diagnozuj
Zidentyfikuj zasoby, które nie są udostępniane z sieci CDN (ale powinny być), uruchamiając narzędzie WebPageTest. Na stronie wyników kliknij kwadrat nad opcją „Efektywne wykorzystanie sieci CDN”, by wyświetlić listę zasobów, które powinny być udostępniane z sieci CDN.
Napraw
Jeśli zasób nie jest buforowany przez CDN, sprawdź, czy są spełnione te warunki:
- Ma nagłówek
Cache-Control: public
. - Zawiera nagłówek
Cache-Control: s-maxage
,Cache-Control: max-age
lubExpires
. - Zawiera
Content-Length
,Content-Range
lubTransfer-Encoding header
.
Skalowanie zasobów obliczeniowych
Decyzję o skalowaniu zasobów obliczeniowych należy podejmować z rozwagą. Mimo że skalowanie zasobów obliczeniowych jest często konieczne, może to spowodować niepotrzebną złożoność architektury i koszty finansowe.
Diagnozuj
Wysoka wartość Czasu do pierwszego bajtu (TTFB) może oznaczać, że serwer wyczerpuje swoją pojemność. Informacje na ten temat możesz znaleźć w raporcie Lighthouse dotyczącym skracania czasu reakcji serwera (TTFB).
Aby dokładniej zbadać wykorzystanie procesora, użyj narzędzia do monitorowania. Jeśli bieżące lub przewidywane wykorzystanie procesora przekracza 80%, rozważ zwiększenie liczby serwerów.
Napraw
Dodanie systemu równoważenia obciążenia umożliwia rozdzielenie ruchu między wiele serwerów. System równoważenia obciążenia znajduje się przed pulą serwerów i kieruje ruch na odpowiedni serwer. Dostawcy usług w chmurze oferują własne systemy równoważenia obciążenia (GCP, AWS, Azure). Możesz też skonfigurować własny przy użyciu HAProxy lub NGINX. Po wdrożeniu systemu równoważenia obciążenia można dodać kolejne serwery.
Oprócz równoważenia obciążenia większość dostawców chmury oferuje autoskalowanie (GCP, AWS, Azure). Autoskalowanie działa w połączeniu z równoważeniem obciążenia – autoskalowanie automatycznie skaluje zasoby obliczeniowe w górę i w dół w zależności od zapotrzebowania. Pamiętaj jednak, że autoskalowanie to nie magia – wymaga czasu, zanim nowe instancje pojawią się online, i wymaga zaawansowanej konfiguracji. Ze względu na dodatkową złożoność, z jaką wiąże się autoskalowanie, należy najpierw rozważyć prostszą konfigurację opartą na systemie równoważenia obciążenia.
Włącz kompresję
Zasoby tekstowe powinny być skompresowane za pomocą programu gzip lub brotli. Gzip może zmniejszyć rozmiar transferu tych zasobów o około 70%.
Diagnozuj
Skorzystaj z kontroli Włącz kompresję tekstu w Lighthouse, aby zidentyfikować zasoby do skompresowania.
Napraw
Włącz kompresję, aktualizując konfigurację serwera. Instrukcje:
Optymalizuj obrazy i multimedia
Obrazy stanowią większość rozmiaru plików w większości witryn; optymalizacja obrazów może szybko i znacznie zmniejszyć rozmiar witryny.
Diagnozuj
W Lighthouse są przeprowadzane różne audyty wskazujące na możliwe optymalizacje obrazów. Inną strategią jest użycie Narzędzi deweloperskich do identyfikacji największych plików graficznych – te obrazy z dużym prawdopodobieństwem będą dobre do optymalizacji.
Odpowiednie audyty Lighthouse:
- Właściwy rozmiar obrazów
- Odkładanie obrazów poza ekran
- Efektywne kodowanie obrazów
- Wyświetlanie obrazów w formatach nowej generacji
- Używanie formatów wideo w przypadku treści animowanych
Przepływ pracy w Narzędziach deweloperskich w Chrome:
- Rejestrowanie aktywności w sieci
- Kliknij Img, aby odfiltrować zasoby inne niż obrazy.
- Kliknij kolumnę Rozmiar, aby posortować pliki graficzne według rozmiaru.
Napraw
Jeśli masz ograniczony czas...
Skoncentruj się na identyfikowaniu dużych i często wczytywanych obrazów oraz ręcznym optymalizowaniu ich za pomocą takich narzędzi jak Squoosh. Banery powitalne często dobrze nadają się do optymalizacji.
Uwagi:
- Rozmiar: obrazy nie mogą być większe niż to konieczne.
- Kompresja: ogólnie jakość 80-85 ma minimalny wpływ na jakość obrazu i zmniejsza rozmiar pliku o 30-40%.
- Format: używaj plików JPEG zamiast PNG. W przypadku treści animowanych używaj formatu MP4, a nie GIF.
Jeśli masz więcej czasu...
Rozważ skonfigurowanie sieci CDN z obrazami, jeśli obrazy stanowią znaczną część witryny. Sieci CDN obrazów zostały zaprojektowane z myślą o wyświetlaniu i optymalizowaniu obrazów. Pozwalają one przenieść obsługę obrazów z serwera pierwotnego. Konfigurowanie sieci CDN z obrazami jest proste, ale wymaga zaktualizowania istniejących adresów URL obrazów, tak aby wskazywały tę sieć.
Więcej informacji:
Zmniejsz JS i CSS
Zmniejszenie powoduje usunięcie zbędnych znaków z JavaScriptu i CSS.
Diagnozuj
Użyj audytów narzędzia Minify CSS i Minify JavaScript Lighthouse, aby zidentyfikować zasoby wymagające minifikacji.
Napraw
Jeśli masz mało czasu, skup się na zmniejszaniu kodu JavaScript. Większość witryn zawiera więcej kodu JavaScript niż CSS, więc będzie to miało większy wpływ.
Monitorowanie
Narzędzia do monitorowania serwera umożliwiają zbieranie danych, panele i alerty dotyczące wydajności serwerów. Ich użycie może pomóc w zapobieganiu i łagodzeniu przyszłych problemów z wydajnością serwerów.
Konfiguracja monitorowania powinna być jak najprostsza. Nadmierne gromadzenie i alarmowanie danych wiąże się z kosztami: im większy zakres lub częstotliwość gromadzenia danych, tym droższe jest ich zbieranie i przechowywanie; nadmierna liczba alertów nieuchronnie prowadzi do zignorowania strony.
Alerty powinny korzystać z wskaźników, które konsekwentnie i dokładnie wykrywają problemy. Czas reakcji serwera (opóźnienie) to wskaźnik, który szczególnie dobrze się tu sprawdza – wykrywa wiele różnych problemów i jest bezpośrednio skorelowany z wrażeniami użytkowników. Alerty oparte na wskaźnikach niższego poziomu, takich jak wykorzystanie procesora, mogą być przydatnym uzupełnieniem, ale wykrywa mniejszy podzbiór problemów. Dodatkowo alerty powinny być oparte na wynikach zaobserwowanych na samym końcu (czyli na 95 lub 99 centylu), a nie na średnich wartościach. W przeciwnym razie średnie mogą łatwo wyeliminować problemy, które nie dotyczą wszystkich użytkowników.
Napraw
Wszyscy główni dostawcy usług w chmurze oferują własne narzędzia do monitorowania (GCP, AWS, Azure). Netdata to też doskonała, bezpłatna alternatywa typu open source. Niezależnie od tego, które narzędzie wybierzesz, musisz zainstalować agenta monitorowania tego narzędzia na każdym serwerze, który chcesz monitorować. Gdy to zrobisz, skonfiguruj alerty.
Instrukcje: