Jak przeprowadzasz testy obciążenia i planowanie wydajności dla stron internetowych?

113

Jest to kanoniczne pytanie dotyczące planowania pojemności stron internetowych.

Związane z:

Jakie są zalecane narzędzia i metody planowania pojemności stron internetowych i aplikacji internetowych?

Proszę opisać różne narzędzia i techniki dla różnych serwerów, frameworków itp., A także najlepsze praktyki dotyczące ogólnie serwerów internetowych.

gWaldo
źródło

Odpowiedzi:

127

Krótka odpowiedź brzmi: nikt oprócz ciebie nie może odpowiedzieć na to pytanie.

Długa odpowiedź brzmi: analiza porównawcza konkretnego obciążenia jest czymś, co musisz podjąć samodzielnie, ponieważ przypomina to pytanie „Jak długi jest kawałek sznurka?”.

Prosta, jednostronicowa strona statyczna mogłaby być hostowana na Pentium Pro 150 i nadal dostarczać tysiące wyświetleń każdego dnia.

Podstawowym podejściem, jakie należy podjąć, aby odpowiedzieć na to pytanie, jest wypróbowanie go i zobaczenie, co się stanie. Istnieje wiele narzędzi, za pomocą których można sztucznie wywierać nacisk na system i sprawdzać, gdzie się zapadnie.

Krótki przegląd tego jest następujący:

  • Umieść swój scenariusz na miejscu
  • Dodaj monitorowanie
  • Dodaj ruch
  • Oceń wyniki
  • Rozwiązanie w oparciu o wyniki
  • Spłucz, powtarzaj, aż będzie wystarczająco szczęśliwy

Umieść swój scenariusz na miejscu

Zasadniczo, aby przetestować niektóre obciążenia, potrzebujesz czegoś do przetestowania. Skonfiguruj środowisko do testowania. Jeśli to możliwe, powinno to być dość dokładne przypuszczenie do twojego sprzętu produkcyjnego, w przeciwnym razie zostaniesz ekstrapolowany.

Skonfiguruj serwery, konta, strony internetowe, przepustowość itp. Nawet jeśli robisz to na maszynach wirtualnych, jest to OK, o ile jesteś przygotowany do skalowania wyników.

Zamierzam więc skonfigurować maszynę wirtualną o średniej mocy (dwa rdzenie, 512 MB pamięci RAM, 4 GB HDD) i zainstalować mój ulubiony moduł równoważenia obciążenia haproxyw Red Hat Linux na maszynie wirtualnej.

Będę również mieć dwa serwery WWW za modułem równoważenia obciążenia, którego użyję do przetestowania modułu równoważenia obciążenia. Te dwa serwery są skonfigurowane identycznie jak moje systemy na żywo.

Dodaj monitorowanie

Będziesz potrzebować kilku wskaźników do monitorowania, więc zmierzę, ile żądań dociera do moich serwerów internetowych i ile żądań mogę wycisnąć na sekundę, zanim użytkownicy zaczną otrzymywać czas odpowiedzi powyżej dwóch sekund.

Zamierzam również monitorować użycie pamięci RAM, procesora i dysku w haproxyinstancji, aby upewnić się, że moduł równoważenia obciążenia może obsłużyć połączenia.

Jak to zrobić, wiele zależy od twoich platform i jest poza zakresem tej odpowiedzi. Konieczne może być przejrzenie plików dziennika serwera WWW, uruchomienie liczników wydajności lub poleganie na zdolności raportowania narzędzia do testów warunków skrajnych.

Kilka rzeczy, które zawsze chcesz monitorować:

  • użycie procesora
  • Wykorzystanie pamięci RAM
  • Użycie dysku
  • Opóźnienie dysku
  • Wykorzystanie sieci

Możesz także spojrzeć na zakleszczenia SQL, czasy wyszukiwania itp. W zależności od tego, co konkretnie testujesz.

Dodaj ruch

To tam rzeczy się bawią. Teraz musisz zasymulować obciążenie testowe. Istnieje wiele narzędzi, które mogą to zrobić, z konfigurowalnymi opcjami:

Wybierz liczbę, dowolną liczbę. Powiedzmy, że zobaczysz, jak system reaguje z 10 000 trafień na minutę. Nie ma znaczenia, którą liczbę wybierzesz, ponieważ będziesz powtarzać ten krok wiele razy, dostosowując tę ​​liczbę w górę lub w dół, aby zobaczyć, jak zareaguje system.

Najlepiej byłoby rozdzielić te 10 000 żądań na wiele klientów / węzłów testujących obciążenie, aby pojedynczy klient nie stał się wąskim gardłem żądań. Na przykład Zdalne testowanie JMeter zapewnia centralny interfejs, z którego można uruchomić kilku klientów ze sterującej maszyny Jmeter.

Naciśnij magiczny przycisk Go i obserwuj, jak twoje serwery WWW topnieją i ulegają awarii.

Oceń wyniki

Więc teraz powróć do swoich danych zebranych w kroku 2. Widzisz, że przy 10 000 równoczesnych połączeniach Twoje urządzenie haproxyprawie nie poci się, ale czas reakcji z dwoma serwerami sieciowymi to dotknięcie ponad pięciu sekund. To nie jest fajne - pamiętaj, że twój czas reakcji zmierza do dwóch sekund. Musimy więc wprowadzić pewne zmiany.

Remediate

Teraz musisz przyspieszyć swoją witrynę ponad dwukrotnie. Więc wiesz, że musisz albo zwiększyć lub zmniejszyć.

Aby zwiększyć skalę, uzyskaj większe serwery internetowe, więcej pamięci RAM, szybsze dyski.

Aby skalować, zdobądź więcej serwerów.

Skorzystaj z danych z kroku 2 i testów, aby podjąć tę decyzję. Na przykład, jeśli zauważyłeś, że opóźnienie dysku było ogromne podczas testowania, wiesz, że musisz zwiększyć skalę i uzyskać szybsze dyski twarde.

Jeśli zauważyłeś, że procesor siedział na 100% podczas testu, być może musisz skalować, aby dodać dodatkowe serwery WWW, aby zmniejszyć presję na istniejące serwery.

Nie ma ogólnej dobrej lub złej odpowiedzi, jest tylko to, co jest dla ciebie odpowiednie. Spróbuj zwiększyć skalę, a jeśli to nie zadziała, zamiast tego skaluj. Lub nie, to zależy od ciebie i trochę myślenia poza schematem.

Powiedzmy, że skalujemy się. Postanowiłem więc sklonować moje dwa serwery sieciowe (są to maszyny wirtualne), a teraz mam cztery serwery internetowe.

Spłucz, powtórz

Zacznij ponownie od kroku 3. Jeśli okaże się, że nie wszystko idzie zgodnie z oczekiwaniami (na przykład podwoiliśmy serwery internetowe, ale czasy odpowiedzi wciąż przekraczają dwie sekundy), sprawdź inne wąskie gardła. Na przykład podwoiłeś serwery WWW, ale nadal masz kiepski serwer bazy danych. Lub sklonowałeś więcej maszyn wirtualnych, ale ponieważ znajdują się one na tym samym hoście fizycznym, osiągnąłeś wyższy poziom rywalizacji o zasoby serwerów.

Następnie możesz użyć tej procedury do przetestowania innych części systemu. Zamiast uderzać w moduł równoważenia obciążenia, spróbuj uderzyć bezpośrednio w serwer WWW lub serwer SQL za pomocą narzędzia do testowania SQL .

Mark Henderson
źródło
1
Jest to doskonałe do testowania obciążenia, ale niewiele mówi o planowaniu wydajności. Kto może napisać o skalowalnej architekturze Google, która została stworzona na początku, lub o alternatywach przy użyciu mniejszej liczby i droższych pudełek.
rleir
10

Planowanie wydajności rozpoczyna się od pomiaru, w tym przypadku czas reakcji w funkcji obciążenia. Gdy poznasz stopień, w jakim programy zwalniają z obciążeniem, co NIE JEST funkcją liniową, możesz wybrać cel czasu odpowiedzi, a następnie dowiedzieć się, jakie zasoby będą potrzebne do osiągnięcia tego celu dla danej ilości obciążenia.

Pomiar wydajności odbywa się zawsze za pomocą jednostek czasu , jak

  • są tym, na czym zależy użytkownikom
  • mogą być skalowane w górę i w dół

Rzeczy takie jak% CPU i IOPS są specyficzne dla systemu, więc używasz ich tylko wtedy, gdy planujesz system i mierzysz go w fazie przedprodukcyjnej, aby działać jako „surogat” dla tego, na czym ci zależy.

davecb
źródło
8

Planowanie pojemności to kłopotliwa bestia. To tyle samo nauki, co sztuki (choć zdecydowanie ciemnej).

Najlepszym przykładem jest podejmowanie świadomych decyzji, a szczęście / szczęście sprzyja ci, gdy rzeczywistość spełnia twoje założenia. Jeśli twoje zdolności potrzebują założeń pasujących do rzeczywistości, wyglądasz jak mistyczny jogin. Niestety, jeśli twoje założenia wykraczają poza rzeczywistość, wydaje się, że masz przekroczenie i nadmierne wydatki. Co więcej, jeśli twoje założenia są poniżej ostatecznej rzeczywistości (lub są w inny sposób niepoprawne), zabraknie Ci zdolności, której potrzebujesz, i będziesz musiał walczyć, aby złagodzić awarie swojej jęczącej infrastruktury, co sprawia, że ​​wyglądasz, jakbyś nie miał kompetencji.

Brak ciśnienia...

Niestety, mroczna sztuka planowania pojemności jest czymś więcej niż można rozsądnie podzielić na pojedynczą odpowiedź na awarię serwera; naprawdę jest to temat godny książek.

Na szczęście istnieje taka książka: „ The Art of Capacity Planning

gWaldo
źródło
5

Aby rozwinąć post Marka Hendersona, piszę to konkretnie do Apache. Aby powtórzyć to, co powiedział: „Krótka odpowiedź brzmi: nikt nie może odpowiedzieć na to pytanie oprócz ciebie”. Tekst tej odpowiedzi został mocno zapożyczony z mojej odpowiedzi na podobne pytanie dotyczące wydajności strony internetowej Drupal .

Konfigurowanie Apache za pomocą Mod_Prefork

Apache jest prawdopodobnie jednym z (jeśli nie najbardziej) dostępnym serwerem WWW. Jest to oprogramowanie typu open source i nadal jest aktywnie utrzymywane. Możesz go uruchomić zarówno w systemie operacyjnym Linux, jak i Windows, ale jest bardziej popularny w świecie Linux / Unix.

Nigdy nie powinieneś używać gotowej konfiguracji Apache. Zawsze musisz dostroić Apache do swojej witryny. Główny plik konfiguracyjny Apache w CentOS znajduje się w /etc/httpd/conf/httpd.conf, a główny plik konfiguracyjny Apache w systemach Ubuntu zwykle znajduje się w /etc/apache2/apache2.conf. Dodatkowe pliki konfiguracyjne są używane do takich rzeczy jak Virtual Hosts .

Podobnie jak wiele programów, Apache jest elastyczny i dostosowany do potrzeb konkretnej witryny. Istnieją różne moduły wieloprzetwarzania, których można skonfigurować w Apache do łączenia się z portem sieciowym oraz przyjmowania i przetwarzania żądań.

Przez większość czasu w domyślnych instalacjach Apache, które są dostarczane z serwerami CentOS i Ubuntu, używany jest MPM „ mod_prefork ”. Zakładając, że używasz mod_prefork (jeśli nie jesteś pewien, jest to bardziej prawdopodobne, ale tylko Ty możesz to ustalić) Oto podstawy jego konfiguracji:

  • Sprawdź maksymalną ilość pamięci, z której ma korzystać Apache.
  • Dokładnie przetestuj swoją witrynę i określ, ile pamięci zużywa każdy proces Apache (używając góry).
  • Podejmij proces Apache, który zużywa najwięcej pamięci, dodaj trochę dla lepszej miary, a następnie podziel pierwszą liczbę (maksymalną ilość pamięci, której ma używać Apache) przez ten nowy numer.
  • Otrzymana liczba powinna być twoja MaxClientsi ServerLimitzmienne.

To z pewnością nie jest ostateczna odpowiedź. Dostrajanie serwera Apache zajmuje dużo czasu i wymaga doświadczenia, aby uzyskać właściwy wynik.

David W.
źródło
1
użycie pamięci oparte wyłącznie na górze jest nieco wadliwe, sprawdź fe stackoverflow.com/questions/7880784/... dodatkowo możesz użyć skryptu python „ps_mem.py” zamiast top dla użycia pamięci, a nawet użyć dołączonych bezpośrednio wartości do procesu pod / proc
Dennis Nolte
1
Cała odpowiedź jest warta dodanej uwagi: „Nigdy nie powinieneś używać gotowej konfiguracji Apache”. Nigdy nie możemy tego wystarczająco podkreślić.
ezra-s
0

Proponuję również porozmawiać z architektami i inżynierami, którzy zaprojektowali / zbudowali aplikacje, aby spróbować zidentyfikować wąskie gardła, pojedyncze punkty awarii i ograniczenia licencyjne.

DuckDNS
źródło