Lokale Skalierung
- Multi-threaded Step
- Parallele Steps
- Partitioning
Verteilte Skalierung
- Partitioning
- Remote Chunking
Multi-threaded Step
Lokale Skalierung
Woher kommen die Threads?
- java.util.concurrent.Executor
- z.B. ThreadPoolExecutor
- Application-Server verwalten eigene Pools
<step id="loading">
<tasklet task-executor="taskExecutor" throttle-limit="5">
...
</tasklet>
</step>
Multi-threaded Step
<job id="multiThreadedJob">
<step id="step">
<tasklet task-executor="taskExecutor">
<chunk reader="itemReader" writer="itemWriter"/>
</tasklet>
</step>
</job>
<task:executor id="taskExecutor" pool-size="5">
Multi-threaded Step
Stateful vs. Restartable
- Stateful + Restartable = Häufigster Fall in Spring Batch
- ItemStream kann theoretisch Threadsafe sein!
- Pattern: Synchronized ItemReader/ItemStream
- Reader darf nicht Bottleneck sein
- Besser: Partitioning verwenden
Multi-threaded Step
+ Hoch skalierbar
+ Einfach zu konfigurieren
- Alle Komponenten müssen thread-safe sein
Parallel Steps
Parallel Steps
<job id="importJob">
<split id="splitStep" task-executor="taskExecutor">
<flow>
<step id="partnerStep">
<tasklet ref="partnerTasklet"/>
</step>
</flow>
<flow>
<step id="vertragStep">
<tasklet ref="vertragTasklet"/>
</step>
</flow>
</split>
</job>
Partitioning
Partitioning
Partitioning
Partitioning
<job id="partitionedFlatFileJob">
<step id="step">
<partition step="step1" partitioner="partitioner">
<handler task-executor="taskExecutor" />
</partition>
</step>
</job>
<bean id="partitioner" class="org.springframework...MultiResourcePartitioner">
<property name="resources" value="file:inputFile*.txt" />
</bean>
Versch. Implementierungen
Local (TaskExecutor)
Spring Remoting
JMS
Spring Integration
Partitioning
+ Hoch skalierbar
+ Keine transaktionale Middleware
+ Kein Bottleneck beim ItemReader
+ Datenlokalität
- Struktur der Input Daten muss bekannt sein
Remote Chunking
Remote Chunking
Remote Chunking
+ Struktur der Input Daten muss bekannt sein
- Ggf. Bottleneck beim ItemReader
- Transaktionale Middleware erforderlich
- Alle Items werden serialisiert