Przedstawiamy natywną usługę skalowania predykcyjnego za pomocą Amazon EC2 Auto Scaling

20 sierpnia 2021

Amazon EC2 Auto Scaling umożliwia klientom wykorzystanie zalet elastyczności AWS poprzez automatyczne uruchamianie i zamykanie instancji w celu dopasowania do zapotrzebowania aplikacji.

Dziś twórcy z niemałą ekscytacją opowiedzą Ci o skalowaniu predykcyjnym. Jest to nowa polityka automatycznego skalowania EC2, która przewiduje wzrost popytu i proaktywnie zwiększa pojemność z odpowiednim wyprzedzeniem, co skutkuje wyższą dostępnością. Dzięki skalowaniu predykcyjnemu można uniknąć konieczności nadmiernego przydzielania mocy, co skutkuje niższymi kosztami Amazon EC2. Skalowanie predykcyjne jest dostępne dzięki planom automatycznego skalowania AWS od 2018 roku, ale możesz używać go także bezpośrednio jako konfiguracji grupy automatycznego skalowania EC2 wraz z innymi zasadami skalowania. W tym artykule zostanie Ci zaprezentowany przegląd skalowania predykcyjnego oraz scenariusz, w przypadku którego ta funkcja może okazać się pomocna. Autorzy przeprowadzą Cię również przez kolejne etapy konfigurowania zasad skalowania predykcyjnego dla grupy automatycznego skalowania EC2.

 

Przegląd produktów

EC2 Auto Scaling oferuje pakiet zasad dynamicznego skalowania, w tym śledzenie celu, proste skalowanie oraz skalowanie krok po kroku. Zasady skalowania to zdefiniowane przez klienta wytyczne dotyczące tego, kiedy należy dodawać lub usuwać instancje w grupie automatycznego skalowania na podstawie wartości określonej metryki Amazon CloudWatch, która reprezentuje obciążenie aplikacji. EC2 Auto Scaling nieustannie monitoruje metrykę i reaguje zgodnie z zasadami zdefiniowanymi przez klienta, aby uruchomić dodatkową liczbę instancji.

Biorąc pod uwagę z natury reaktywny charakter zasad skalowania dynamicznego, stosowanie skalowania predykcyjnego oprócz skalowania dynamicznego może okazać się przydatne w sytuacji, gdy:

  • Twoje zapotrzebowanie na aplikację zmienia się gwałtownie, ale z powtarzającym się wzorcem. Na przykład cotygodniowy wzrost zapotrzebowania na moc, kiedy firma wznawia działalność po weekendach;
  • Twoje instancje aplikacji wymagają dużo czasu na zainicjowanie.

Od teraz możesz w prosty sposób skonfigurować skalowanie predykcyjne wraz z istniejącymi zasadami skalowania dynamicznego, aby zwiększyć pojemność przed przewidywanym wzrostem zapotrzebowania. Nie musisz nadmiernie aprowizować grupy automatycznego skalowania ani tracić czasu na ręczne konfigurowanie zaplanowanego skalowania dla rutynowych wzorców zapotrzebowania. Skalowanie predykcyjne wykorzystuje uczenie maszynowe do przewidywania wymagań dotyczących pojemności na podstawie historycznego użycia i stale uczy się nowych danych, aby prognozy stawały się coraz dokładniejsze.

 

Wprowadzenie do parametrów wydajności automatycznego skalowania EC2

Kiedy uruchomisz grupę automatycznego skalowania, definiujesz minimalną, maksymalną i pożądaną pojemność, wyrażoną jako liczba instancji EC2. Minimalna i maksymalna pojemność to zdefiniowane przez klienta dolne i górne granice grupy automatycznego skalowania. Żądana pojemność to rzeczywista pojemność grupy automatycznego skalowania, która jest stale kalibrowana przez EC2 Auto Scaling. Dzięki skalowaniu predykcyjnemu AWS wprowadza nowy parametr o nazwie przewidywana pojemność.

Każdego dnia skalowanie predykcyjne prognozuje wydajność godzinową, potrzebną na każde z następnych 48 godzin. Następnie, na początku każdej godziny, wartość przewidywanej przepustowości jest ustawiana na przewidywaną wydajność, potrzebną na konkretną godzinę. W dowolnym momencie, podczas korzystania ze skalowania predykcyjnego dla grupy automatycznego skalowania, rozgrywają się 2 scenariusze.

  • Jeśli rzeczywista pojemność jest niższa niż przewidywana, automatyczne skalowanie EC2 skaluje grupę automatycznego skalowania, tak aby żądana wydajność była równa przewidywanej wydajności.
  • Jeśli rzeczywista pojemność jest już wyższa niż przewidywana, automatyczne skalowanie EC2 nie jest skalowane w grupie automatycznego skalowania.
  • Jeśli przewidywana pojemność wykracza poza zdefiniowany zakres minimalnej i maksymalnej pojemności, automatyczne skalowanie EC2 nie narusza tych limitów.

Zauważ, że zasady skalowania predykcyjnego nie są przeznaczone do samodzielnego użytku, ponieważ nie wyzwalają zdarzeń skalowania do wewnątrz. Wyzwalają one tylko zdarzenia skalowania w oczekiwaniu na przewidziany popyt. Dlatego też należy używać skalowania predykcyjnego z inną zasadą dynamicznego skalowania, dostarczaną przez AWS własną, niestandardową automatyzację skalowania. Skalowanie dynamiczne zwiększa pojemność, gdy nie jest już potrzebne. Każda zasada określa swoją wartość pojemności niezależnie, a żądana pojemność jest ustawiana na wyższą wartość. Gwarantuje to skalowanie aplikacji, gdy zapotrzebowanie w czasie rzeczywistym jest wyższe niż zapotrzebowanie przewidywane.

Zasady skalowania predykcyjnego działają w dwóch trybach: Tylko prognoza lub Prognoza i Skalowanie. Tryb Tylko Prognoza pozwala Ci na sprawdzenie, czy skalowanie predykcyjne dokładnie przewiduje rutynowe zapotrzebowanie godzinowe. To świetny sposób na rozpoczęcie pracy ze skalowaniem predykcyjnym bez wpływu na bieżące zachowanie skalowania. Oprócz tego możesz utworzyć wiele zasad w trybie Tylko Prognoza, aby porównać różne konfiguracje, takie jak prognozowanie na podstawie różnych metryk. Po zweryfikowaniu prognoz wymagana jest prosta aktualizacja, aby przełączyć się do trybu prognozowania i skalowania dla konfiguracji zasad, która najlepiej pasuje do grupy automatycznego skalowania. Teraz, gdy znasz już tę nową funkcję, pora przejść przez kolejne kroki, aby ją skonfigurować.

 

Pierwsze kroki z Predictive Scaling

W tej części artykułu autorzy przeprowadzą Cię przez kolejne kroki, aby dodać zasady skalowania predykcyjnego do grupy automatycznego skalowania. Najpierw warto jednak spojrzeć, w jaki sposób automatyczne skalowanie reaguje na wzrost popytu. Aby to zilustrować, twórcy stworzyli symulację obciążenia, której możesz użyć do śledzenia, wdrażając przykładowy stos AWS CloudFormation Stack na swoim koncie. Ten przykład wdraża dwie grupy automatycznego skalowania. Pierwsza grupa automatycznego skalowania służy do uruchamiania przykładowej aplikacji i jest skonfigurowana za pomocą Application Load Balancer (ALB). Druga grupa automatycznego skalowania służy do generowania powtarzających się żądań do aplikacji działającej w pierwszej grupie automatycznego skalowania za pośrednictwem ALB. W tym przykładzie zastosowano zasadę śledzenia celu, aby utrzymać wykorzystanie procesora na poziomie 25%, aby następnie automatycznie skalować pierwszą grupę automatycznego skalowania, na której działa aplikacja.

Poniższy wykres ilustruje, jak dynamiczne skalowanie dostosowuje wydajność (niebieska linia) przy zmieniającym się obciążeniu (czerwona linia). Ciebie powinna interesować metryka ALB Response Time (zielona linia). Reprezentuje czas potrzebny aplikacji do przetworzenia i odpowiedzi na przychodzące żądania z ALB. Jest to dobra reprezentacja opóźnienia obserwowanego przez końcowych użytkowników aplikacji. Co więcej, każdy wzrost zaobserwowany w tym wskaźniku (zielona linia) powoduje złe doświadczenia użytkownika.

predictive scaling

Tak jak mogłeś już wcześniej zauważyć, pojawiają się tutaj powtarzające się okresy zwiększonych żądań (czerwona linia) o różnej prędkości narastania. Na przykład od godziny 16:00 do 18:00 UTC, przed ustabilizowaniem, wzrost obciążenia jest stosunkowo bardziej stopniowy niż ten obserwowany dla zakresu czasu od 8:00 do 10:00 UTC. Metryka ALB Response Time (zielona linia) pozostaje niska w poprzednim okresie stopniowego przyspieszania. Jednak w przypadku tego ostatniego gwałtownego wzrostu, podczas gdy automatyczne skalowanie dodaje wymaganą liczbę wystąpień (linia niebieska), można zaobserwować gwałtowny wzrost czasu odpowiedzi.

Predictive Scaling

Na poprzednim paragrafie możesz zauważyć, że czas odpowiedzi wzrasta do 35 sekund w ciągu pierwszych 5 minut godziny, po czym spada do poziomu poniżej sekundy. Ze względu na to, że skalowanie dynamiczne posiada charakter reaktywny, nie nadąża za obserwowaną tutaj gwałtowną zmianą popytu. Może to być dopuszczalne w przypadku aplikacji, które nie są wrażliwe na tego rodzaju opóźnienia. W przypadku innych skalowanie predykcyjne pomaga lepiej zarządzać takimi scenariuszami poprzez aktywne ustawienie bazowej zdolności produkcyjnej na początku godziny.

Dalsza część artykułu przeprowadzi Cię przez kolejne kroki, aby wiedzieć, jak skonfigurować zasady skalowania predykcyjnego. Miej na uwadze, że skalowanie predykcyjne wymaga co najmniej 24 godzin danych o obciążeniu, aby możliwe było wygenerowanie prognoz. Jeśli używasz poprzedniego przykładu, pozwól mu działać przez 24 godziny, aby wygenerować dane obciążenia.

 

Konfigurowanie zasad skalowania predykcyjnego w trybie Tylko Prognoza.

Po pierwsze skonfiguruj grupę automatycznego skalowania z zasadami skalowania predykcyjnego w trybie Tylko Prognoza, by móc przejrzeć wyniki prognozy oraz dostosować dowolne parametry, aby dokładniej odzwierciedlały one pożądane zachowanie.

Aby to zrobić, utwórz plik konfiguracji skalowania, w którym zdefiniujesz metryki, wartość docelową i tryb skalowania predykcyjnego dla zasad. Poniższy przykład generuje prognozy na podstawie wykorzystania procesora CPU, przy czym każda instancja obsługuje 25% średniego godzinowego wykorzystania procesora dla grupy Automatyczne skalowanie. Możesz dalej dostosowywać te zasady w zależności od potrzeb Twojego obciążenia.

cat <<EoF > predictive-scaling-policy-cpu.json
{
    "MetricSpecifications": [
        {
            "TargetValue": 25,
            "PredefinedMetricPairSpecification": {
                "PredefinedMetricType": "ASGCPUUtilization"
            }
        }
    ],
    "Mode": "ForecastAndScale"
}
EoF

Po utworzeniu pliku konfiguracyjnego możesz uruchomić następujące polecenie, aby dodać zasady skalowania predykcyjnego dla grupy Automatycznego skalowania.

aws autoscaling put-scaling-policy \
    --auto-scaling-group-name "Example Application Auto Scaling Group" \
    --policy-name "CPUUtilizationpolicy" \
    --policy-type "PredictiveScaling" \
    --predictive-scaling-configuration file://predictive-scaling-policy-cpu.json

Przeglądanie prognoz Predictive Scaling

Wraz z właściwym wdrożeniem zasad skalowania i 24-godzinnych danych o obciążaniu, możesz teraz używać prognoz skalowania predykcyjnego interfejsu API do przeglądania prognozowanego obciążenia i przewidywanej pojemności dla grupy Automatyczne skalowanie. Możesz również użyć konsoli do przeglądania prognoz, przechodząc do konsoli Amazon EC2, klikając opcję Grupy Automatycznego Skalowania, wybierając grupę automatycznego skalowania, którą skonfigurowałeś ze skalowaniem predykcyjnym i wyświetlając zasady skalowania predykcyjnego znajdujące się w sekcji Automatyczne skalowanie sekcji widoku szczegółów grupy Autoskalowanie. W szczegółach zasad wykres przedstawia LoadForecast i CapacityForecast, pokazując prognozy na następne 48 godzin, oprócz poprzednich prognoz i rzeczywistej średniej liczby wystąpień. Poniższy zrzut ekranu przedstawia prognozy dla zasady zastosowanej właśnie do grupy Autoskalowanie. Pomarańczowa linia przedstawia rzeczywiste wartości, niebieska przedstawia prognozę historyczną, podczas gdy zielona linia reprezentuje prognozę na następne 2 dni.

Predictive Scaling

Górny wykres przedstawia prognozowane obciążenie w stosunku do rzeczywistego obserwowanego obciążenia. Ze względu na to, że zasady skalowania opierają swoje prognozy na wykorzystaniu procesora przez grupę autoskalowania, prognoza obciążenia odzwierciedla całkowite prognozowane obciążenie procesora, które grupa autoskalowania musi obsłużyć co godzinę. Dolny wykres przedstawia odpowiednią prognozę wydajności w stosunku do rzeczywistej. Jak możesz zauważyć, prognoza z czasem staje się coraz dokładniejsza. Skalowanie predykcyjne nieustannie uczy się wzorca i poprawia dokładność prognozy, ponieważ uzyskuje więcej punktów danych do prognozowania.

Dla tego przykładu zasady skalowania predykcyjnego obliczają pojemność w taki sposób, że wystąpienia w grupie automatycznego skalowania zużywają średnio 25% obciążenia procesora przez każdą godzinę. Skalowanie predykcyjne udostępnia również trzy inne wstępnie zdefiniowane konfiguracje metryk, które ułatwiają szybkie konfigurowanie prognoz dla metryk innych niż CPU. W trybie Tylko Prognoza możesz utworzyć wiele zasad skalowania predykcyjnego na podstawie różnych metryk i wartości docelowej, aby określić, która zasada skalowania jest najlepiej dopasowana do obciążenia. Pomaga to porównać zachowanie zasad skalowania predykcyjnego dla istniejących obciążeń bez wpływu na bieżącą konfigurację. Obecne prognozy wydają się dość trafne, więc pozostaniemy przy tych samych konfiguracjach.

 

Konfigurowanie zasad skalowania w Trybie Prognozy i skalowania

Po przygotowaniu się do umożliwienia skalowania predykcyjnego automatycznego dostosowywania godzinowej wydajności grupy automatycznego skalowania można łatwo zaktualizować jedną z zasad skalowania, aby umożliwić prognozowanie i skalowanie bezpośrednio na konsoli. W przeciwnym razie, aby przełączyć tryby, utwórz nowy plik konfiguracyjny zasad skalowania predykcyjnego z opcją „Tryb” ustawioną na „ForecastAndScale”. Możesz to zrobić za pomocą następującego polecenia:

 

cat <<EoF > predictive-scaling-policy-cpu.json
{
    "MetricSpecifications": [
        {
            "TargetValue": 25,
            "PredefinedMetricPairSpecification": {
                "PredefinedMetricType": "ASGCPUUtilization"
            }
        }
    ],
    "Mode": "ForecastAndScale"
}
EoF

Korzystając z wygenerowanego pliku konfiguracyjnego, uruchom następujące polecenie, aby zaktualizować strategię skalowania predykcyjnego procesora.

aws autoscaling put-scaling-policy \
    --auto-scaling-group-name "Example Application Auto Scaling Group" \
    --policy-name "CPUUtilizationpolicy" \
    --policy-type "PredictiveScaling" \
    --predictive-scaling-configuration file://predictive-scaling-policy-cpu.json

Po wdrożeniu tych zaktualizowanych zasad skalowania przewidywana pojemność grupy automatycznego skalowania będzie się teraz zmieniać co godzinę na podstawie prognoz skalowania predykcyjnego. Przewidywana przepustowość, która działa jako podstawa na godzinę, zostanie uruchomiona na początku samej godziny. Możesz skonfigurować jeszcze bardziej przyspieszony czas uruchamiania zgodnie z czasem potrzebnym na przygotowanie i rozgrzanie instancji.

 

Wpływ włączenia skalowania predykcyjnego.

Teraz, gdy przeszedłeś do trybu ForecastAndScale, a skalowanie predykcyjne aktywnie skaluje grupę automatycznego skalowania, pora powrócić do metryki czasu żądania ALB dla grupy automatycznego skalowania.

Predictive Scaling

Tak jak mogłeś zauważyć na poprzednim zrzucie ekranu, przed gwałtownym popytem (8:00-10:00 UTC) 40 instancji (niebieska linia) zostało dodanych w jednym kroku właśnie przez skalowanie predykcyjne. Polityka dynamicznego skalowania kontynuuje dodawanie pozostałych 9 instancji wymaganych dla rosnącego popytu. Ze względu na łączny efekt obu zasad skalowania nie obserwujemy już skoku w metryce czasu odpowiedzi (zielona linia). Powiększmy zatem konkretny przedział czasowy, aby uzyskać lepszy wygląd.

Predictive Scaling

Przez cały okres czas odpowiedzi pozostaje krótszy niż 0,02 sekundy w porównaniu do osiągnięcia 35 sekund wcześniej, gdy używaliśmy tylko dynamicznego skalowania. Dzięki uruchamianiu instancji przed gwałtowną zmianą popytu skalowanie predykcyjne poprawiło wrażenia użytkowników końcowych. Dzięki temu nie musisz uciekać się do nadmiarowej alokacji ani wykonywać ręcznych interwencji w celu skalowania grup automatycznego skalowania przed takimi wzorcami popytu. Dopóki istnieje przewidywalny wzorzec, automatyczne skalowanie wzbogacone o skalowanie predykcyjne zapewnia wysoką dostępność aplikacji.

Jeśli używasz przykładowego stosu, nie zapomnij wyczyścić po zakończeniu testowania funkcji, usuwając stos.

 

Wnioski

Skalowanie predykcyjne w połączeniu ze skalowaniem dynamicznym pomaga zapewnić, że obciążenia grupowe automatycznego skalowania EC2 posiadają wymaganą pojemność do obsługi obciążenia przewidywanego i w czasie rzeczywistym. Możesz zezwolić na skalowanie predykcyjne w istniejących grupach automatycznego skalowania w trybie Tylko prognoza, aby uzyskać widoczność przewidywanej pojemności bez podejmowania jakichkolwiek działań skalowania. Możesz udoskonalić i dostosować zasady skalowania predykcyjnego, wybierając jedną z czterech wstępnie zdefiniowanych metryk i w razie potrzeby dostosuj jego wartość docelową. Po zakończeniu możesz przełączyć się do trybu prognozowania i skalowania, aby aktywnie skalować pojemność grupy automatycznego skalowania na podstawie przewidywanego zapotrzebowania. Dzięki jednoczesnemu zastosowaniu skalowania predykcyjnego i skalowania dynamicznego Twoja grupa automatycznego skalowania będzie miała pojemność niezbędną do zaspokojenia popytu, co może poprawić czas reakcji aplikacji i obniżyć koszty EC2. Aby dowiedzieć się więcej o tej funkcji, zapoznaj się z Podręcznikiem użytkownika automatycznego skalowania EC2.

 

źródło: AWS

Case Studies
Referencje

Jesteśmy ogromnie zadowoleni ze współpracy z firmą Hostersi. Ich specjaliści doradzili nam rozwiązanie, które dało nam stabilną, skalowalną infrastrukturę, która umożliwia obsłużenie ciągle rosnącego ruchu związanego z COVID-19

Jakub Sperczyński
Prezes Zarządu EduNect
W skrócie o nas
Specjalizujemy się w dostarczaniu rozwiązań IT w obszarach projektowania infrastruktury serwerowej, wdrażania chmury obliczeniowej, opieki administracyjnej i bezpieczeństwa danych.