Testy Wordpress i autoscale dla Frontendu - cz.4

Dotychczasowo zaprojektowaliśmy infrasturukturę składającą się z 3 instancji.

  • VM -> DB - instancja z bazą danych
  • VM -> Master WP - backend dla CopyWriterów i developerów
  • VM -> Frontend - dla wszystkich publicznych użytkowników

Obecnie zadaniem będzie zaprojektowanie systemu, który stworzy replikę Frontendu zapopiegającą przeciążeniu serwera. Jeśli nagle Twój ruch na WWW zwiększy się a Twój administrator będzie na urlopie ... Zautomatyzujmy proces.

Wykorzystany w tym celu narzędzie Azure Virtual Machine scale set.

Proponuje dla testów najpierw zainstalować 2 pakiety:

sudo apt-get install -y stress stress-ng htop

Wykonaj polecenia na instancji Frontend, ma to na celu usunięcia danych "osobistych" maszyny (wiecej):

sudo waagent -deprovision

Następnie robimy Capture VMki Frontendu. Przypominam, instancja zostanie zawieszona i zablokowana bez możliwości jej uruchomienia po utworzonym Capture.

56_880689

 

Nastepnie do wszystkich kolejnych kroków będziemy korzystać z tego obrazu.


Test #1a - Standard B1s

Za pomocą loadimpact.com testuje stronę z podstawowymi URLami.

Maszyna: Standard B1s (1 vcpus, 1 GB memory), Disk Premium SSD (IOPS limit 120)

Dla 100 virtual usersów w ciągu 10 minut.

00_528050

Już przy tej instancji widać granicę ~75 userów których możemy obsłużyć jednocześnie.

Test #1b - Standard DS1 v2

Za pomocą loadimpact.com testuje stronę z podstawowymi URLami.

Maszyna: Standard DS1 v2 (1 vcpus, 3.5 GB memory), Disk Premium SSD (IOPS limit 120)

Dla 100 virtual usersów w ciągu 10 minut.

57_737862

Ta sama sytuacja. Więcej RAMu nie pomaga. Sytuacja podobna wytrzymuje około ~75 userów.

Test #1c - Standard D2s v3

Za pomocą loadimpact.com testuje stronę z podstawowymi URLami.

Maszyna: Standard D2s v2 (2 vcpus, 8 GB memory), Disk Premium SSD (IOPS limit 120)

Dla 100 virtual usersów w ciągu 10 minut.

44_669226

Wynik minimalnie lepszy. Około ~80 userów granica końca działania płynnego.

Podsumowanie testów 1:

Niezależnie od maszyny VM i jej parametrów nagłe obiążenie nie miało dużego wpływu na ilość obsługiwanych jednoczesnych połaczeń. Różnicę widać w średnim czasie Response:

  • Standard B1s (1 vcpus, 1 GB memory) #1 -> 1.19s
  • Standard DS1 v2 (1 vcpus, 3.5 GB memory) -> 1.04s
  • Standard D2s v2 (2 vcpus, 8 GB memory) -> 0.99s
  • ScaleSets - 1VM x Standard DS1 v2 (1 vcpus, 3.5 GB memory) -> 0.96s

Create virtual machine scale set

Po utworzeniu obrazu (image) systemu, tworzymy pierwszy Scale Set. Tworzymy według poniższego schematu. Moim rodzajem maszyny będzie do testów: Standard DS1 v2 (2 vcpus, 8 GB memory), Disk Premium SSD (IOPS limit 120)

11_979515

W moim przypadku Load balancing dzieli się według typu:

RESOURCES
OPTIMAL FOR
SUPPORTED PROTOCOLS
SSL OFFLOADING
RDP TO INSTANCE
Application Gateway
Web-based traffic
HTTP/HTTPS/WebSocket
Supported
Not supported
Load balancer
Stream-based traffic
Any
Not supported
Supported

 

Wybór to: Load balancer

36_866331

Przypominam, jeżeli używałeś domen, zmień domenę aby kierowała od tej pory na Scale Set.

45_928362

Po utworzeniu - skalujemy manualnie według schematu:

15_260821

Test #2a - 1 instancja

Uruchamiamy set z 1 instancją. Wynik:

57_789367

Test #2a - 2 instancje

Uruchamiamy set składający się z 2 instancji. Wynik:

31_791086

Podsumowanie testów 2:

Ustawienie maszyn w setach pozwala na przyśpieszenie i zwiększenie ruchu:

  • NO ScaleSet -Standard DS1 v2 (1 vcpus, 3.5 GB memory) -> 1.04s
  • ScaleSets - 1VM x Standard DS1 v2 (1 vcpus, 3.5 GB memory) -> 1.06s
  • ScaleSets - 2VM x Standard DS1 v2 (1 vcpus, 3.5 GB memory) -> 0.32s
  • ScaleSets - 4VM x Standard DS1 v2 (1 vcpus, 3.5 GB memory) -> 0.26s

Widać znaczącą różnicę w przyśpieszeniu.

Przypominam o możliwościach stresowaniu usług:

Zalogujmy siędo SSH Frontendu serwera i wykonajmu pierwszy test:

stress-ng --cpu 4 --io 2 --vm 1 --vm-bytes 1G --timeout 5m --metrics-brief

Stres dla 4 CPU, 2 IO i 1 VM z użyciem 1G RAMU.