Migracja na AWS topowej platformy edukacyjnej obsługującej ponad 120 tys. aktywnych użytkowników

Kompleksowe przeniesienie platformy z DigitalOcean na AWS
Nasz zespół stworzył największą w Polsce platformę edukacyjną, która obsługuje obecnie ok. 120 tys. użytkowników. Obecnie jesteśmy odpowiedzialni za dalszy rozwój systemu i prace utrzymaniowe.
Platforma naszego klienta (NDA) nieustannie się rozwija i przyciąga coraz więcej nowych użytkowników. Prawidłowe zarządzanie tak potężnym ruchem jest niezbędne, aby rozwiązanie spełniało swoją funkcję i sprostało oczekiwaniom użytkowników. Aby zapewnić możliwość skalowania oraz poprawić wydajność aplikacji, zajęliśmy się kompleksowym przeniesieniem systemu z DigitalOcean na AWS.
Jak pomogliśmy klientowi osiągnąć cele biznesowe?
W ramach przeniesienia aplikacji na AWS wykonaliśmy szereg zadań przygotowawczych. Jednym z nich było udoskonalenie sposobu konteneryzacji aplikacji oraz przygotowanie bezpiecznej struktury dostępów AWS (stworzenie użytkowników i konfiguracja poszczególnych dostępów). Kolejnym krokiem była aktualizacja CI/CD w celu przeniesienia z On-Premise (DigitalOcean) na AWS.
Konieczne było również produkcyjne skonfigurowanie narzędzi takich jak Redis Elasticsearch, a także konfiguracja Load Balancera pozwalająca na odpowiednie sterowanie ruchem do clustrów aplikacji. Nasz zespół zajął się przygotowaniem całej infrastruktury AWS Elastic Container Service wraz z przygotowaniem polityk skalowalności. Infrastrukturę wdrożyliśmy przy użyciu narzędzia Terraform (i Terragrunt). Dodatkowo przeprowadziliśmy testy obciążeniowe po których wykonaliśmy ponowną analizę obciążenia aplikacji na nowej infrastrukturze po czym dostosowaliśmy parametry i ustawienia do aktualnych warunków. Na końcowym etapie prac zajęliśmy się replikacją bazy danych do nowej (AWS RDS Aurora).
Zadbaliśmy również o wysokiej jakości zabezpieczenia. Zasoby bazy danych osadziliśmy w prywatnych podsieciach, a dostęp zdalny do kontenerów aplikacji jest ograniczony.
Zobrazowanie działania aplikacji po migracji przy wzrastającym ruchu
Liczba requestów obsługiwanych przez Load Balancer

Wykres przedstawiający rozkład ruchu na przestrzeni dni tygodnia oraz porach dnia.
Maksymalne, minimalne i średnie zużycie zasobów CPU na utworzonych clustrach aplikacji

Wykres przedstawia zużycie zasobów CPU przez aplikacje w ciągu tygodnia. Można na nim zaobserwować reakcję aplikacji na zmienność obciążenia w różnych dniach oraz godzinach i reakcje w postaci szybkiego autoprzeskalowania w momencie zwiększonego ruchu. Pozwala to szybko przywrócić średnie zużycie CPU na wymagany poziom. W zależności od ustawionych alarmów, ilość zadań w clustrze odpowiednio dostosowuje się do obciążenia i pozwala obsłużyć dynamiczny ruch.
Stabilna obsługa żądań aplikacji do bazy danych

Podczas migracji zadbaliśmy o skalowalność bazy danych dzięki czemu ten obszar jest również zabezpieczony przed wzrastającym ruchem użytkowników.
Wykres zużycia zasobów bazy danych

Widoczne na powyższym wykresie spadki, to moment automatycznego przeskalowania ilości instancji w celu spokojniejszej obsługi ruchu. Po odpowiednim uspokojeniu, automatycznie zmniejszamy ilość instancji w celu ograniczenia kosztów oraz wykorzystaniu w jak największym zakresie instancji podstawowych.
Cel migracji
Celem migracji było utrzymanie szybkich czasów odpowiedzi serwera do użytkownika niezależnie od dnia i godziny oraz aktualnego obciążenia.

Efekt potwierdza wykres powyżej, na którym widać, że czasy odpowiedzi (mimo ciągle rosnącego ruchu) są w dużej stabilne.