SlideShare uma empresa Scribd logo
1 de 23
Baixar para ler offline
Uszanowanko Programowanko #57
Jak poskromić AWS?
Karol Goraus
Senior Node.js developer
Case #1
Proces wypłaty pieniędzy z konta oparty
o Step Functions
Iteracja 1
Projekt
● API Gateway uruchamiające Lambdę
● Lambda wywołująca i oczekująca synchronicznie
na wynik wywołania Step Function
● Step Function EXPRESS flow
○ 5 minut maksymalny czas trwania
○ do wywołań synchronicznych
● Dane pomiędzy krokami przechowywane w
DynamoDB
Problemy?
● Zimny start na krokach flow
● Maksymalny czas trwania połączenia na API
Gateway - 30 sekund
API Gateway + Step functions
C
o
m
o
g
ł
o
p
ó
j
ś
ć
n
i
e
t
a
k
?
Iteracja 2
Proponowane rozwiązanie:
Więcej pieniędzy Provisioned concurrency na ratunek!
Problem?
Znaczny wzrost kosztów
API Gateway + Step functions
Iteracja 3
Zmiana flow:
API Gateway + Step functions
Proponowane rozwiązanie:
Przerobienie projektu ;)
● Zrównoleglenie części kroków
● Usunięcie oczekiwania na odpowiedź platformy
AML (niepotrzebna nadgorliwość)
● Usunięcie kroku pobierania nazwy banku
Iteracja 3
Et Voilà! :)
API Gateway + Step functions
Proponowane rozwiązanie:
Przerobienie projektu ;)
Zmiana flow:
● Zrównoleglenie części kroków
● Usunięcie oczekiwania na odpowiedź platformy
AML (niepotrzebna nadgorliwość)
● Usunięcie kroku pobierania nazwy banku
Case #2
Deployment i praca z lambdami na AWS
Dane:
● AWS przechowuje kod lambd na S3
● Limit to 75GB / konto / region
● Każde opublikowanie lambdy to nowa wersja
● Liczba lambd x liczba bibliotek x liczba wersji =
Lambdy, wersjonowanie i przechowywanie kodu
Możliwości:
● Osobne konta AWS per środowisko (generalnie dobra praktyka)
● Brak wersjonowania lambd na środowiskach nie-produkcyjnych
● Korzystanie z warstw
● Okresowe czyszczenie starych wersji lambd (np. przy użyciu pluginu serverless-prune-plugin)
Case #3
Manager transakcji z DynamoDB
Case study
● Manager transakcji
● Początek transakcji -> kilka operacji wymagających atomowości ->
Zakończenie transakcji
● ZONK! Transakcji nie ma w DDB
DynamoDB i eventual consistency
Gdzie się podziała ta transakcja?
● Domyślnie odczyty są eventually consistent
● ConsistentRead: true Waszym przyjacielem
Co to TTL?
● Time To Live
● Oznaczenie elementu DDB do usunięcia
● DDB po przekroczeniu TTL usuwa rekord bez zużywania WCU
● Brak dodatkowych kosztów
DynamoDB i TTL
Where’s the catch?
● Elementy mogą być usunięte nawet do 48h po przekroczeniu TTL
● Do tego czasu nadal są widoczne w kwerendach
● Do momentu usunięcia mogą być edytowane (nawet samo TTL!)
Co z tym fantem zrobić?
● Świadome wykorzystanie
○ Usuwanie rekordów, które utraciły ważność
○ Porządkowanie tabel
● Używanie FilterExpression w Query/Scanach
DynamoDB i TTL
Case #4
Zmiana oprocentowania kont
oszczędnościowych
Przykład
● Zmiana wysokości oprocentowania na kontach
● Brak możliwości batchowej edycji kont w Mambu
● Ograniczona moc obliczeniowa / ilość obsługiwanych requestów po stronie
Mambu (429)
● Max concurrency nie działa dla Lambd triggerowanych przez SQS (bounce
back)
Lambdy triggerowane przez wiadomości na SQS
Rozwiązanie
● Zastosowanie kolejki FIFO
● 5 groupID
● Batch size 10
● profit $$$
Lambdy triggerowane przez wiadomości na SQS
● Jeśli lambda zakończyła błędem to wiadomość wraca na kolejkę
● To może prowadzić do nieskończonego przetwarzania wiadomości
● W skrajnych przypadkach poison-pill message
Lambdy triggerowane przez wiadomości na SQS
Jak do tego podejść?
● Dodanie DLQ z odpowiednim czasem życia
● Odpięcie triggera, zdrenowanie kolejki, podpięcie na nowo z DLQ
Błędy przetwarzania wiadomości przez lambdę
SQS pozwala publikować wiadomości o maksymalnej wielkości 256KB
Co wtedy?
Wrzucamy payload na S3 (max 2MB)
Lambdy triggerowane przez wiadomości na SQS
Ciekawostka
Case #5
Przetwarzanie równoległe w Step Functions
● Sposób na zrównoleglenia przetwarzania kolekcji danych
● Podobne do Parallel, tylko różny input
Map w Step Functions
Na co uważać?
● Limit równoległych wywołań (domyślnie MaxConcurrency: 0)
● Dla MaxConcurrency > 40 mogą wystąpić ograniczenia wywoływań
● Ryzyko DoS zależnych serwisów
Map w Step Functions
Map w Step Functions
Map w Step Functions
Dziękuję za uwagę! :)

Mais conteúdo relacionado

Mais de The Software House

Jak kraść miliony, czyli o błędach bezpieczeństwa, które mogą spotkać również...
Jak kraść miliony, czyli o błędach bezpieczeństwa, które mogą spotkać również...Jak kraść miliony, czyli o błędach bezpieczeństwa, które mogą spotkać również...
Jak kraść miliony, czyli o błędach bezpieczeństwa, które mogą spotkać również...The Software House
 
Jak efektywnie podejść do certyfikacji w AWS?
Jak efektywnie podejść do certyfikacji w AWS?Jak efektywnie podejść do certyfikacji w AWS?
Jak efektywnie podejść do certyfikacji w AWS?The Software House
 
O co chodzi z tą dostępnością cyfrową?
O co chodzi z tą dostępnością cyfrową?O co chodzi z tą dostępnością cyfrową?
O co chodzi z tą dostępnością cyfrową?The Software House
 
Chat tekstowy z użyciem Amazon Chime
Chat tekstowy z użyciem Amazon ChimeChat tekstowy z użyciem Amazon Chime
Chat tekstowy z użyciem Amazon ChimeThe Software House
 
Jak nie zwariować z architekturą Serverless?
Jak nie zwariować z architekturą Serverless?Jak nie zwariować z architekturą Serverless?
Jak nie zwariować z architekturą Serverless?The Software House
 
Analiza semantyczna artykułów prasowych w 5 sprintów z użyciem AWS
Analiza semantyczna artykułów prasowych w 5 sprintów z użyciem AWSAnaliza semantyczna artykułów prasowych w 5 sprintów z użyciem AWS
Analiza semantyczna artykułów prasowych w 5 sprintów z użyciem AWSThe Software House
 
Feature flags na ratunek projektu w JavaScript
Feature flags na ratunek projektu w JavaScriptFeature flags na ratunek projektu w JavaScript
Feature flags na ratunek projektu w JavaScriptThe Software House
 
Typowanie nominalne w TypeScript
Typowanie nominalne w TypeScriptTypowanie nominalne w TypeScript
Typowanie nominalne w TypeScriptThe Software House
 
Automatyzacja tworzenia frontendu z wykorzystaniem GraphQL
Automatyzacja tworzenia frontendu z wykorzystaniem GraphQLAutomatyzacja tworzenia frontendu z wykorzystaniem GraphQL
Automatyzacja tworzenia frontendu z wykorzystaniem GraphQLThe Software House
 
Serverless Compose vs hurtownia danych
Serverless Compose vs hurtownia danychServerless Compose vs hurtownia danych
Serverless Compose vs hurtownia danychThe Software House
 
Testy API: połączenie z bazą danych czy implementacja w pamięci
Testy API: połączenie z bazą danych czy implementacja w pamięciTesty API: połączenie z bazą danych czy implementacja w pamięci
Testy API: połączenie z bazą danych czy implementacja w pamięciThe Software House
 
Jak skutecznie read model. Case study
Jak skutecznie read model. Case studyJak skutecznie read model. Case study
Jak skutecznie read model. Case studyThe Software House
 
Firestore czyli ognista baza od giganta z Doliny Krzemowej
Firestore czyli ognista baza od giganta z Doliny KrzemowejFirestore czyli ognista baza od giganta z Doliny Krzemowej
Firestore czyli ognista baza od giganta z Doliny KrzemowejThe Software House
 
Jak utrzymać stado Lambd w ryzach
Jak utrzymać stado Lambd w ryzachJak utrzymać stado Lambd w ryzach
Jak utrzymać stado Lambd w ryzachThe Software House
 
O łączeniu Storyblok i Next.js
O łączeniu Storyblok i Next.jsO łączeniu Storyblok i Next.js
O łączeniu Storyblok i Next.jsThe Software House
 
Amazon Step Functions. Sposób na implementację procesów w chmurze
Amazon Step Functions. Sposób na implementację procesów w chmurzeAmazon Step Functions. Sposób na implementację procesów w chmurze
Amazon Step Functions. Sposób na implementację procesów w chmurzeThe Software House
 
Od Figmy do gotowej aplikacji bez linijki kodu
Od Figmy do gotowej aplikacji bez linijki koduOd Figmy do gotowej aplikacji bez linijki kodu
Od Figmy do gotowej aplikacji bez linijki koduThe Software House
 
Co QA może i czego nie powinien się bać?
Co QA może i czego nie powinien się bać?Co QA może i czego nie powinien się bać?
Co QA może i czego nie powinien się bać?The Software House
 

Mais de The Software House (20)

Jak kraść miliony, czyli o błędach bezpieczeństwa, które mogą spotkać również...
Jak kraść miliony, czyli o błędach bezpieczeństwa, które mogą spotkać również...Jak kraść miliony, czyli o błędach bezpieczeństwa, które mogą spotkać również...
Jak kraść miliony, czyli o błędach bezpieczeństwa, które mogą spotkać również...
 
Uszanowanko Podsumowanko
Uszanowanko PodsumowankoUszanowanko Podsumowanko
Uszanowanko Podsumowanko
 
Jak efektywnie podejść do certyfikacji w AWS?
Jak efektywnie podejść do certyfikacji w AWS?Jak efektywnie podejść do certyfikacji w AWS?
Jak efektywnie podejść do certyfikacji w AWS?
 
O co chodzi z tą dostępnością cyfrową?
O co chodzi z tą dostępnością cyfrową?O co chodzi z tą dostępnością cyfrową?
O co chodzi z tą dostępnością cyfrową?
 
Chat tekstowy z użyciem Amazon Chime
Chat tekstowy z użyciem Amazon ChimeChat tekstowy z użyciem Amazon Chime
Chat tekstowy z użyciem Amazon Chime
 
Migracje danych serverless
Migracje danych serverlessMigracje danych serverless
Migracje danych serverless
 
Jak nie zwariować z architekturą Serverless?
Jak nie zwariować z architekturą Serverless?Jak nie zwariować z architekturą Serverless?
Jak nie zwariować z architekturą Serverless?
 
Analiza semantyczna artykułów prasowych w 5 sprintów z użyciem AWS
Analiza semantyczna artykułów prasowych w 5 sprintów z użyciem AWSAnaliza semantyczna artykułów prasowych w 5 sprintów z użyciem AWS
Analiza semantyczna artykułów prasowych w 5 sprintów z użyciem AWS
 
Feature flags na ratunek projektu w JavaScript
Feature flags na ratunek projektu w JavaScriptFeature flags na ratunek projektu w JavaScript
Feature flags na ratunek projektu w JavaScript
 
Typowanie nominalne w TypeScript
Typowanie nominalne w TypeScriptTypowanie nominalne w TypeScript
Typowanie nominalne w TypeScript
 
Automatyzacja tworzenia frontendu z wykorzystaniem GraphQL
Automatyzacja tworzenia frontendu z wykorzystaniem GraphQLAutomatyzacja tworzenia frontendu z wykorzystaniem GraphQL
Automatyzacja tworzenia frontendu z wykorzystaniem GraphQL
 
Serverless Compose vs hurtownia danych
Serverless Compose vs hurtownia danychServerless Compose vs hurtownia danych
Serverless Compose vs hurtownia danych
 
Testy API: połączenie z bazą danych czy implementacja w pamięci
Testy API: połączenie z bazą danych czy implementacja w pamięciTesty API: połączenie z bazą danych czy implementacja w pamięci
Testy API: połączenie z bazą danych czy implementacja w pamięci
 
Jak skutecznie read model. Case study
Jak skutecznie read model. Case studyJak skutecznie read model. Case study
Jak skutecznie read model. Case study
 
Firestore czyli ognista baza od giganta z Doliny Krzemowej
Firestore czyli ognista baza od giganta z Doliny KrzemowejFirestore czyli ognista baza od giganta z Doliny Krzemowej
Firestore czyli ognista baza od giganta z Doliny Krzemowej
 
Jak utrzymać stado Lambd w ryzach
Jak utrzymać stado Lambd w ryzachJak utrzymać stado Lambd w ryzach
Jak utrzymać stado Lambd w ryzach
 
O łączeniu Storyblok i Next.js
O łączeniu Storyblok i Next.jsO łączeniu Storyblok i Next.js
O łączeniu Storyblok i Next.js
 
Amazon Step Functions. Sposób na implementację procesów w chmurze
Amazon Step Functions. Sposób na implementację procesów w chmurzeAmazon Step Functions. Sposób na implementację procesów w chmurze
Amazon Step Functions. Sposób na implementację procesów w chmurze
 
Od Figmy do gotowej aplikacji bez linijki kodu
Od Figmy do gotowej aplikacji bez linijki koduOd Figmy do gotowej aplikacji bez linijki kodu
Od Figmy do gotowej aplikacji bez linijki kodu
 
Co QA może i czego nie powinien się bać?
Co QA może i czego nie powinien się bać?Co QA może i czego nie powinien się bać?
Co QA może i czego nie powinien się bać?
 

Jak poskromić AWS?

  • 1. Uszanowanko Programowanko #57 Jak poskromić AWS? Karol Goraus Senior Node.js developer
  • 2. Case #1 Proces wypłaty pieniędzy z konta oparty o Step Functions
  • 3. Iteracja 1 Projekt ● API Gateway uruchamiające Lambdę ● Lambda wywołująca i oczekująca synchronicznie na wynik wywołania Step Function ● Step Function EXPRESS flow ○ 5 minut maksymalny czas trwania ○ do wywołań synchronicznych ● Dane pomiędzy krokami przechowywane w DynamoDB Problemy? ● Zimny start na krokach flow ● Maksymalny czas trwania połączenia na API Gateway - 30 sekund API Gateway + Step functions C o m o g ł o p ó j ś ć n i e t a k ?
  • 4. Iteracja 2 Proponowane rozwiązanie: Więcej pieniędzy Provisioned concurrency na ratunek! Problem? Znaczny wzrost kosztów API Gateway + Step functions
  • 5. Iteracja 3 Zmiana flow: API Gateway + Step functions Proponowane rozwiązanie: Przerobienie projektu ;) ● Zrównoleglenie części kroków ● Usunięcie oczekiwania na odpowiedź platformy AML (niepotrzebna nadgorliwość) ● Usunięcie kroku pobierania nazwy banku
  • 6. Iteracja 3 Et Voilà! :) API Gateway + Step functions Proponowane rozwiązanie: Przerobienie projektu ;) Zmiana flow: ● Zrównoleglenie części kroków ● Usunięcie oczekiwania na odpowiedź platformy AML (niepotrzebna nadgorliwość) ● Usunięcie kroku pobierania nazwy banku
  • 7. Case #2 Deployment i praca z lambdami na AWS
  • 8. Dane: ● AWS przechowuje kod lambd na S3 ● Limit to 75GB / konto / region ● Każde opublikowanie lambdy to nowa wersja ● Liczba lambd x liczba bibliotek x liczba wersji = Lambdy, wersjonowanie i przechowywanie kodu Możliwości: ● Osobne konta AWS per środowisko (generalnie dobra praktyka) ● Brak wersjonowania lambd na środowiskach nie-produkcyjnych ● Korzystanie z warstw ● Okresowe czyszczenie starych wersji lambd (np. przy użyciu pluginu serverless-prune-plugin)
  • 10. Case study ● Manager transakcji ● Początek transakcji -> kilka operacji wymagających atomowości -> Zakończenie transakcji ● ZONK! Transakcji nie ma w DDB DynamoDB i eventual consistency Gdzie się podziała ta transakcja? ● Domyślnie odczyty są eventually consistent ● ConsistentRead: true Waszym przyjacielem
  • 11. Co to TTL? ● Time To Live ● Oznaczenie elementu DDB do usunięcia ● DDB po przekroczeniu TTL usuwa rekord bez zużywania WCU ● Brak dodatkowych kosztów DynamoDB i TTL Where’s the catch? ● Elementy mogą być usunięte nawet do 48h po przekroczeniu TTL ● Do tego czasu nadal są widoczne w kwerendach ● Do momentu usunięcia mogą być edytowane (nawet samo TTL!)
  • 12. Co z tym fantem zrobić? ● Świadome wykorzystanie ○ Usuwanie rekordów, które utraciły ważność ○ Porządkowanie tabel ● Używanie FilterExpression w Query/Scanach DynamoDB i TTL
  • 13. Case #4 Zmiana oprocentowania kont oszczędnościowych
  • 14. Przykład ● Zmiana wysokości oprocentowania na kontach ● Brak możliwości batchowej edycji kont w Mambu ● Ograniczona moc obliczeniowa / ilość obsługiwanych requestów po stronie Mambu (429) ● Max concurrency nie działa dla Lambd triggerowanych przez SQS (bounce back) Lambdy triggerowane przez wiadomości na SQS
  • 15. Rozwiązanie ● Zastosowanie kolejki FIFO ● 5 groupID ● Batch size 10 ● profit $$$ Lambdy triggerowane przez wiadomości na SQS
  • 16. ● Jeśli lambda zakończyła błędem to wiadomość wraca na kolejkę ● To może prowadzić do nieskończonego przetwarzania wiadomości ● W skrajnych przypadkach poison-pill message Lambdy triggerowane przez wiadomości na SQS Jak do tego podejść? ● Dodanie DLQ z odpowiednim czasem życia ● Odpięcie triggera, zdrenowanie kolejki, podpięcie na nowo z DLQ Błędy przetwarzania wiadomości przez lambdę
  • 17. SQS pozwala publikować wiadomości o maksymalnej wielkości 256KB Co wtedy? Wrzucamy payload na S3 (max 2MB) Lambdy triggerowane przez wiadomości na SQS Ciekawostka
  • 19. ● Sposób na zrównoleglenia przetwarzania kolekcji danych ● Podobne do Parallel, tylko różny input Map w Step Functions Na co uważać? ● Limit równoległych wywołań (domyślnie MaxConcurrency: 0) ● Dla MaxConcurrency > 40 mogą wystąpić ograniczenia wywoływań ● Ryzyko DoS zależnych serwisów
  • 20. Map w Step Functions
  • 21. Map w Step Functions
  • 22. Map w Step Functions