> For the complete documentation index, see [llms.txt](https://kompendium.cloudlets.zone/kompendium/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://kompendium.cloudlets.zone/kompendium/konfiguracja/skalowanie-poziome-i-pionowe.md).

# Skalowanie pionowe i poziome aplikacji web

Elastyczne dostosowywanie przydzielanych zasobów do bieżących obciążeń aplikacji

## Automatyczne skalowanie pionowe

To zdolność do dynamicznego przydziału zasobów serwera (pamięci RAM i mocy procesora) zgodnie z aktualnymi wymaganiami aplikacji, bez konieczności ręcznej interwencji.  Idea jest dość prosta – gdy tylko obciążenie aplikacji rośnie, nasza platforma po prostu udostępnia jej dodatkowe zasoby, a gdy obciążenie spada, platforma automatycznie zmniejsza zasoby. Można to zobaczyć na poniższym filmie.

{% embed url="<https://youtu.be/Moe87x1nR0g>" %}
Zobacz jak Cloudlets.Zone dodaje zasoby, gdy ich potrzeba
{% endembed %}

Skalowanie jest "zaszyte" w naszym kreatorze topologii. Dzięki automatycznemu skalowaniu nigdy nie przepłacasz za niewykorzystane zasoby i oszczędzasz czas, bo gdy raz ustalisz limity skalowania, nie musisz się już tym zajmować. Określając limity skalowania skutecznie określasz budżet, zapobiegając zbyt wysokim rachunkom.&#x20;

{% hint style="info" %}
Jeśli ustalony limit skalowania okaże się zbyt niski do występujących obciążeń, nasza platforma powiadomi Cię o tym poprzez e-mail.
{% endhint %}

Na poniższym obrazku zaznaczony został obszar do zarządzania limitami skalowania. Wystarczy przesunąć suwak lub wpisać liczbę cloudletów. [Cloudlet jest jednostką miary](/kompendium/faq/czym-jest-cloudlet.md) odpowiadającą określonej mocy procesora i wielkości pamięci. Na platformie [Cloudlets.Zone](https://cloudlets.zone) mamy dwa rodzaje cloudletów - dynamiczne i zarezerwowane. Dynamiczne są dodawane i oddawane zależnie od obciążeń. Zarezerwowane są przypisywane na stałe. Maksymalny limit skalowania wynosi 256 cloudletów, co jest odpowiednikiem: 32 GiB RAM i 102.4 GHz czasu procesora. Co ważne, limit cloudletów ustawić można dla każdego kontenera w ramach każdej warstwy. Daje to całkiem spore możliwość skalowania środowisk.

![Skalowanie PIONOWE, czyli moc procesora i pamięć RAM](https://1972667440-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MWnpSFLdAw8lYDKrSEr%2F-MgyPg6F04rO_rygQy1d%2F-Mgy_8u3jdHbeIdletps%2FSkalowanie%20pionowe%20-%20Cloudlets.Zone%C2%97.png?alt=media\&token=9bbcb000-cce5-48e7-a219-40ab35172243)

{% hint style="info" %}
**Skalowanie pionowe** ma zastosowanie dla dowolnego typu instancji w środowisku, tj. *serwera aplikacji, bazy danych, load balancera, kontenera Dockera, Elastycznego VPS,* *instancji pamięci podręcznej* i *węzła kompilacji*.
{% endhint %}

![Ostrzeżenie o konieczności restartowania węzłów po zmianie limitu skalowania](https://1972667440-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MWnpSFLdAw8lYDKrSEr%2F-Mgz4FCsHF3_JXeBKKYZ%2F-Mgz4jpu2QBAN4U42rL3%2FRestart%20przy%20zmianie%20limit%C3%B3w%20skalowania%20PIONOWEGO.png?alt=media\&token=331bdd56-70af-4d1a-a7ae-47e257de1685)

{% hint style="warning" %}
**UWAGA**, w przypadku zmiany limitu skalowania (tj. liczby dynamicznych cloudletów) dla istniejących węzłów *serwera aplikacji*, *bazy danych* lub *pamięci podręcznej*, odpowiednia warstwa zostanie zrestartowana. Odpowiednie ostrzeżenie zostanie wyświetlone bezpośrednio w kreatorze topologii.
{% endhint %}

Dzięki automatycznie zbieranym statystykom możesz sprawdzić poziom zużycia za ostatni miesiąc i zgodnie z nim ustawić ilość zasobów. A jeśli Twoja aplikacja stanie się bardzo popularna, a pojemność pojedynczego kontenera nie wystarczy, możesz ją skalować w poziomie, ręcznie zwiększając liczbę węzłów lub skonfiguruj zestaw wyzwalaczy do automatycznego skalowania poziomego.

## Ręczne oraz automatyczne skalowanie poziome

Jeśli maksymalny limit skalowania kontenera wynoszący 256 cloudletów nie jest już wystarczający, wówczas można skorzystać z funkcji zwielokrotniania liczby kontenerów.&#x20;

Proces ręcznego skalowania jest dość prosty. Wystarczy w kreatorze topologii środowiska użyć odpowiednich przycisków „ **+** ” i „ **-** ” lub wpisać żądaną liczbę w centralnym panelu. Można także użyć suwaka, który pojawia się automatycznie po dokonaniu dowolnej regulacji.

![](https://1972667440-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MWnpSFLdAw8lYDKrSEr%2F-Mgz8b0B0kuKQ62mlKr6%2F-Mgz9GwYkjb4k4DADO_D%2FSkalowanie%20POZIOME%20na%20CloudletsZone.png?alt=media\&token=fbe999da-3770-4e87-b30a-b09546d45d22)

Należy także określić tryb skalowania jako stanowy (*Stateful*) lub bezstanowy (*Stateless*).

#### Tryby skalowania

Na platformie Cloudlets.Zone można wybrać preferowany tryb skalowania zarówno dla nowych jak i istniejących środowisk:

* **Bezstanowy** - jednocześnie tworzy wszystkie nowe węzły z podstawowego szablonu obrazu
* **Stanowy** - sekwencyjnie kopiuje system plików kontenera głównego do nowych węzłów

![Skalowanie poziome - bezstanowe i stanowe](https://1972667440-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MWnpSFLdAw8lYDKrSEr%2F-MhEJQggGgoKPJi4R_SJ%2F-MhEOEqJPWCUemerDoDF%2FSkalowanie%20poziome%20na%20CloudletsZone.png?alt=media\&token=e8fbdf8d-e474-4082-8dc9-c5b9b4583f1f)

Pierwsza opcja jest szybsza, a druga automatycznie kopiuje wszystkie niestandardowe konfiguracje. W ten sposób podczas początkowego tworzenia warstwy wszystkie węzły są tworzone jednocześnie, aby przyspieszyć proces (nawet w trybie **stanowym**, ponieważ nie zastosowano jeszcze dostosowywania). Korzystając z trybu **bezstanowego**, należy pamiętać o braku następujących funkcji w nowo utworzonych węzłach w warstwie:

* istniejące konteksty projektu nie zostaną przeniesione
* certyfikaty i konfiguracje SSL nie zostaną skopiowane
* niestandardowe montowania zostaną przeniesione tylko wtedy, gdy skonfigurowany jest odpowiedni wolumin
* dodatki zainstalowane na warstwie nie będą dostępne

{% hint style="info" %}
Przesyłanie niestandardowych plików w trybie **bezstanowym** można wykonać ręcznie lub skonfigurować za pomocą automatyzacji [Cloud Scripting](https://docs.cloudscripting.com/) (np. za pomocą zdarzeń *onBefore-* i *onAfterScaleOut* ).
{% endhint %}

Dlatego na naszej platforma zalecamy i domyślnie stosujemy tryb skalowania **stanowego** dla *load balancera*, *serwera aplikacji* i V*PS'ów* . W razie potrzeby możesz ręcznie przedefiniować tryb skalowania dla swoich węzłów w dowolnym momencie za pomocą kreatora topologii.

### Automatyczne skalowanie poziome

Automatyczne skalowanie poziome to zwielokrotnianie liczby kontenerów w warstwie pod wpływem zmieniającego się obciążenia. Instalacje klastrowe dostępne na naszym marketplace, mają od razu zdefiniowane podstawowe reguły skalowania poziomego, tzw. wyzwalacze.&#x20;

{% embed url="<https://youtu.be/UMlIFuQRZoU>" %}
Zobacz jak działa skalowanie poziome
{% endembed %}

{% hint style="info" %}
Ten rodzaj skalowania w połączeniu z regułą anti-affinity (antypowinowactwa), czyli zasadą rozmieszczania kolejnych kontenerów na różnych serwerach, daje coś jeszcze. Otóż, środowisko z dwoma lub więcej kontenerami w każdej warstwie, staje się również odporne na awarie pojedynczego serwera (High Availability).
{% endhint %}

![](https://1972667440-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MWnpSFLdAw8lYDKrSEr%2F-MhEcBO8Hrcgbt4kA9Bh%2F-MhEcvKJhPfz8WtJpaXV%2Fregu%C5%82a%20anti-affinity%20na%20CloudletsZone.png?alt=media\&token=dbf9a227-2423-4635-a29f-6e83d393b1e7)

#### Wyzwalacze do automatycznego skalowania

Zautomatyzowanie skalowania poziomego sprowadza się do ustawienia wyzwalaczy. Aby ustawić wyzwalacze, wykonaj następujące czynności:

1.Kliknij przycisk **Ustawienia** dla wymaganego środowiska.

![](https://1972667440-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MWnpSFLdAw8lYDKrSEr%2F-MhEo3dcNt5QbpNkzN7m%2F-MhEousOSGWDY0GsU-pl%2Fustawienia%20wyzwalaczy.png?alt=media\&token=ce6e09dc-084f-45f3-8f57-d7d1e5fa6089)

2\.  W otwartej zakładce przejdź do **Automatyczne skalowanie poziome**, gdzie możesz zobaczyć listę wyzwalaczy skalowania skonfigurowanych dla bieżącego środowiska (o ile istnieją).

Użyj przycisków na panelu narzędzi, aby zarządzać automatycznym skalowaniem poziomym dla środowiska:

* **Dodaj** - tworzy nowy wyzwalacz
* **Edytuj** - dostosowuje istniejący wyzwalacz
* **Usuń** - usuwa niepotrzebny wyzwalacz
* **Odśwież** - aktualizuje wyświetlaną listę wyzwalaczy skalowania

3\. Kliknij **Dodaj,** aby kontynuować.&#x20;

![](https://1972667440-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MWnpSFLdAw8lYDKrSEr%2F-MhEpA3J0T--i7DXDwiX%2F-MhFJgmENC50_eq_E9jq%2Fobraz.png?alt=media\&token=ecf51723-8879-4882-b496-5d3e185279ae)

4\. Wybierz wymaganą warstwę środowiska z listy rozwijanej, a następnie typ zasobu do monitorowania, używając graficznych zakładek dla: *CPU*, *Pamięci*, *Sieci*, *Dyskowego I/O &* *IOPS* .

![Parametryzacja wyzwalaczy skalowania poziomego - liczby kontenerów](https://1972667440-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MWnpSFLdAw8lYDKrSEr%2F-MhEpA3J0T--i7DXDwiX%2F-MhFLlmxEIgbf8idDmlu%2Fwyzwalacze%20skalowania%20poziomego%20-%20CloudletsZone.png?alt=media\&token=ea7a4a02-cfbe-45e2-928a-1b449fd1ede9)

3\. Każdy wyzwalacz ma warunki **Dodaj** i **Usuń węzły**, które można włączyć za pomocą odpowiednich pól wyboru tuż przed tytułem.

* **Gdy obciążenie jest większe (mniejsze) niż** - górna (dolna) granica w *procentach* dla średniego obciążenia (tj. aktywuje wyzwalacz w przypadku przekroczenia)
* **Dla co najmniej** - liczba *minut,* dla których obliczane jest średnie zużycie (do jednej godziny z krokiem 5 minut, tj. *1* , *5* , *10* , *15* , itd.)
* **Skaluj na zew. / do wew.** - maksymalna (minimalna) liczba *węzłów* dla warstwy, którą można skonfigurować dzięki automatycznemu skalowaniu w poziomie
* **Skaluj według** - *liczba* węzłów, które mają zostać dodane/usunięte jednocześnie po wykonaniu wyzwalacza

{% hint style="info" %}
**Podpowiedzi**

* żądaną wartość można określić za pomocą odpowiednich suwaków na wykresie
* wartość *100%* automatycznie wyłącza wyzwalacz ***Dodaj węzły**, a*  *0%* - wyzwalacz ***Usuń węzły***
* minimalna dozwolona różnica między warunkami ***dodawania*** i ***usuwania węzłów*** to *20%*
* jednostka *Mbps* może być użyta dla **Sieci** zamiennie dla wartości *procentowej*
* zalecamy ustawienie średniego obciążenia wyzwalacza ***Dodaj węzły*** powyżej progu *50%,* aby uniknąć niepotrzebnego skalowania (tj. zmarnowanych zasobów = środków)
  {% endhint %}

&#x20;Poniżej wynik ustawienia wyzwalaczy skalowania poziomego dla CPU i Pamięci RAM.

![](https://1972667440-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MWnpSFLdAw8lYDKrSEr%2F-MhFMYZIL1YmKEMPctOJ%2F-MhFN8AZspu7xLe8nb8t%2Fobraz.png?alt=media\&token=0ca93a5b-ca66-4204-9d16-2604257b3563)

{% hint style="info" %}
Platforma Cloudlets.Zone, co minutę analizuje średnie zużycie zasobów (dla liczby minut określonej w wyzwalaczu), aby zdecydować, czy wymagana jest korekta liczby węzłów. Co ważne, statystyki analizowane są dla całej warstwy, więc jeśli są trzy węzły obciążone odpowiednio w 20%, 50% i 20%, obliczona wartość średnia wynosi 30%.&#x20;
{% endhint %}

{% hint style="warning" %}
Podczas konfigurowania wyzwalacza zalecamy uwzględnienie **trybu skalowania** warstwy. Przykładowo, należy ustawić niższy procent wyzwalania dla ***Dodaj węzły*** w trybie *stanowym*, ponieważ klonowanie zawartości wymaga trochę czasu (szczególnie w przypadku kontenerów z dużą ilością danych) i można osiągnąć limit zasobów przed utworzeniem nowego węzła.
{% endhint %}

4\. Domyślnie będziesz otrzymywał powiadomienia e-mail o aktywności wyzwalacza automatycznego. W razie potrzeby powiadomienia można wyłączyć odznaczając - **Wyślij powiadomienia e-mail** .

#### Historia aktywności wyzwalaczy

W zakładce **Automatyczne skalowanie poziome**, oprócz ustawień, można także przeglądać historię aktywności wyzwalaczy skalowania poziomego.&#x20;

W poniższym przykładzie zastosowano wysokie obciążenie 3 razy przez 3 minut (zobacz statystyki użycia CPU na poniższym obrazku) na serwerze ze skonfigurowanymi następującymi wyzwalaczami:

![](https://1972667440-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MWnpSFLdAw8lYDKrSEr%2F-MhIBwwCg-ZtAEatbOIp%2F-MhIM4gIa5YGMgzT6WT2%2Fobraz.png?alt=media\&token=63877d30-d6ea-49c9-a207-94a8c331ff2a)

* ***dodaj węzeł,*** gdy średnie obciążenie CPU przekraczy 70% przez co najmniej 1 minutę
* ***usuń węzeł,*** gdy średnie obciążenie CPU jest mniejsze niż 20% przez co najmniej 1 minutę

![](https://1972667440-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MWnpSFLdAw8lYDKrSEr%2F-MhIMA1fqv-Jj7R7Utjk%2F-MhIdfxXp7aBNVjgb3dk%2Fobraz.png?alt=media\&token=be0a79c6-b03c-439e-af6d-7f88525142f9)

Zobaczmy teraz zachowanie automatycznego skalowania w poziomie:

A. Przejdź do **Ustawienia > Automatyczne skalowanie poziome > Historia**.

![](https://1972667440-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MWnpSFLdAw8lYDKrSEr%2F-MhIMA1fqv-Jj7R7Utjk%2F-MhIbNNZm1TXLXwKBi1u%2FHistoria-aktywno%C5%9Bci-wyzwalaczy.png?alt=media\&token=dfe2d28d-301d-4063-b986-7e63a125d859)

B. W wykazie podane są następujące dane:

* **Data** i godzina wykonania wyzwalacza
* **Wykonana akcja** (*Dodaj* lub *usuń węzły*)
* Typ **węzłów,** do których zastosowano skalowanie
* **Informacje** o warunku wykonania wyzwalacza

![](https://1972667440-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MWnpSFLdAw8lYDKrSEr%2F-MhIMA1fqv-Jj7R7Utjk%2F-MhIcQRP599Gd-JsoLZR%2Fprzegl%C4%85danie-historii-aktywno%C5%9Bci-wyzwalaczy.png?alt=media\&token=8c8fd677-278c-47e5-bf0e-e268f39ea570)

Dodatkowo po najechaniu na dany rekord można dodatkowo sprawdzić **Loading Value** (zużycie zasobów w momencie wykonania) oraz **Liczba węzłów** (wynikową liczbę węzłów).

Wyzwalacze ***Dodaj węzły*** / ***Usuń węzły*** są niezależne, więc warunek usuwania (średnie obciążenie mniejsze niż 20% przez co najmniej 1 minutę) nie jest resetowany i będzie utrzymany nawet po dodaniu nowego węzła. Takie podejście zapewnia szybsze wykrywanie wystarczającego średniego obciążenia w określonym przedziale.&#x20;

{% hint style="warning" %}
W produkcyjnych zastosowaniach, zaleca się zastosowanie znacząco różnych parametrów skalowania *w górę* i *w dół* oraz dłuższych przedziałów czasowych, aby uniknąć częstych zmian topologii.
{% endhint %}

Tak wygląda konfiguracja automatycznego skalowania poziomego na [Cloudlets.Zone](https://cloudlets.zone), która zapewnia optymalną wydajność aplikacjom i gwarantuje gotowość do przyjęcia bardzo dużych obciążeń.

<figure><img src="https://1972667440-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MWnpSFLdAw8lYDKrSEr%2Fuploads%2FI7Dg7BaG8ZelTeayovPJ%2FChmura%20(4).png?alt=media&amp;token=f8fe7719-9dcc-409a-9749-80824302dc5e" alt=""><figcaption></figcaption></figure>

{% embed url="<https://cloudlets.zone/rejestracja/?utm_campaign=jitsi&utm_medium=kompendium&utm_source=kompendium>" %}
