> 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

## 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](/files/-Mgy_8u3jdHbeIdletps)

{% 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](/files/-Mgz4jpu2QBAN4U42rL3)

{% 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.

![](/files/-Mgz9GwYkjb4k4DADO_D)

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](/files/-MhEOEqJPWCUemerDoDF)

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 %}

![](/files/-MhEcvKJhPfz8WtJpaXV)

#### 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.

![](/files/-MhEousOSGWDY0GsU-pl)

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;

![](/files/-MhFJgmENC50_eq_E9jq)

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](/files/-MhFLlmxEIgbf8idDmlu)

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.

![](/files/-MhFN8AZspu7xLe8nb8t)

{% 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:

![](/files/-MhIM4gIa5YGMgzT6WT2)

* ***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ę

![](/files/-MhIdfxXp7aBNVjgb3dk)

Zobaczmy teraz zachowanie automatycznego skalowania w poziomie:

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

![](/files/-MhIbNNZm1TXLXwKBi1u)

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

![](/files/-MhIcQRP599Gd-JsoLZR)

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="/files/UHS4NxSH6kWE1hdp1BiY" alt=""><figcaption></figcaption></figure>

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