Naprawianie przeciążonego serwera

Jak określić wąskie gardło serwera i szybko je rozwiązać, poprawić wydajność serwera oraz zapobiec regresjom.

Katie Hempenius
Katie Hempenius

Omówienie

Z tego przewodnika dowiesz się, jak rozwiązać problem przeciążonego serwera w 4 krokach:

  1. Ocena: określ wąskie gardło serwera.
  2. Stabilize: wdrożenie szybkich poprawek w celu zminimalizowania wpływu.
  3. Ulepsz: rozszerz i zoptymalizuj możliwości serwera.
  4. Monitorowanie: korzystaj z automatycznych narzędzi, aby zapobiegać przyszłym problemom.

Oceń

Gdy ruch przeciąża serwer, może to spowodować zwężenie w przypadku co najmniej jednego z tych elementów: procesora, sieci, pamięci lub operacji wejścia/wyjścia na dysku. Ustalenie, który z nich jest wąskim gardłem, pozwala skoncentrować się na najbardziej skutecznych sposobach zapobiegania problemom.

  • Procesor: wykorzystanie procesora, które stale przekracza 80%, należy zbadać i usunąć. Wydajność serwera często spada, gdy wykorzystanie procesora osiąga poziom około 80–90%, a im bliższa 100%, tym bardziej się obniża. Wykorzystanie procesora podczas obsługi pojedynczego żądania jest znikome, ale robienie tego na dużą skalę podczas wzrostu natężenia ruchu może czasami przeciążać serwer. Przeniesienie obsługi na inną infrastrukturę, ograniczenie kosztownych operacji i ograniczenie liczby żądań zmniejszy wykorzystanie procesora.
  • Sieć: w okresach dużego natężenia ruchu przepustowość sieci wymagana do obsługi żądań użytkowników może przekroczyć jej możliwości. Niektóre witryny, w zależności od dostawcy usług hostingowych, mogą też osiągnąć limity dotyczące łącznego przesyłania danych. Zmniejszenie rozmiaru i ilości danych przesyłanych na serwer i z niego usunie to wąskie gardło.
  • Pamięć: gdy system nie ma wystarczającej ilości pamięci, dane muszą zostać przeniesione na dysk w celu przechowywania. Dostęp do dysku jest znacznie wolniejszy niż do pamięci, co może spowolnić działanie całej aplikacji. Jeśli pamięć zostanie całkowicie wyczerpana, może to spowodować błędy brak pamięci. Wyeliminowanie tego wąskiego gardła wymaga dostosowania przydziału pamięci, naprawienia wycieków pamięci i zwiększenia ilości pamięci.
  • Wejście-wyjście na dysku: szybkość odczytu i zapisu danych z dysku jest ograniczona przez sam dysk. Jeśli wąskim gardłem jest wejście/wyjście z dysku, zwiększenie ilości danych buforowanych w pamięci może rozwiązać ten problem (choć kosztem zwiększenia wykorzystania pamięci). Jeśli to nie zadziała, może być konieczna aktualizacja dysków.

Techniki opisane w tym przewodniku koncentrują się na rozwiązywaniu problemów z wąskim gardłem procesora i sieci. W przypadku większości witryn procesor i sieć będą najbardziej istotnymi wąskimi gardłami podczas wzrostu natężenia ruchu.

Uruchomienie top na dotkniętym problemem serwerze to dobry punkt wyjścia do zbadania wąskich gardeł. W razie możliwości uzupełnij te informacje o dane historyczne od dostawcy usług hostingowych lub narzędzia do monitorowania.

Stabilizacja

Przeciążony serwer może szybko doprowadzić do błędów kaskadowych w innych miejscach w systemie. Dlatego ważne jest, aby stabilizować serwer przed wprowadzeniem większych zmian.

Ograniczanie liczby żądań

Ograniczenie szybkości chroni infrastrukturę przez ograniczenie liczby żądań przychodzących. Jest to coraz ważniejsze, ponieważ wydajność serwera spada: wraz ze wzrostem czasu odpowiedzi użytkownicy mają tendencję do częstego odświeżania strony, co jeszcze bardziej zwiększa obciążenie serwera.

Napraw

Odrzucenie żądania jest stosunkowo niedrogie, ale najlepszym sposobem na ochronę serwera jest ograniczenie szybkości na etapie upstream, np. za pomocą równoważnika obciążenia, zapory zwrotnej lub sieci CDN.

Instrukcje:

Więcej informacji:

Buforowanie HTTP

Poszukaj sposobów na bardziej agresywne buforowanie treści. Jeśli zasób może być dostarczany z pamięci podręcznej HTTP (czy to z pamięci podręcznej przeglądarki czy z sieci CDN), nie trzeba wysyłać żądania do serwera źródłowego, co zmniejsza obciążenie serwera.

Nagłówki HTTP, takie jak Cache-Control, Expires i ETag, wskazują, jak zasób powinien być przechowywany w pamięci podręcznej przez pamięć podręczną HTTP. Sprawdzenie i poprawienie tych nagłówków poprawi buforowanie.

Chociaż elementy service worker mogą być również używane do buforowania, korzystają one z osobnej pamięci podręcznej i są uzupełnieniem, a nie zamiennikiem prawidłowego buforowania HTTP. Dlatego w przypadku przeciążonego serwera należy skupić się na optymalizacji buforowania HTTP.

Diagnozuj

Uruchom Lighthouse i sprawdź audyt Serwowanie statycznych zasobów za pomocą skutecznej polityki dotyczącej pamięci podręcznej, aby wyświetlić listę zasobów o krótkim lub średnim czasie życia (TTL). W przypadku każdego wymienionego zasobu zastanów się, czy nie warto zwiększyć wartości TTL. Oto kilka wskazówek:

  • Zasoby statyczne powinny być przechowywane w pamięci podręcznej z długim okresem przechowywania (1 rok).
  • Zasoby dynamiczne powinny być przechowywane w pamięci podręcznej z krótkim czasem życia (3 godziny).

Napraw

Ustaw w główce Cache-Control odpowiednią liczbę sekund w opcji max-age.

Instrukcje:

Łagodna degradacja

Uprzejma degradacja to strategia tymczasowego zmniejszenia funkcjonalności w celu odciążenia systemu. Można to robić na wiele sposobów: na przykład wyświetlać stałą stronę tekstową zamiast pełnej aplikacji, wyłączać wyszukiwanie lub zwracać mniej wyników wyszukiwania albo wyłączać niektóre kosztowne lub nieistotne funkcje. Należy skupić się na usuwaniu funkcji, które można łatwo i bezpiecznie usunąć przy minimalnym wpływie na działalność firmy.

Zaproponuj ulepszenia

Korzystanie z sieci dostarczania treści (CDN)

Udostępnianie zasobów statycznych można przekazać z serwera do sieci dostarczania treści (CDN), co zmniejsza obciążenie.

Podstawową funkcją sieci CDN jest szybkie dostarczanie treści użytkownikom dzięki dużej sieci serwerów znajdujących się blisko użytkowników. Większość usług CDN oferuje jednak dodatkowe funkcje związane ze skutecznością, takie jak kompresja, równoważenie obciążenia i optymalizacja multimediów.

Konfigurowanie sieci CDN

Sieci CDN korzystają na skali, więc prowadzenie własnej sieci CDN rzadko ma sens. Podstawowa konfiguracja sieci CDN jest dość szybka do skonfigurowania (około 30 minut) i polega na zaktualizowaniu rekordów DNS, aby wskazywały sieć CDN.

Optymalizacja wykorzystania CDN

Diagnozuj

Zidentyfikuj zasoby, które nie są dostarczane z CDN (ale powinny być), uruchamiając narzędzie WebPageTest. Na stronie wyników kliknij kwadrat nad opcją „Skuteczne korzystanie z CDN”, aby wyświetlić listę zasobów, które powinny być dostarczane z CDN.