Top Banner
Spring Batch Mardi 14 Mai 2013 Paris JUG Olivier Bazoud Julien Jakubowski
70

Spring Batch ParisJUG

May 25, 2015

Download

Documents

Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Spring Batch ParisJUG

Spring Batch Mardi 14 Mai 2013

Paris JUG

Olivier Bazoud Julien Jakubowski

Page 2: Spring Batch ParisJUG

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: Spring Batch ParisJUG

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: Spring Batch ParisJUG

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: Spring Batch ParisJUG

Batch : de quoi parle-t-on ?

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

Page 6: Spring Batch ParisJUG

Batch : de quoi parle-t-on ?

… potentiellement grands volumes…

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

Page 7: Spring Batch ParisJUG

Batch : de quoi parle-t-on ?

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

Page 8: Spring Batch ParisJUG

Batch : de quoi parle-t-on ?

batch ≠ scheduler

Page 9: Spring Batch ParisJUG

Problèmes récurrents •  Fiabilité

Page 10: Spring Batch ParisJUG

Problèmes récurrents •  Maintenabilité

Page 11: Spring Batch ParisJUG

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

Page 12: Spring Batch ParisJUG

Spring Batch propose…

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

Parallélisme Partitionnement

Spring Batch Admin

Page 13: Spring Batch ParisJUG

Spring Batch Notions de base

Page 14: Spring Batch ParisJUG

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: Spring Batch ParisJUG
Page 16: Spring Batch ParisJUG

Schéma du batch

RecipeStep

InitialStep

Ecrit une date dans un log

Chunk oriented tasklet

ItemReader ItemWriter ItemProcessor

Page 17: Spring Batch ParisJUG

Tasklet

RecipeStep

InitialStep

Chunk oriented tasklet

ItemReader ItemProcessor ItemWriter

Ecrit une date dans un log

Page 18: Spring Batch ParisJUG

Tasklet

•  Besoin –  Effectuer 1 tâche unitaire

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

Page 19: Spring Batch ParisJUG

ItemReader

RecipeStep

InitialStep

InitialTasklet

Chunk oriented tasklet

ItemReader ItemWriter ItemProcessor ItemReader

Page 20: Spring Batch ParisJUG

ItemReader •  Besoin

–  Lire le XML de recettes

•  ItemReader –  Fournit des items en entrée

Page 21: Spring Batch ParisJUG

Morceaux de code

Page 22: Spring Batch ParisJUG

ItemProcessor

RecipeStep

InitialStep

InitialTasklet

Chunk oriented tasklet

ItemReader ItemWriter ItemProcessor

Page 23: Spring Batch ParisJUG

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: Spring Batch ParisJUG

ItemWriter

RecipeStep

InitialStep

InitialTasklet

Chunk oriented tasklet

ItemReader ItemProcessor ItemWriter

Page 25: Spring Batch ParisJUG

ItemWriter •  Besoin

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

•  ItemWriter –  Ecrit les items

Page 26: Spring Batch ParisJUG

Chunk

RecipeStep

InitialStep

InitialTasklet

Chunk oriented tasklet

ItemReader ItemProcessor ItemWriter

Page 27: Spring Batch ParisJUG

Chunk

•  Besoin –  Lire, transformer et écrire

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

Page 28: Spring Batch ParisJUG

Chunk

Taille du lot = commit interval = 2

Page 29: Spring Batch ParisJUG

Step

RecipeStep

InitialStep

Chunk oriented tasklet

ItemReader ItemProcessor ItemWriter

InitialTasklet

Page 30: Spring Batch ParisJUG

Step

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

Page 31: Spring Batch ParisJUG

Job

RecipeStep

InitialStep

Chunk oriented tasklet

ItemReader ItemProcessor ItemWriter

InitialTasklet

Page 32: Spring Batch ParisJUG

Job

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

Spring Tools Suite

Page 33: Spring Batch ParisJUG

Tests automatisés

•  Coder un batch en TDD

•  Tests d'intégration facilités

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

Page 34: Spring Batch ParisJUG

Forces et faiblesses

✔  Batchs complexes mieux maintenables ✔  Productivité ✔  Tests

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

Page 35: Spring Batch ParisJUG

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: Spring Batch ParisJUG

JSR-352 « javax.batch »

Ressemble beaucoup à Spring Batch

Page 37: Spring Batch ParisJUG

Spring Batch Allons plus loin

Page 38: Spring Batch ParisJUG

Un batch plus robuste

Page 39: Spring Batch ParisJUG

Flow

Page 40: Spring Batch ParisJUG

Scaling

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

Page 41: Spring Batch ParisJUG

Monitoring

Page 42: Spring Batch ParisJUG

Spring Batch Admin

Page 43: Spring Batch ParisJUG

Un batch plus robuste reprise sur erreurs

Page 44: Spring Batch ParisJUG

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: Spring Batch ParisJUG

Reprise sur erreur: Skip

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

0001;ABC;DEF; 0002;ABC;DEF; 000zxjgxdjghjsdfkud 0004;ABC;DEF;

Page 46: Spring Batch ParisJUG

Reprise sur erreur: Retry

Page 47: Spring Batch ParisJUG

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: Spring Batch ParisJUG

Reprise sur erreur: Restart

Page 49: Spring Batch ParisJUG

Reprise sur erreur: Restart

•  Spring batch stocke des méta data

Page 50: Spring Batch ParisJUG

Reprise sur erreur: Restart

•  Indique si le job est « restartable »

•  Indique le nombre max de « restart »

•  Reader/Writer doivent être « restartable »

Page 51: Spring Batch ParisJUG

Reprise sur erreur Conclusion

•  Ecarter des items défectueux (skip)

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

•  Redémarrer un job (restart)

Page 52: Spring Batch ParisJUG

Flow

Page 53: Spring Batch ParisJUG

Gestion du flow

•  Exemple plus simple ;)

StepA

StepB

StepAlert FAILED

*

Page 54: Spring Batch ParisJUG

Gestion du flow

Page 55: Spring Batch ParisJUG

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: Spring Batch ParisJUG

Scaling

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

Page 57: Spring Batch ParisJUG

Scaling

Page 58: Spring Batch ParisJUG

Horizontal Scaling

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

•  Batch Orienté Tâche ou Worker

Page 59: Spring Batch ParisJUG

Horizontal Scaling

Worker  Batch  

Worker  Batch  

Spring  Batch  

Worker  Batch  

AMQP  Spring  Integra6on  

Exchange  

Queue  Batch  

Spring  Batch   Spring  Batch  

AMQP  Spring  Integra6on  

Page 60: Spring Batch ParisJUG

Scaling

•  Si un ItemProcessor est « lent »

•  ItemProcessor en asynchrone •  ItemWriter attend la fin des processors

•  AsyncItemProcessor / AsyncItemWriter

Page 61: Spring Batch ParisJUG

Scaling

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

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

Page 62: Spring Batch ParisJUG

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: Spring Batch ParisJUG

Monitoring

•  Graphite http://graphite.wikidot.com

Page 64: Spring Batch ParisJUG

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: Spring Batch ParisJUG

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: Spring Batch ParisJUG

Monitoring

Mode push au lieu de pull

Page 67: Spring Batch ParisJUG

Monitoring

Page 68: Spring Batch ParisJUG

Spring Batch Admin

Page 69: Spring Batch ParisJUG

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: Spring Batch ParisJUG

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/