Strumieniowanie danych z DynamoDB

Tworzenie aplikacji na AWS

Ricardo Sueiras

Principal Technologist

Podstawy DynamoDB Streams

 

fundamentals

  • Reaguj na zmiany w bazie danych niemal w czasie rzeczywistym.
  • Oparte na wzorcach sterowanych zdarzeniami.
  • Każde wstawienie, modyfikacja lub usunięcie generuje rekord strumienia.
  • Twórz reaktywne aplikacje bez odpytywania tabeli.
  • Domyślnie wyłączone — włącz za pomocą StreamSpecification.
  • Każdy strumień ma własny ARN, odrębny od ARN tabeli.
Tworzenie aplikacji na AWS

Okres przechowywania

 

retention

  • Rekordy strumienia są przechowywane przez 24 godziny.
    • Okres przechowywania jest stały i nie można go konfigurować.
  • Zmiana typu widoku wymaga odtworzenia strumienia.
    • Nowy strumień otrzymuje nowy ARN.
Tworzenie aplikacji na AWS

Strumienie a jednostki pojemności odczytu DynamoDB

 

rcu

  • Odczyty strumienia NIE zużywają jednostek pojemności odczytu (RCU).
  • Włączenie strumieni nie wpływa na przydzieloną przepustowość.
Tworzenie aplikacji na AWS

Rekordy strumienia

  • Każdy rekord strumienia zawiera metadane opisujące zmianę.
  • Strumienie rejestrują trzy typy zdarzeń:
    • INSERT
    • MODIFY
    • REMOVE

 

stream records

Tworzenie aplikacji na AWS
  • Typy widoków określają, jakie dane trafiają do każdego rekordu.
    • KEYS_ONLY: tylko klucz partycji i klucz sortowania.
    • NEW_IMAGE: pełny element po zmianie.
    • OLD_IMAGE: pełny element przed zmianą.
    • NEW_AND_OLD_IMAGES: element przed zmianą i po niej.
  • NEW_AND_OLD_IMAGES to podstawowy wybór przy audycie.
  • Wymagany dla DynamoDB Global Tables.

stream views

Tworzenie aplikacji na AWS
  • Strumienie zachowują kolejność w obrębie klucza partycji.
  • Lambda przetwarza rekordy w partiach.
    • Zapisuje postęp po każdej pomyślnie przetworzonej partii.
    • Nieudane partie są ponawiane.
    • Ponowienia trwają do skutku lub wygaśnięcia rekordów.

 

ordering

Tworzenie aplikacji na AWS

 

streams and aws lambda

  • Lambda to najczęściej stosowany konsument strumieni.
  • Korzysta z mapowania źródła zdarzeń opartego na odpytywaniu.
  • Odczytuje rekordy ze strumienia.
  • Wywołuje funkcję z partiami rekordów.
Tworzenie aplikacji na AWS

Wzorzec architektoniczny

 

arch patterns

  • Typowy wzorzec end-to-end:
    • Aktualizacja elementu trafia do DynamoDB.
    • Zmiana generuje rekord strumienia.
    • Rekord wyzwala Lambda do przetworzenia.
Tworzenie aplikacji na AWS

Skalowanie

 

scaling

  • Strumienie są wewnętrznie podzielone na fragmenty (shardy).
    • Podobnie jak w Kinesis Data Streams.
  • Każdy fragment obsługuje maksymalnie dwóch jednoczesnych konsumentów.
    • Przekroczenie tego limitu to częsta przyczyna ograniczania odczytów.
Tworzenie aplikacji na AWS
  • Współbieżność Lambda skaluje się wraz z liczbą fragmentów.
  • Dostosuj przetwarzanie za pomocą:
    • BatchSize: maksymalna liczba rekordów na wywołanie.
    • MaximumBatchingWindow: czas oczekiwania przed wysłaniem niepełnej partii.
    • MaximumRetryAttempts: liczba ponowień przed przekazaniem do miejsca docelowego błędów.
    • MaximumRecordAgeInSeconds: odrzucanie rekordów starszych niż podany wiek.
    • ParallelizationFactor: równoległe przetwarzanie na fragment (maks. 10).

scaling with lambda

Tworzenie aplikacji na AWS

Filtrowanie i okna tumbling

  • Lambda obsługuje kryteria filtrowania.
    • Odrzuca rekordy przed wywołaniem funkcji.
    • Ogranicza zbędne wywołania i koszty.
  • Lambda obsługuje okna tumbling.
    • Agreguje stan między partiami w obrębie fragmentu.

 

filtering and tumbling windows

Tworzenie aplikacji na AWS

Zarządzanie zduplikowanymi rekordami

  • Strumienie rejestrują każdą zmianę dokładnie raz.
  • Lambda przetwarza rekordy z semantyką co najmniej jednej dostawy.
    • Ponowienia mogą ponownie przetworzyć ten sam rekord.
  • Projektuj konsumentów jako idempotentnych.
  • Typowy wzorzec: przechowuj przetworzone eventID lub SequenceNumber.
    • Pomijaj już obsłużone rekordy.
    • Obie wartości pozostają stabilne podczas ponowień.
    • Niezawodne klucze idempotencji.

 

managing duplicate records

Tworzenie aplikacji na AWS

Obsługa błędów

 

handling failures

  • ReportBatchItemFailures ponawia tylko rekordy, które się nie powiodły.
  • Obsługuj błędy Lambda za pomocą:
    • BisectBatchOnFunctionError do podziału partii.
    • Ustawień kontroli ponowień.
    • Miejsc docelowych błędów dla partii, które wyczerpały ponowienia.
Tworzenie aplikacji na AWS

Integracja DynamoDB z Kinesis

 

integration

  • Tabele mogą przesyłać zmiany bezpośrednio do Kinesis Data Streams.
    • Za pośrednictwem funkcji Kinesis Data Streams for DynamoDB.
    • To odrębna, równoległa możliwość — nie łańcuchowa.
    • Zdarzenia NIE przepływają przez DynamoDB Streams.
  • Obie opcje mogą działać jednocześnie na tej samej tabeli.
    • Działają niezależnie od siebie.
    • Zasilają szersze architektury strumieniowania i analityki.
Tworzenie aplikacji na AWS

Monitorowanie: typowe problemy

 

troubleshooting

  • Typowe problemy operacyjne, na które warto zwrócić uwagę:
    • Gorące partycje.
    • Nieudane ponowienia.
    • Zduplikowane przetwarzanie.
    • Ograniczanie przepustowości i opóźnienia konsumentów.
Tworzenie aplikacji na AWS

Monitorowanie: metryki CloudWatch

  • Kluczowe metryki CloudWatch do monitorowania:
    • Lambda Errors: ujawniają błędy kodu lub problemów downstream.
    • IteratorAge: wysokie wartości wskazują na wolnych konsumentów.
    • Metryki ograniczania: przekroczenie limitów odczytu.
    • Błędy przetwarzania partii: rekordy wysłane do kolejki DLQ.

 

troubleshooting

Tworzenie aplikacji na AWS

Bezpieczeństwo

  • Dostęp do strumieni jest kontrolowany przez uprawnienia IAM.
  • Strumienie dziedziczą ustawienia szyfrowania tabeli.
    • W tym szyfrowanie po stronie serwera w spoczynku z KMS.
  • Stosuj zasady minimalnych uprawnień do konsumentów i procesorów downstream.

 

security

Tworzenie aplikacji na AWS

Czas na praktykę!

Tworzenie aplikacji na AWS

Preparing Video For Download...