Temat prezentacji – "Przetwarzanie wsadowe z wykorzystaniem Spring Batch".
Podczas prelekcji dowiecie się:
* co kryje się pod pojęciem przetwarzania wsadowego,
* czym charakteryzuje się framework Spring Batch oraz jakie są jego podstawowe zalety,
* jakie techniki skalowania wspiera Spring Batch i jak ich realizacja wygląda w praktyce,
* jak utworzyć aplikację realizującą przetwarzanie wsadowe
Kod źródłowy: https://github.com/jSessionPL/local-spring-batch-job
Przetwarzanie wsadowe polega na wykonywaniu serii zadań przez komputer. Zazwyczaj kolejne zadania są ze sobą powiązane: dane wyjściowe po zakończeniu danego etapu przekazywane są kolejnemu któremu służą jako dane wejściowe.
Zadania wsadowe organizowane są w ten sposób, by ich realizacja przebiegała bez udziału użytkownika co kontrastuje z pracą programów interaktywnych, które tego wymagają.
Dzięki temu przetwarzanie wsadowe posiada pewne zalety. Minimalizacja czasu bezczynności systemu dzięki pracy bez ingerencji użytkownika oraz efektywne wykorzystanie zasobów (zazwyczaj drogiego) systemu.
Używany słownik pojęć
Innym typem kroku jest Tasklet Step – w przypadku kiedy nie można zastosować powyższego modelu zorientowanego na przetwarzanie pojedynczych elementów (Konieczność wywołania zdalnych usług, skryptu SQL itp.)
Operacje odczytu, procesowania oraz zapisu dla danej porcji danych odbywają się w oddzielnym wątku
Konieczność synchronizacji operacji odczytu oraz zapisu (współdzielone obiekty ItemReader, ItemWriter mogą być obiektami stanowymi)
Zawartość poszczególnych porcji danych może się różnic w stosunku do przetwarzania kroku w jednym wątku
przetwarzanie w ramach danego kroku jest rozdzielone pomiędzy różne procesy komunikujące się ze sobą za pomocą warstwy pośredniczącej.
Master step (single process) odczytuje dane, przesyła je do slaveów (multiple remote processes).
problem z przesyłaniem znacznych ilości danych do/z slaveów
możliwość bezczynności slave’ów
procesowanie powinno być bardziej kosztowne niż odczyt danych
Partitioning a Step (single or multi process)
do zrealizowania w ramach jednego procesu (każdy krok w ramach innego wątku) bądź rozdzielenie przetwarzania pomiędzy różne procesy
Framework tworzy identyczne kopie kroków (każdy zawierający oddzielną instancję reader procesor oraz wiriter) operujących na ściśle określonych zbiorach danych.
Elementy przeznaczone do procesowania są dzielone na określone partycje i przypisywane do określonym krokom do wykonania
Brak problemu wyścigów
brak wąskich gardeł wynikających z potrzeby synchronizacji operacji ItemReader oraz Item Writer
Mechanizm określający jak podzielić dane może być złożony
Konieczność oczekiwania aż ostatni ze slave’ów zakończy działanie. (potencjalnie gorszy load balancing)
Konieczność efektywnego podzielenia danych pomiędzy slave’y