Jak sama nazwa wskazuje, auto skalowanie pozwala skalować instancje EC2 w górę lub w dół automatycznie zgodnie z instrukcjami ustawionymi przez użytkownika. Parametry takie jak minimalna oraz maksymalna liczba instancji ustawiane są przez użytkownika. Dzięki takiej konfiguracji liczba instancji EC2 wzrasta automatycznie jeżeli rośnie zapotrzebowanie na usługi pozwalając utrzymać wydajność i zmniejsza się automatycznie gdy zapotrzebowanie na usługi spada – co łączy się również z minimalizacją kosztów.
Auto Scaling jest szczególnie użyteczny w przypadku aplikacji w których zapotrzebowanie na dostarczane usługi rośnie w poszczególnych godzinach czy dniach tygodnia. Usługa ta jest włączona przez Amazon CloudWatch i jest dostępna bez dodatkowych kosztów. CloudWatch jest używany do monitorowania i pomiarów wykorzystania procesorów, ruchu sieciowego czy liczby błędów dla funkcji Lambda.
Elastic Load Balancing (ELB)
ELB automatycznie rozdziela ruch przychodzący do wielu instancji EC2 co pozwala osiągnąć wyższą odporność na awarie zapewniając jednocześnie wysoką wydajność. Pozwala również wykryć niedziałające instancje i automatycznie przekierować ruch do działających instancji dopóki te uszkodzone nie zostaną ponownie przywrócone do pracy. Cały proces jest interesujący ponieważ wykorzystuje algorytm round-robin. Jest to jednocześnie najprostsze możliwe podejście ponieważ algorytm przechodzi cyklicznie przez wszystkie instancje po kolei dostarczając równą część zadań do każdej z nich. Ze względu na prostotę algorytm ten jest wykorzystywany przez wszystkie load balancery. Poniższy gif ilustruje cały proces:
Źródło: https://miro.medium.com/max/875/1*Gb7hi5pqKmYYxEIUCJylHw.gif
ELB składa się z trzech komponentów:
Load Balancer: obejmuje monitorowanie i obsługę żądań przychodzących przez Internet/Intranet i dystrybuuje je do instancji EC2.
Control Service: obejmuje automatyczne skalowanie zdolności obsługi w odpowiedzi na ruch przychodzący przez dodawanie i usuwanie load balancerów w zależności od potrzeb. Wykonuje również kontrolę oceny stanu zdrowia każdej instancji.
SSL Termination: jest organizacją procesu szyfrowania i odszyfrowania ruchu HTTPS, który jest obsługiwany przez load balancer. Dzięki temu użytkownicy naszych aplikacji mogą korzystać z szyfrowanej komunikacji przy bardzo niskim narzucie operacyjnym lub złożoności administracyjnej.
Korzyści płynace z wykorzystania ELB
ELB jest zaprojektowany do obsługi nieograniczonej ilości żądań na sekundę przy stopniowo wzrastającym obciążeniu;
możliwość konfiguracji instancji EC2 i load balancerów do przyjmowania ruchu;
możliwość dodawania/usuwania load balancerów zgodnie z wymaganiami bez wpływu na ogólny przepływ informacji;
możliwość uruchomienia Elastic Load Balancing w ramach jednej lub wielu stref dostępności w celu uzyskania bardziej wydajnej aplikacji.
Jednocześnie musimy pamiętać, że powyższe rozwiązanie jest przeznaczone głównie dla usług o stopniowo wzrastającym obciążeniu. Jeżeli nasza aplikacja będzie projektowana pod aplikacje, które w sposób bardzo nagły będą wymagały zwiększenia dostępności (np. egzmiany online) musimy się liczyć ze znacznym wzrostem kosztów danej usługi. Wszystko to związane jest ze znacznym wzrostem nowych żądań kierowanych do ELB co wiąże się ze zwiększonym wykorzystaniem jednostek pracy na godzinę: Load Balancer Capacity Units (LCU) – więcej na ten temat możecie poczytać w oficjalnej dokumentancji: https://docs.aws.amazon.com/elasticloadbalancing/latest/application/elb-ag.pdf
Z panelu nawigacyjnego po lewej stronie wybieramy Load Balancers:
a następnie z poziomu nowego widoku klikamy Create Load Balancer
Kolejny ekran to wybór rodzaju load balancera. W naszym przypadku wybieramy pierwszy wariant, tj. Application Load Balancer ponieważ zależy nam na konfiguracji ruchu związanego z protokołem HTTP/S:
Wprowadzamy nazwę dla naszego load balancera:
Zjeżdzając trochę niżej możemy zobaczyć, że została również wybrana domyślnie utworzona sieć VPC dla naszego konta. Z poprzednich wpisów pamiętamy, że to dodatkowe zabezpieczenie dla naszej architektury – możemy również wskazać VPC, które tworzyliśmy w poprzednim wpisie:
Pozostając na danym ekranie musimy jeszcze wskazać przynajmniej dwie strefy dostępności dla naszej usługi. Pamiętajcie, i zawsze sprawdzajcie, w jakim jesteście regionie tworząc nowe komponenty, żeby uniknąć dodatkowych kosztów z przekazywaniem ruchu pomiędzy regionami:
Klikamy przycisk Next: Configure Security Settings. Dostajemy ostrzeżenie mówiące o konieczności zabezpieczenia ruchu trafiającego do load balancera. Korzystamy z konfiguracji zalecanej przez AWS:
Klikamy przycisk Configure Security Groups a następnie wybieramy konfigurację, którą utworzyliśmy we wpisie: AWS - VPC lub wartość domyślną:
Klikamy przycisk Next: Configure Routing dokonując konfiguracji. Load Balancer kieruje żądania do docelowego endpoint’a używając protokołu oraz portu, które tutaj definiujemy. Warto również pamiętać o tzw. ocenie stanu zdrowia (health check). Jest to niezwykle użyteczna usługa ponieważ pozwala nam ocenić czy nasza instancja działa prawidłowo. Podobnie w przypadku API - tym razem zapewniamy znacznie szybsze odpowiedzi na przychodzące żądania ponieważ unikamy procesu cold startu usługi, który czasem może zajmować 100 milisekund:
Klikamy przycisk Next: Register Targets. W nowo otwartym oknie wybieramy instancję EC2 do której chcemy kierować żądania:
Klikamy przycisk Next: Review, sprawdzamy przygotowaną konfigurację i klikamy przycisk Create znajdujący się u dołu ekranu. Jeżeli wszystko przebiegło pomyślnie zobaczymy poniższy ekran:
Kasowanie Load Balancera
Utworzony przez nas Load Balancer nie będzie jeszcze używany. W tym wpisie chcieliśmy przejść przez szczegółowe informacje, utworzyć nową konfigurację i zaznajomić się z kolejnymi ekranami.
Jeżeli checie usunąć przygotowany Load Balancer wystarczy przejść na dashboard, zaznaczyć interesujący nas rekord i z poziomu przycisku Actions wybrać Delete: