Serverlessowa soczewka
w Well-Architected Tool
Dobrze zaprojektowana aplikacja to gwarancja dostarczania usług na najwyższym poziomie. Mając wieloletnie doświadczenie w pracy z chmurą AWS oraz jako AWS Well-Architected Consulting Partner, zjedliśmy zęby na dostarczaniu najwyższej jakości usług na podstawie Well-Architected Framework. O frameworku pisaliśmy już wcześniej na naszym blogu, a wpis znajdziecie pod tym linkiem. W tym wpisie przybliżymy Wam obszary, które należy wziąć pod uwagę podczas budowania aplikacji serverlessowej oraz jak działa Serverless Lens – najświeższy zbiór najlepszych praktyk od AWS.
Zacznijmy od wymienienia obszarów, które są istotne w procesie projektowania aplikacji. Są to:
- warstwa compute/obliczeniowa
- warstwa danych
- warstwa streamingu i przesyłu wiadomości
- warstwa zarządzania tożsamością użytkownika
- warstwa krańcowa/brzegowa (edge)
- deployment i monitoring systemów
- podejścia w deploymencie
By odpowiednio podejść zarówno do budowania, jak i wdrażania ulepszeń, warto na początku ustalić cele, które chcemy osiągnąć podczas projektowania lub zdiagnozować elementy wymagające zmiany, w istniejącej aplikacji za pomocą AWS Well Architected Tool, które znajduje się w AWS Management Console. Zanim jednak przejdziemy do kwestii jak ustawić Serverless Lens w konsoli, omówmy poszczególne obszary z nią związane.
Warstwa Compute
Odpowiedzialna jest za zarządzanie requestami z systemów zewnętrznych, kontrolując dostępy i dbając o poprawność ich autoryzacji. Zawiera środowisko wykonawcze, w którym można wdrażać i realizować procesy biznesowe.
Usługi AWS przydatne w warstwie compute:
- AWS Lambda – pozwala na bezstanowe wdrożenie i uruchomienie serverlessowej aplikacji, za pomocą platform obsługującej mikroserwisy, deployment i zarządzanie wykonawstwem w warstwie funkcyjnej.
- Amazon API Gateway – pozwala na uruchomienie w pełni zarządzalnego interfejsu API REST, który integruje się z Lambdą w celu wdrożenia logiki biznesowej . Umożliwia również zarządzanie ruchem, autoryzacją, kontrolą dostępu, monitoringiem i wersjonowaniem API.
- AWS Step Functions – umożliwia sterowanie workflow’ami w tym koordynacją, stanem i łańcuchem funkcji oraz długoterminowymi wdrożeniami, nieobsługiwanymi przez AWS Lambdę. Dzieląc je tym samym na kilka kroków i wywołując workery na instancjach EC2 lub serwerach on-premise.
Warstwa danych
Odpowiedzialna jest za zarządzanie trwałym magazynowaniem danych z poziomu systemu. Dostarcza mechanizmów zapewniających bezpieczne przechowywanie informacji. Zapewnia również mechanizmy do wyzwalania zdarzeń (events triggering) w odpowiedzi na zmiany danych.
Usługi AWS przydatne w warstwie danych:
- Amazon DynamoDB – jest bazą danych NoSQL i została zaprojektowana do przechowywania i zarządzania danymi w formie pojedynczej tabeli. Sama tabela Dynamo DB może być zlokalizowana w wielu regionach AWS i działać jako tabela multimaster. Jej możliwości pozwalają na obsłużenie ponad 10 bilionów requestów dziennie oraz przyjęcie do 20 milionów requestów na sekundę.
- Amazon S3 – usługa pozwalająca na przechowywanie plików, dostępna za pomocą https. Pozwala na udostępnianie zasobów statycznych obsługiwanych za pośrednictwem sieci dostarczania treści (CDN), takiej jak Amazon CloudFront.
- Amazon Elasticsearch Service – jest popularnym silnikiem wyszukiwania i analizy typu open source. Swoje zastosowanie znajdzie w takich działaniach jak analiza dzienników, monitorowanie aplikacji w czasie rzeczywistym czy analiza click stream.
- AWS AppSync – to gotowy backend do aplikacji mobilnych i webowych (serverless) przyspiesza budowanie aplikacji, zapewniając narzędzie do zarządzania i subskrybowania danych w czasie rzeczywistym, z synchronizacją między urządzeniami oraz obsługą trybu offline.
Warstwa streamingu i przesyłu wiadomości
Można powiedzieć, że to warstwa komunikacyjna. Warstwa wiadomości odpowiada za komunikację pomiędzy poszczególnymi komponentami środowiska. Warstwa streamingu odpowiada za zarządzanie analizą i przetwarzaniem danych w czasie rzeczywistym.
- Amazon SNS – usługa odpowiedzialna za wysyłanie powiadomień w różnej formie – mail, sms, powiadomienia push. SNS ma możliwość integracji z różnymi aplikacjami i serwisami w chmurze AWS.
- Amazon Kinesis – usługa służąca do zbierania danych z różnych źródeł, np. Internet of Things. Urządzenia streamują dużo danych, które trafiają do Kinesis. Użytkownik sam może umieścić dane w aplikacji lub Kinesis umieszcza je w S3 lub Redshift za niego.
- Amazon Kinesis Data Firehose – usługa służąca do przechwytywania, przekształcania i przesyłania danych ze strumienia do S3, Amazon Redshift czy Amazon Elasticsearch Service czy Splunk.
Warstwa zarządzania tożsamością użytkownika
Odpowiada za zarządzanie tożsamością, uwierzytelnianiem i autoryzacją interfejsu zarówno zewnętrznym, jak i wewnętrznym klientom.
- Amazon Cognito – zapewnia nadzór nad nietypowym zachowanie użytkownika, pozwalając deweloperowi zdecydować, co w nietypowej sytuacji zrobić (np. Logowanie z nietypowej lokalizacji, nieznanego urządzenia czy w dwóch innych lokacjach jednocześnie). W rozwiązaniach opartych o AWS Lambda pozwala skupić się na wdrożeniu logiki biznesowej, implementując poprzez SDK weryfikację tożsamości na podstawie zapytania do danego endpointu API.
Warstwa brzegowa(edge)
Odpowiedzialna jest za kwestie prezentacyjne i łączność z klientami zewnętrznymi. Amazon CloudFront zapewnia CDN, który w bezpieczny sposób dostarcza treści i dane z aplikacji internetowych przy małych opóźnieniach i dużych prędkościach przesyłu.
- Amazon CloudFront zapewnia sieć CDN dostarczającą w bezpieczny sposób treści i dane z aplikacji webowych, z uwzględnieniem małych opóźnień i szybkiego przesyłu.
Monitoring systemów i deployment
Warstwa monitoringu odpowiedzialna jest za zarządzanie widocznością systemu poprzez tworzenie metryk oraz tworzenie kontekstualnej świadomości, jak system działa i zachowuje się w czasie. Warstwa deploymentu definiuje, w jaki sposób zmieniają się workloady podczas wersjonowania w procesie zarządzania.
- Amazon CloudWatch – dostarcza niezbędnych informacji ze wskaźnikami ze wszystkich aktywnych na koncie usług AWS. Pozwala na tworzenie dzienników logów na poziomie aplikacji, jak i systemu.Umożliwia tworzenie KPI jako customowych wskaźników użytkownika.
- AWS X-Ray – umożliwia na analizowanie i debugowanie aplikacji serverlessowych. Dostarcza mapy rozproszonego śledzenia i usług, pomagające w identyfikacji bottleneck’ów z wizualizacją requestów end-to-end.
- AWS SAM (Serverless Application Model) – to framework wspierający AWS CloudFormation, który służy do testowania i wdrażania aplikacji serverlessowych. Interfejs AWS SAM może również umożliwić szybsze cykle debugowania podczas lokalnego rozwijania funkcji Lambda.
Podejścia w deploymencie
We wdrożeniach warto kierować się najlepszymi praktykami. Najważniejszą zasadą jest trzymanie się ustalonych wcześniej warunków i dbanie by wdrażane zmiany nie naruszały kontraktu. W momencie, gdy właściciel API wdroży zmiany naruszające umowę serwisową , a użytkownik nie jest na to gotowy, pojawia się ryzyko awarii.
Warto zwrócić uwagę na fakt, że w zależności od potrzeb klienta istnieje możliwość wyboru podejścia. Poniższa tabela pokrótce opisuje daną opcję, wpływ na aplikację klienta czy jej szybkość. Dokładny opis każdego z nich znajduje się w linku źródłowym pod tabelą.
Źródło: AWS Serverless Lens Whitepaper
Jak działa Serverless Lens?
Well-Architected Tool jest bezpłatne, a opłata naliczana jest jedynie za niezbędne do prac naprawczych zasoby AWS. W konsoli AWS po ustawieniu niezbędnych parametrów związanych z workloadami, w kolejnym kroku wybieramy “soczewkę”(lens) spośród 2 opcji.
Po wybraniu Serverless Lens pojawia się seria pytań związanych z każdym z 5.-ciu filarów (operacyjnym, wydajnościowym itd.). Po udzieleniu odpowiedzi, ich zapisaniu pojawia się komunikat związany z ryzykiem.
Zaraz pod daną kategorią ryzyka pojawiają się sugestie związane z planem naprawczym. Po rozwinięciu listy pojawiają się konkretne propozycje wraz z linkami do whitepaperów AWS związanych z wcześniej udzielonymi odpowiedziami.
Dostępność narzędzia Well-Architected można sprawdzić w tabeli regionów AWS. Warto wykorzystać nową możliwość związaną z Serverless Lens, by ulepszyć aplikację, nad którą trwają prac, lub by uzyskać wgląd w dotychczasowe workloady i zdefiniować je na nowo. Warto pamiętać, że dane wyjściowe z narzędzia to raport z zagrożeniami i listą sugestii działań naprawczych, dlatego warto korzystać z Well-Architected Tool podczas całego cyklu życia aplikacji.