Jak migrować dane pomiędzy dwoma systemami z pomocą AWS?
Migracje danych serverless
Jakub Cała
Senior Node.js Developer
jakub.cala@tsh.io
Niewspierany system
Nowy system
Wyzwania
Liczba danych
Prawie 24 240 000 operacji sumarycznie
Wydajność systemu
API nowego systemu miało swój limit procesowania
Działające środowisko
Migracja na środowisko, na którym pracował klient
Czas migracji
Migracja mogła najdłużej zajmować niecałe 40 godzin
Różne rozmiary danych
Każda migracja miała inny rozmiar danych do zmigrowania
Różne zasady migracji
Pojedynczych migracji było wiele i różniły się, były praktycznie osobnymi
projektami w kontekście mapowania danych
E T L
Extract Transform Load
AWS SQS FIFO
Usługa kolejki wiadomości, która zapewnia przetwarzanie
wiadomości w kolejności ich wysyłania, co umożliwia
skuteczne zarządzanie przepływem danych w systemach
rozproszonych.
AWS Lambda
AWS Lambda może wykorzystać MessageGroup w
kolejce SQS FIFO do kontrolowania ilości
przetwarzanych wiadomości w jednostce czasu, co jest
potrzebne w rate limitingu.
Sleep time
x = (60000 / y) * z
y - liczba requestów / min dla 1 lambdy
z - liczba requestów do zewnętrznego
API
x = y / z
y - liczba requestów na minutę
z - liczba współbieżnych lambd
AWS SQS
W 2023 roku została dodana możliwość ustawiania
Maximum Concurrency dla lambdy, gdy źródłem
zdarzenia jest AWS SQS. Pozwala to na implementacje
rate limitingu przy pomocy zwykłych kolejek SQS.
AWS Step Functions
Narzędzie do koordynacji procesów w AWS. Posiada limit
historii zdarzeń wynoszący 25 tysięcy rekordów per jedno
wywołanie.
AWS Step Functions
Istnieje możliwość wykorzystania Distributed Map w celu
przetwarzania wielkiej ilości danych w tym samym czasie.
Zwykły krok typu Map pozwala na 40 współbieżnych
wywołań, kiedy Distributed Map wspiera do 10 tysięcy
wywołań jednocześnie.
Jeden rekord = Jedna operacja
Resource może być zmigrowany tylko raz
AWS DynamoDB
Baza danych NoSQL udostępniona przez AWS. Na
podstawie tej bazy został opracowany koncept Single
Table Design pozwalający na przechowywanie danych o
różnych strukturach w pojedynczej tabeli.
Czemu nie użyć getItem bez
Single Table Design?
Raporty :)
Liczba
zmigrowanych
rekordów
Liczba
zmigrowanych
rekordów
Liczba
nieobsłużonych
rekordów
Liczba
zmigrowanych
rekordów
Liczba
nieobsłużonych
rekordów
Lista wszystkich
błędów podczas
migracji
Liczba
zmigrowanych
rekordów
Liczba
nieobsłużonych
rekordów
Lista wszystkich
błędów podczas
migracji
I to wszystko z podziałem na
grupy
Podsumowanie
Opieramy migracje na
producencie i konsumencie
Przechowujemy aktualny stan
migracji
Duże zbiory danych dzielimy
na mniejsze
Tworzymy wynik migracji w
postaci raportu
Link do artykułu:
https://tsh.io/blog/data-migration-plan/

Migracje danych serverless