SlideShare une entreprise Scribd logo
Spring Batch
Mardi 14 Mai 2013
Paris JUG
Olivier Bazoud
Julien Jakubowski
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 »
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/
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
Batch : de quoi parle-t-on ?
Batch processing = répétition de traitements sur
un ensemble de données…
Batch : de quoi parle-t-on ?
… potentiellement grands volumes…
http://www.flickr.com/photos/claudiasofia99/2878579560/
Batch : de quoi parle-t-on ?
… sans intervention d’un utilisateur humain – pas
d’interface homme-machine
Batch : de quoi parle-t-on ?
batch ≠ scheduler
Problèmes récurrents
• Fiabilité
Problèmes récurrents
• Maintenabilité
Problèmes récurrents
• Réinvention de la roue… carrée
Spring Batch propose…
• Un cadre
• Un vocabulaire (domainlanguage)
• Traitement par lots
• Flow, Reprise sur erreur, …
• Spring dans ses batchs
• …
Parallélisme
Partitionnement
Spring Batch Admin
Spring Batch
Notions de base
BeerBatch
• Ecrire la date de début du batch
• Lire le fichier XML de recettes, au format BeerXML
• Ecrire en base de données
Paris JUG Spring Batch
Schéma du batch
RecipeStep
InitialStep
Ecrit une date dans un log
Chunkorientedtasklet
ItemReader ItemWriterItemProcessor
Tasklet
RecipeStep
InitialStep
Chunkorientedtasklet
ItemReader ItemProcessor ItemWriter
Ecrit une date dans un log
Tasklet
• Besoin
– Effectuer 1 tâche unitaire
• Exemples
– Unzip d’un fichier
– Ecrire une date dans un log
– …
ItemReader
RecipeStep
InitialStep
InitialTasklet
Chunkorientedtasklet
ItemReader ItemWriterItemProcessorItemReader
ItemReader
• Besoin
– Lire le XML de recettes
• ItemReader
– Fournit des items en entrée
Morceaux de code
ItemProcessor
RecipeStep
InitialStep
InitialTasklet
Chunkorientedtasklet
ItemReader ItemWriterItemProcessor
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 »
ItemWriter
RecipeStep
InitialStep
InitialTasklet
Chunkorientedtasklet
ItemReader ItemProcessor ItemWriter
ItemWriter
• Besoin
– Décharge les bières dans une base SQL
• ItemWriter
– Ecrit les items
Chunk
RecipeStep
InitialStep
InitialTasklet
Chunkorientedtasklet
ItemReader ItemProcessor ItemWriter
Chunk
• Besoin
– Lire, transformer et écrire
• Chunk
– Lit et transforme chaque recette successivement
– Ecrit les recettes, par lot
Chunk
Taille du lot = commit interval = 2
Step
RecipeStep
InitialStep
Chunkorientedtasklet
ItemReader ItemProcessor ItemWriter
InitialTasklet
Step
• Besoin
– Etape dans le processus du batch
– Contrôle le workflow
Job
RecipeStep
InitialStep
Chunkorientedtasklet
ItemReader ItemProcessor ItemWriter
InitialTasklet
Job
• Besoin
– Décrire les étapes du batch
– Composé d’un ou plusieurs steps
Spring Tools Suite
Tests automatisés
• Coder un batch en TDD
• Tests d'intégration facilités
https://github.com/obazoud/spring-batch-sug
Forces et faiblesses
✔Batchs complexes mieux maintenables
✔ Productivité
✔ Tests
✗Ticket d'entrée
✗Ne convient pas à tous les batchs
Retour d’expérience
Ekino
• Avec « Spring Batch »
– Moins de code produit
– Plus de tests unitaires & intégrations
– SpringBatch 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 ;)
JSR-352 « javax.batch »
Ressemble beaucoup à
Spring Batch
Spring Batch
Allons plus loin
Un batch plus robuste
Flow
Scaling
http://www.flickr.com/photos/claudiasofia99/2878579560/
Monitoring
Spring Batch Admin
Un batch plus robuste
reprise sur erreurs
Reprise sur erreur
• SpringBatch « 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
Reprise sur erreur: Skip
• Par défaut, au-delà du « skip-limit », failed
0001;ABC;DEF;
0002;ABC;DEF;
000zxjgxdjghjsdfkud
0004;ABC;DEF;
Reprise sur erreur: Retry
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
Reprise sur erreur: Restart
Reprise sur erreur:
Restart
• Spring batch stocke des méta data
Reprise sur erreur:
Restart
• Indique si le job est «restartable »
• Indique le nombre max de « restart »
• Reader/Writer doivent être « restartable »
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)
Flow
Gestion du flow
• Exemple plus simple ;)
StepA
StepB
StepAlert
FAILED
*
Gestion du flow
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
Scaling
http://www.flickr.com/photos/claudiasofia99/2878579560/
Scaling
Horizontal Scaling
• RabbitMQ: Message-Oriented Middleware
– Découpler le producteur des consommateurs
• Batch Orienté Tâche ou Worker
Horizontal Scaling
Worker
Batch
Worker
Batch
Spring Batch
Worker
Batch
AMQP
Spring Integration
Exchange
Queue
Batch
Spring Batch Spring Batch
AMQP
Spring Integration
Scaling
• Si un ItemProcessorest « lent »
• ItemProcessor en asynchrone
• ItemWriter attend la fin des processors
• AsyncItemProcessor / AsyncItemWriter
Scaling
• Multi-threaded Step (Local)
– Une Step est multithreaded
• Parallel Steps (Local)
– Les Steps sontexécutées en parallèle
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éessuivantuneclé de
partition
Monitoring
• Graphite http://graphite.wikidot.com
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
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
Monitoring
Mode push au lieu de pull
Monitoring
Spring Batch Admin
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, …
« Spring Batch in Action »
http://bit.ly/springbatchinaction
http://www.ekino.com
Un petit Tweet à @3k1n0 ;)
ROTI
http://www.flickr.com/photos/34943981@N00/202923614/
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 comingsoon
• 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/
Questions ?
http://www.flickr.com/photos/crystaljingsr/3914729343/in/set-72157622354789320/

Contenu connexe

PDF
WS User Group - Spring Batch - Xebia
PPTX
Spring Batch Avance
PDF
Spring Batch ParisJUG
KEY
Spring Batch 17-05-2011
PPTX
Breizhjug spring batch 2011
PDF
Du JavaScript propre ? Challenge accepted ! @Devoxx France 2013
PPTX
Guss webcasts Tempdb Internals - june 2013
PDF
REX Storm Redis
WS User Group - Spring Batch - Xebia
Spring Batch Avance
Spring Batch ParisJUG
Spring Batch 17-05-2011
Breizhjug spring batch 2011
Du JavaScript propre ? Challenge accepted ! @Devoxx France 2013
Guss webcasts Tempdb Internals - june 2013
REX Storm Redis

Tendances (18)

PDF
Spring Batch - concepts de base
PPTX
Plongée au cœur du Framework .NET 4.5
PDF
Industrialisation des environnements de dev avec Puppet et Amazon (mais en fa...
PDF
Paris stormusergroup intrudocution
PDF
Spring 3 en production
PDF
Perf ug comment ne plus rajouter de ram a vos jvm sans savoir pourquoi
PDF
La migration continue vers Symfony
PDF
Perfug Guide de survie du développeur dans une application Java qui rame
PDF
Étude de cas : migration MySQL Latin 1 vers UTF-8
PDF
Un site web rapide ?
PDF
Hibernate vs le Cloud computing
PPTX
Programmation réactive avec Spring 5 et Reactor
PDF
Systèmes d'Exploitation - chp1-introduction
PPT
Conférence AFUP 20minutes.Fr
PDF
Systèmes d'Exploitation - chp2-gestion des processus
PDF
Capacity Planning : Pratiques et outils pour regarder la foudre tomber sans p...
KEY
Paris RailsCamp 2009
PPTX
WebSocket avec Java EE 7
Spring Batch - concepts de base
Plongée au cœur du Framework .NET 4.5
Industrialisation des environnements de dev avec Puppet et Amazon (mais en fa...
Paris stormusergroup intrudocution
Spring 3 en production
Perf ug comment ne plus rajouter de ram a vos jvm sans savoir pourquoi
La migration continue vers Symfony
Perfug Guide de survie du développeur dans une application Java qui rame
Étude de cas : migration MySQL Latin 1 vers UTF-8
Un site web rapide ?
Hibernate vs le Cloud computing
Programmation réactive avec Spring 5 et Reactor
Systèmes d'Exploitation - chp1-introduction
Conférence AFUP 20minutes.Fr
Systèmes d'Exploitation - chp2-gestion des processus
Capacity Planning : Pratiques et outils pour regarder la foudre tomber sans p...
Paris RailsCamp 2009
WebSocket avec Java EE 7
Publicité

Similaire à Paris JUG Spring Batch (20)

PPTX
Chtijug springbatch 2011
PDF
Spring Batch - Julien Jakubowski - November 2010
PDF
Spring Batch
PPTX
Workshop Spring - Session 4 - Spring Batch
PDF
Sug spring batch
PDF
Spring Batch
PDF
Backday xebia - Chercher la performance efficacement
PPTX
20180628 skill value_masterclass_reactnative - v1.3
PDF
Power Shell V2 Full
KEY
Chef - Paris BlockCamp - Nov 09
PPTX
SkillValue LesJeudis Master Class React Native
PPTX
Elasticsearch 5.0 les nouveautés
PPTX
Javascript proprement
PDF
Les données transitoires (transients) vous veulent du bien
PDF
YaJUG - Spring 3.0
PDF
Ops@viadeo : Puppet & Co... 6 mois après par Xavier Krantz
PPTX
Ez18n Annotation Processing Tool in a nutshell
PDF
MHA : MySQL haute dispo, chez Viadeo par Olivier Dasini
PDF
Microbox : Ma toolbox microservices - Julien Roy
PPTX
Présentation JSS2015 - Le Query Store de SQL Server 2016
Chtijug springbatch 2011
Spring Batch - Julien Jakubowski - November 2010
Spring Batch
Workshop Spring - Session 4 - Spring Batch
Sug spring batch
Spring Batch
Backday xebia - Chercher la performance efficacement
20180628 skill value_masterclass_reactnative - v1.3
Power Shell V2 Full
Chef - Paris BlockCamp - Nov 09
SkillValue LesJeudis Master Class React Native
Elasticsearch 5.0 les nouveautés
Javascript proprement
Les données transitoires (transients) vous veulent du bien
YaJUG - Spring 3.0
Ops@viadeo : Puppet & Co... 6 mois après par Xavier Krantz
Ez18n Annotation Processing Tool in a nutshell
MHA : MySQL haute dispo, chez Viadeo par Olivier Dasini
Microbox : Ma toolbox microservices - Julien Roy
Présentation JSS2015 - Le Query Store de SQL Server 2016
Publicité

Paris JUG Spring Batch