Transcript
Page 1: Paris JUG Spring Batch

Spring BatchMardi 14 Mai 2013

Paris JUG

Olivier Bazoud

Julien Jakubowski

Page 2: Paris JUG Spring Batch

Julien Jakubowski @jak78

Java depuis > 10 ans

Spécialisé Java EE / Spring

Vos réactions: #springbatch #parisjug

Intervenants

Olivier Bazoud @obazoud

Architecte technique sénior

Java EE / Spring, Spring Batch, NoSQL, Node.js

Co-auteur de « Spring Batch in Action »

Page 3: Paris JUG Spring Batch

De quoi va-t-on parler ce soir ?

• On va parler de batchs en Java

• … et aussi de bière

http://www.flickr.com/photos/fromeyetopixel/2559391584/

Page 4: Paris JUG Spring Batch

Nos objectifs

En sortant de la salle, vous savez:

Si Spring Batch est utile pour vous (ou pas)

Les notions principales de Spring Batch

… et quelques notions avancées

Faire un batch « Spring Batch » dès demain

https://github.com/obazoud/spring-batch-sug

Page 5: Paris JUG Spring Batch

Batch : de quoi parle-t-on ?

Batch processing = répétition de traitements sur un ensemble de données…

Page 6: Paris JUG Spring Batch

Batch : de quoi parle-t-on ?

… potentiellement grands volumes…

http://www.flickr.com/photos/claudiasofia99/2878579560/

Page 7: Paris JUG Spring Batch

Batch : de quoi parle-t-on ?

… sans intervention d’un utilisateur humain – pas d’interface homme-machine

Page 8: Paris JUG Spring Batch

Batch : de quoi parle-t-on ?

batch ≠ scheduler

Page 9: Paris JUG Spring Batch

Problèmes récurrents• Fiabilité

Page 10: Paris JUG Spring Batch

Problèmes récurrents• Maintenabilité

Page 11: Paris JUG Spring Batch

Problèmes récurrents• Réinvention de la roue… carrée

Page 12: Paris JUG Spring Batch

Spring Batch propose…

• Un cadre• Un vocabulaire (domain language)• Traitement par lots• Flow, Reprise sur erreur, …• Spring dans ses batchs• …

Parallélisme

PartitionnementSpring Batch Admin

Page 13: Paris JUG Spring Batch

Spring Batch

Notions de base

Page 14: Paris JUG Spring Batch

BeerBatch• Ecrire la date de début du batch• Lire le fichier XML de recettes, au format BeerXML• Ecrire en base de données

Page 15: Paris JUG Spring Batch
Page 16: Paris JUG Spring Batch

Schéma du batch

RecipeStep

InitialStep

Ecrit une date dans un log

Chunk oriented tasklet

ItemReader ItemWriterItemProcessor

Page 17: Paris JUG Spring Batch

Tasklet

RecipeStep

InitialStep

Chunk oriented tasklet

ItemReader ItemProcessor ItemWriter

Ecrit une date dans un log

Page 18: Paris JUG Spring Batch

Tasklet

• Besoin– Effectuer 1 tâche unitaire

• Exemples– Unzip d’un fichier– Ecrire une date dans un log– …

Page 19: Paris JUG Spring Batch

ItemReader

RecipeStep

InitialStep

InitialTasklet

Chunk oriented tasklet

ItemReader ItemWriterItemProcessorItemReader

Page 20: Paris JUG Spring Batch

ItemReader• Besoin

– Lire le XML de recettes

• ItemReader– Fournit des items en entrée

Page 21: Paris JUG Spring Batch

Morceaux de code

Page 22: Paris JUG Spring Batch

ItemProcessor

RecipeStep

InitialStep

InitialTasklet

Chunk oriented tasklet

ItemReader ItemWriterItemProcessor

Page 23: Paris JUG Spring Batch

ItemProcessor• Besoin

– Transforme, valide et / ou filtre une recette

• ItemProcessor– Transforme un item en un autre– Filtrer ou rejeter un item– Emplacement pour les « règles métier »

Page 24: Paris JUG Spring Batch

ItemWriter

RecipeStep

InitialStep

InitialTasklet

Chunk oriented tasklet

ItemReader ItemProcessor ItemWriter

Page 25: Paris JUG Spring Batch

ItemWriter• Besoin

– Décharge les bières dans une base SQL

• ItemWriter– Ecrit les items

Page 26: Paris JUG Spring Batch

Chunk

RecipeStep

InitialStep

InitialTasklet

Chunk oriented tasklet

ItemReader ItemProcessor ItemWriter

Page 27: Paris JUG Spring Batch

Chunk

• Besoin– Lire, transformer et écrire

• Chunk– Lit et transforme chaque recette successivement– Ecrit les recettes, par lot

Page 28: Paris JUG Spring Batch

Chunk

Taille du lot = commit interval = 2

Page 29: Paris JUG Spring Batch

Step

RecipeStep

InitialStep

Chunk oriented tasklet

ItemReader ItemProcessor ItemWriter

InitialTasklet

Page 30: Paris JUG Spring Batch

Step

• Besoin– Etape dans le processus du batch– Contrôle le workflow

Page 31: Paris JUG Spring Batch

Job

RecipeStep

InitialStep

Chunk oriented tasklet

ItemReader ItemProcessor ItemWriter

InitialTasklet

Page 32: Paris JUG Spring Batch

Job

• Besoin– Décrire les étapes du batch– Composé d’un ou plusieurs steps

Spring Tools Suite

Page 33: Paris JUG Spring Batch

Tests automatisés

• Coder un batch en TDD

• Tests d'intégration facilités

https://github.com/obazoud/spring-batch-sug

Page 34: Paris JUG Spring Batch

Forces et faiblesses

✔ Batchs complexes mieux maintenables✔ Productivité✔ Tests

✗Ticket d'entrée✗Ne convient pas à tous les batchs

Page 35: Paris JUG Spring Batch

Retour d’expérience Ekino

• Avec « Spring Batch »– Moins de code produit– Plus de tests unitaires & intégrations– Spring Batch s'occupe de la montée en charge– SQL/MyBatis

• Gain par rapport à un batch « legacy »– XML 100Mo + SQL; Gain : de 60 mn à 8mn– 10 fichiers 4Mo + SQL; Gain : de 10mn à 1mn30s– 20 fois rapide qu’un batch en … PHP ;)

Page 36: Paris JUG Spring Batch

JSR-352 « javax.batch »

Ressemble beaucoup à Spring Batch

Page 37: Paris JUG Spring Batch

Spring BatchAllons plus loin

Page 38: Paris JUG Spring Batch

Un batch plus robuste

Page 39: Paris JUG Spring Batch

Flow

Page 40: Paris JUG Spring Batch

Scaling

http://www.flickr.com/photos/claudiasofia99/2878579560/

Page 41: Paris JUG Spring Batch

Monitoring

Page 42: Paris JUG Spring Batch

Spring Batch Admin

Page 43: Paris JUG Spring Batch

Un batch plus robuste reprise sur erreurs

Page 44: Paris JUG Spring Batch

Reprise sur erreur

• Spring Batch « out-of-the-box » propose:– Sauter les erreurs non bloquantes (skip)

• survivre à quelques données invalides

– Recommencer un traitement (retry)• survivre à une indisponibilité temporaire

– Redémarrer un batch (restart)• on est en mesure de le relancer

Page 45: Paris JUG Spring Batch

Reprise sur erreur: Skip

• Par défaut, au-delà du « skip-limit », failed

0001;ABC;DEF;0002;ABC;DEF;000zxjgxdjghjsdfkud0004;ABC;DEF;

Page 46: Paris JUG Spring Batch

Reprise sur erreur: Retry

Page 47: Paris JUG Spring Batch

Reprise sur erreur: Retry

• Relancer une opération si indisponibilité

• Par défaut, au-delà du « retry-limit », failed• Personnaliser le « retry »

– RetryPolicy– Stratégie entre 2 « retry »: BackoffPolicy

• RetryListener pour écouter

Page 48: Paris JUG Spring Batch

Reprise sur erreur: Restart

Page 49: Paris JUG Spring Batch

Reprise sur erreur: Restart

• Spring batch stocke des méta data

Page 50: Paris JUG Spring Batch

Reprise sur erreur: Restart

• Indique si le job est « restartable »

• Indique le nombre max de « restart »

• Reader/Writer doivent être « restartable »

Page 51: Paris JUG Spring Batch

Reprise sur erreurConclusion

• Ecarter des items défectueux (skip)

• Recommencer une step s’il y a une erreur temporaire (retry)

• Redémarrer un job (restart)

Page 52: Paris JUG Spring Batch

Flow

Page 53: Paris JUG Spring Batch

Gestion du flow

• Exemple plus simple ;)

StepA

StepB

StepAlertFAILED

*

Page 54: Paris JUG Spring Batch

Gestion du flow

Page 55: Paris JUG Spring Batch

Gestion du flow

• Status– Etat du job/step en cours/après d’exécution

• Créer et utiliser ses propres « status »

• Gérer le flow– StepExecutionListener– JobDecider

Page 56: Paris JUG Spring Batch

Scaling

http://www.flickr.com/photos/claudiasofia99/2878579560/

Page 57: Paris JUG Spring Batch

Scaling

Page 58: Paris JUG Spring Batch

Horizontal Scaling

• RabbitMQ: Message-Oriented Middleware– Découpler le producteur des consommateurs

• Batch Orienté Tâche ou Worker

Page 59: Paris JUG Spring Batch

Horizontal Scaling

WorkerBatch

WorkerBatch

Spring Batch

WorkerBatch

AMQPSpring Integration

Exchange

QueueBatch

Spring Batch Spring Batch

AMQPSpring Integration

Page 60: Paris JUG Spring Batch

Scaling

• Si un ItemProcessor est « lent »

• ItemProcessor en asynchrone• ItemWriter attend la fin des processors

• AsyncItemProcessor / AsyncItemWriter

Page 61: Paris JUG Spring Batch

Scaling

• Multi-threaded Step (Local)– Une Step est multithreaded

• Parallel Steps (Local)– Les Steps sont exécutées en parallèle

Page 62: Paris JUG Spring Batch

Scaling

• Remote Chunking of Step (Remote)– Distribution des chunks (Horizontal Scaling)– Reader sur les master– Processor/Writer sur les slaves

• Partitioning a Step (Local + Remote)– Découpe les données suivant une clé de

partition

Page 63: Paris JUG Spring Batch

Monitoring

• Graphite http://graphite.wikidot.com

Page 64: Paris JUG Spring Batch

Monitoring

• Collectd – http://collectd.org

– démon qui recueille périodiquement des statistiques de performance du système

• JMXTrans – https://github.com/jmxtrans/jmxtrans

– Interroge les données JMX de la JVM et les envoyer dans Graphite

Page 65: Paris JUG Spring Batch

Monitoring

• Metrics – http://metrics.codahale.com/

– Connaitre l’intérieur de votre application– Gauges, Counters, Meters, Histogram, Timers

• Extension pour Spring Batch– https://github.com/obazoud/metrics-spring-batch– Bientôt sur Maven Central

Page 66: Paris JUG Spring Batch

Monitoring

Mode push au lieu de pull

Page 67: Paris JUG Spring Batch

Monitoring

Page 68: Paris JUG Spring Batch

Spring Batch Admin

Page 69: Paris JUG Spring Batch

Spring Batch Admin

• Console Web pour Spring Batch– « Standalone » ou « Embedded »– API Rest– Uploader une configuration, un fichier à traiter– « Customisable »– Informations sur les jobs, steps, …

Page 70: Paris JUG Spring Batch

« Spring Batch in Action »

http://bit.ly/springbatchinaction

http://www.ekino.com

Un petit Tweet à @3k1n0 ;)

Page 71: Paris JUG Spring Batch

ROTI

http://www.flickr.com/photos/34943981@N00/202923614/

Page 72: Paris JUG Spring Batch

Liens• Le code de la présentation

– https://github.com/obazoud/spring-batch-sug

• Spring Batch 2.1.x– http://static.springsource.org/spring-batch

• Spring Batch 2.2 coming soon

• Articles sur le web– http://www.theserverside.com/news/1363855/Spring-Batch-Overview– http://www.infoq.com/presentations/syer-introducing-spring-batch– http://blog.zenika.com/index.php?post/2010/03/05/To-batch-or-not-to-

batch– http://blog.octo.com/spring-batch-par-quel-bout-le-prendre/

Page 73: Paris JUG Spring Batch

Questions ?

http://www.flickr.com/photos/crystaljingsr/3914729343/in/set-72157622354789320/


Top Related