5 natywnych usług AWS, które mogą zbudować kompleksową platformę bezserwerową

Photo of author

By maciekx

Przejście na architekturę bezserwerową: Nowa Era Tworzenia Oprogramowania

Tradycyjnie, budowa systemów oprogramowania na dużą skalę wiązała się z koniecznością konfiguracji wielu serwerów. Każdy z nich wymagał indywidualnego dostosowania pod kątem procesora, pamięci RAM, przestrzeni dyskowej i innych zasobów. To żmudne zadanie prowadziło do powoływania całych zespołów administratorów, których zadaniem było zarządzanie tą infrastrukturą. Następnie, zespoły programistów podejmowały się zadania tworzenia aplikacji łączących te serwery w spójny system.

Ten proces często okazywał się złożony i skomplikowany, angażując różne grupy ludzi z różnymi priorytetami i celami, co generowało konflikty i utrudniało sprawną pracę. Do tego dochodziły wysokie koszty utrzymania, związane z opłacaniem administratorów i stałym zużyciem energii przez serwery, nawet wtedy, gdy nie były one aktywnie wykorzystywane. Aby zapewnić optymalną wydajność w dłuższej perspektywie, konieczne było znalezienie rozwiązań do automatycznego skalowania zasobów serwerowych.

Platforma chmurowa oferuje rewolucyjne podejście, umożliwiając stworzenie złożonej architektury bez konieczności ręcznej konfiguracji klastrów serwerów. Z punktu widzenia administracji, nie trzeba martwić się o utrzymanie fizycznej infrastruktury, co stanowi znaczącą przewagę. Jest to szczególnie atrakcyjne rozwiązanie dla startupów i projektów w fazie MVP (Minimum Viable Product), gdzie trudno jest przewidzieć przyszłe obciążenia i aktywność użytkowników. W takich sytuacjach, precyzyjne określenie konfiguracji klastrów serwerów staje się zadaniem bardzo trudnym.

Automatyzacja procesów za pomocą bezserwerowych usług w chmurze to fundament architektury bezserwerowej. Usługi te łączą się ze sobą, dając rezultaty porównywalne z tradycyjnymi klastrami serwerów, ale bez konieczności zarządzania infrastrukturą. Poniżej przedstawiony jest przykład, jak można zbudować taką architekturę, wykorzystując wyłącznie natywne usługi AWS.

Schemat bezserwerowego przepływu danych

Wyobraźmy sobie platformę gromadzącą dane i obrazy (np. zdjęcia) dotyczące różnych elementów infrastruktury, na przykład aktywów produkcyjnych. Aby umożliwić przyszłe analizy, napływające dane muszą zostać przetworzone. Po zastosowaniu reguł biznesowych, system zapisuje przetworzone wyniki w postaci znormalizowanych informacji w relacyjnej bazie danych. Z kolei, aplikacja front-end wyświetla te znormalizowane dane użytkownikom. Zobaczmy, jakie komponenty mogą wchodzić w skład takiej architektury.

Zasobniki AWS S3

Źródło: aws.amazon.com

Zasobniki Amazon S3 to doskonałe miejsce do przechowywania plików i obrazów w chmurze AWS. Koszt przechowywania danych w S3 jest bardzo niski. Dodatkowo, polityka cyklu życia zasobnika S3 pozwala na jeszcze większą redukcję kosztów. Starsze pliki mogą być automatycznie przenoszone do różnych klas przechowywania S3, takich jak archiwum lub głęboki dostęp do archiwum. Klasy te różnią się szybkością dostępu, co nie jest problemem w przypadku danych archiwalnych. Służy to głównie do dostępu do starych danych w przypadku awarii, a nie do standardowych potrzeb operacyjnych.

  • Dane można organizować w podfolderach.
  • Należy zdefiniować odpowiednie uprawnienia dostępu.
  • Dodawanie tagów do zasobników ułatwia ich identyfikację i pozwala na dynamiczne zarządzanie zasadami zasobników S3.
  • Zasobnik S3 jest z założenia usługą bezserwerową, służącą po prostu do przechowywania danych.

Zasobnik S3 jest naturalnie bezserwerowy. Jest to po prostu przestrzeń na dane.

Baza Danych AWS Athena

Źródło: aws.amazon.com

Athena umożliwia stworzenie prostego jeziora danych w AWS. Jest to baza danych bezserwerowa, która wykorzystuje zasobnik S3 do przechowywania swoich danych. Struktura danych jest utrzymywana przez ustrukturyzowane formaty plików, takie jak Parquet czy CSV. Pliki są przechowywane w zasobniku S3, a Athena odnosi się do nich za każdym razem, gdy procesy pobierają dane z bazy danych.

Należy pamiętać, że Athena nie obsługuje niektórych standardowych funkcji, takich jak aktualizacja danych. Należy ją traktować jako bardzo prostą opcję. Obsługuje jednak indeksowanie i partycjonowanie. Jest również łatwo skalowalna – wystarczy dodać nowe zasobniki do infrastruktury. W wielu przypadkach może to wystarczyć do budowy prostych, ale funkcjonalnych jezior danych.

Aby osiągnąć dobrą wydajność, niezbędne jest staranne zaprojektowanie struktury danych z uwzględnieniem sposobu, w jaki dane będą wykorzystywane w przyszłości. Konieczne jest jasne określenie sposobu, w jaki dane będą wybierane. Przebudowa tabeli po jej wypełnieniu dużą ilością danych jest trudna. Athena jest bardzo dobrym rozwiązaniem, jeśli potrzebna jest prosta i niemodyfikowalna pula danych, którą można łatwo skalować w poziomie.

Baza Danych AWS Aurora

Źródło: aws.amazon.com

Athena doskonale nadaje się do przechowywania surowych danych. W ten sposób powinniśmy przechowywać oryginalne dane, aby zmaksymalizować ich potencjalne wykorzystanie w przyszłości. Jednak dostarczanie wybranych danych do aplikacji front-end jest powolne. Jedną z najlepszych opcji, szczególnie pod względem łatwej konfiguracji, jest baza danych Aurora działająca w trybie bezserwerowym.

Aurora to zaawansowane rozwiązanie relacyjnej bazy danych w AWS, stale ulepszane z każdą wersją. Może ona działać w trybie bezserwerowym, co wyróżnia ją na tle innych usług relacyjnych. Tryb ten działa w następujący sposób:

  • Konfiguracja klastra Aurora odbywa się za pomocą konsoli AWS. Trzeba określić standardowy poziom procesora i pamięci RAM oraz maksymalny interwał automatycznego skalowania. Wpłynie to na wydajność klastra Aurora, który może dynamicznie dodawać lub usuwać zasoby. AWS decyduje o skalowaniu na podstawie bieżącego obciążenia bazy danych.
  • Klaster Aurora nie uruchomi się, dopóki użytkownik lub proces nie wyśle zapytania. Na przykład, gdy rozpocznie się zaplanowane przetwarzanie wsadowe, lub gdy aplikacja pobiera dane z bazy danych. Baza danych uruchomi się automatycznie i pozostanie aktywna przez określony czas po zakończeniu procesów.
  • Klaster Aurora zostanie automatycznie zamknięty, jeśli w bazie danych nie będzie żadnej pracy.

Reasumując, bezserwerowa baza danych Aurora działa tylko wtedy, gdy wykonuje realną pracę. Automatycznie uruchomiony klaster jest zamykany, gdy nie przetwarza żadnych danych. Płaci się za rzeczywistą pracę, a nie za czas bezczynności. Bezserwerowa Aurora jest w pełni zarządzana przez AWS, i nie wymaga administratora.

Wzmocnienie AWS

Amplify oferuje bezserwerową platformę do szybkiego wdrażania aplikacji front-endowych, stworzonych za pomocą bibliotek JavaScript i React. Nie trzeba konfigurować klastrów serwerów. Można bezpośrednio wdrażać kod przez konsolę AWS lub użyć zautomatyzowanego potoku DevOps. Można wywoływać interfejsy API zaplecza, aby uzyskać dostęp do danych przechowywanych w bazach danych. Te wywołania zapewniają dostęp do rzeczywistych danych w aplikacji front-end. Zespoły programistów powinny zoptymalizować wydajność zaplecza. Projektowanie wydajnych zapytań w wywołaniach API może jeszcze bardziej zminimalizować możliwość powolnej odpowiedzi w interfejsie użytkownika.

Funkcje krokowe AWS

Źródło: aws.amazon.com

Nawet jeśli główne elementy systemu są bezserwerowe, nie gwarantuje to w pełni bezserwerowej architektury. Jest to możliwe tylko wtedy, gdy wszystkie procesy wsadowe między elementami są bezserwerowe. Najlepszym rozwiązaniem w chmurze AWS w tym zakresie są funkcje AWS Step. Lista funkcji AWS Lambda tworzy funkcję krokową. Te funkcje tworzą schemat przepływu z wyraźnymi stanami początkowymi i końcowymi. Funkcja lambda, zazwyczaj napisana w języku Python lub Node JS, to wykonywalny fragment kodu, który przetwarza wszystko, co jest potrzebne.

Oto przykład wykorzystania funkcji krokowej:

  • AWS uruchamia automatyczną funkcję lambda, gdy nowy plik trafi do folderu S3. Lambda analizuje plik i ładuje go do Ateny, zapisując wyniki w formacie CSV w zasobniku S3 lub tabeli bazy danych przed zamknięciem.
  • Wynik jest następnie używany przez następną lambdę do wykonania kolejnych kroków. Może to być wywołanie modelu uczenia maszynowego i przekształcenie podzbioru danych w znormalizowane tabele. Ostatnim krokiem może być załadowanie danych do bazy danych Aurora.
  • Funkcja krokowa łączy lambdy w przepływ wsadowy. Możliwe jest nawet wykonanie innej funkcji krokowej zamiast kroku w innej funkcji krokowej. W ten sposób można objąć wiele scenariuszy.
  • Ten bezserwerowy przepływ ma jedną poważną wadę: każda funkcja lambda może działać maksymalnie przez 15 minut. Podzielenie przepływu na mniejsze funkcje lambda może rozwiązać ten problem. Możliwe jest również uruchomienie kilku funkcji lambda jednocześnie w jednym kroku, co oznacza zrównoleglenie kroku z wieloma lambdami. Należy poczekać na zakończenie równoległych obliczeń, zanim przejdziesz dalej.

    Podsumowanie

    Architektura bezserwerowa daje unikalną możliwość stworzenia platformy chmurowej obejmującej cały ekosystem systemowy. Taka platforma jest skalowalna i cechuje się niskimi kosztami operacyjnymi. Jest to idealne rozwiązanie dla projektów z ograniczonym budżetem, szczególnie gdy nieznane jest przyszłe obciążenie systemu. Zespoły projektowe mogą mieć pełen obraz działania systemu bez konieczności ponoszenia dodatkowych kosztów.

    Takie rozwiązanie nie sprawdzi się w każdym przypadku, szczególnie tam, gdzie wymagane jest duże zużycie procesora. Jednak chmura AWS stale rozwija się w zakresie bezserwerowych zastosowań. Przed podjęciem decyzji o wyborze opcji bezserwerowej, konieczne jest przeprowadzenie dokładnych badań. Zachęcamy do zapoznania się z naszym artykułem o najlepszych bezserwerowych bazach danych dla nowoczesnych aplikacji.


    newsblog.pl