SlideShare una empresa de Scribd logo
1 de 73
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
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/

Más contenido relacionado

La actualidad más candente

Plongée au cœur du Framework .NET 4.5
Plongée au cœur du Framework .NET 4.5Plongée au cœur du Framework .NET 4.5
Plongée au cœur du Framework .NET 4.5Microsoft
 
Industrialisation des environnements de dev avec Puppet et Amazon (mais en fa...
Industrialisation des environnements de dev avec Puppet et Amazon (mais en fa...Industrialisation des environnements de dev avec Puppet et Amazon (mais en fa...
Industrialisation des environnements de dev avec Puppet et Amazon (mais en fa...Nicolas Silberman
 
Paris stormusergroup intrudocution
Paris stormusergroup intrudocutionParis stormusergroup intrudocution
Paris stormusergroup intrudocutionParis_Storm_UG
 
Spring 3 en production
Spring 3 en productionSpring 3 en production
Spring 3 en productionJulien Dubois
 
Perf ug comment ne plus rajouter de ram a vos jvm sans savoir pourquoi
Perf ug   comment ne plus rajouter de ram a vos jvm sans savoir pourquoiPerf ug   comment ne plus rajouter de ram a vos jvm sans savoir pourquoi
Perf ug comment ne plus rajouter de ram a vos jvm sans savoir pourquoipkernevez
 
La migration continue vers Symfony
La migration continue vers SymfonyLa migration continue vers Symfony
La migration continue vers SymfonyFrancois Zaninotto
 
Perfug Guide de survie du développeur dans une application Java qui rame
Perfug Guide de survie du développeur dans une application Java qui ramePerfug Guide de survie du développeur dans une application Java qui rame
Perfug Guide de survie du développeur dans une application Java qui ramebleporini
 
Étude de cas : migration MySQL Latin 1 vers UTF-8
Étude de cas : migration MySQL Latin 1 vers UTF-8Étude de cas : migration MySQL Latin 1 vers UTF-8
Étude de cas : migration MySQL Latin 1 vers UTF-8Olivier DASINI
 
Un site web rapide ?
Un site web rapide ? Un site web rapide ?
Un site web rapide ? haricot
 
Hibernate vs le Cloud computing
Hibernate vs le Cloud computingHibernate vs le Cloud computing
Hibernate vs le Cloud computingJulien Dubois
 
Programmation réactive avec Spring 5 et Reactor
Programmation réactive avec Spring 5 et ReactorProgrammation réactive avec Spring 5 et Reactor
Programmation réactive avec Spring 5 et ReactorFlorian Beaufumé
 
Systèmes d'Exploitation - chp1-introduction
Systèmes d'Exploitation - chp1-introductionSystèmes d'Exploitation - chp1-introduction
Systèmes d'Exploitation - chp1-introductionLilia Sfaxi
 
Conférence AFUP 20minutes.Fr
Conférence AFUP 20minutes.FrConférence AFUP 20minutes.Fr
Conférence AFUP 20minutes.FrOxalide
 
Systèmes d'Exploitation - chp2-gestion des processus
Systèmes d'Exploitation - chp2-gestion des processusSystèmes d'Exploitation - chp2-gestion des processus
Systèmes d'Exploitation - chp2-gestion des processusLilia Sfaxi
 
Capacity Planning : Pratiques et outils pour regarder la foudre tomber sans p...
Capacity Planning : Pratiques et outils pour regarder la foudre tomber sans p...Capacity Planning : Pratiques et outils pour regarder la foudre tomber sans p...
Capacity Planning : Pratiques et outils pour regarder la foudre tomber sans p...Normandy JUG
 

La actualidad más candente (18)

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

Similar a Paris JUG Spring Batch

Chtijug springbatch 2011
Chtijug springbatch 2011Chtijug springbatch 2011
Chtijug springbatch 2011Olivier BAZOUD
 
Spring Batch - Julien Jakubowski - November 2010
Spring Batch - Julien Jakubowski - November 2010Spring Batch - Julien Jakubowski - November 2010
Spring Batch - Julien Jakubowski - November 2010JUG Lausanne
 
Workshop Spring - Session 4 - Spring Batch
Workshop Spring -  Session 4 - Spring BatchWorkshop Spring -  Session 4 - Spring Batch
Workshop Spring - Session 4 - Spring BatchAntoine Rey
 
Backday xebia - Chercher la performance efficacement
Backday xebia - Chercher la performance efficacement Backday xebia - Chercher la performance efficacement
Backday xebia - Chercher la performance efficacement Publicis Sapient Engineering
 
20180628 skill value_masterclass_reactnative - v1.3
20180628 skill value_masterclass_reactnative - v1.320180628 skill value_masterclass_reactnative - v1.3
20180628 skill value_masterclass_reactnative - v1.3Benoit Fillon
 
Chef - Paris BlockCamp - Nov 09
Chef - Paris BlockCamp - Nov 09Chef - Paris BlockCamp - Nov 09
Chef - Paris BlockCamp - Nov 09Olivier Gutknecht
 
SkillValue LesJeudis Master Class React Native
SkillValue LesJeudis Master Class React NativeSkillValue LesJeudis Master Class React Native
SkillValue LesJeudis Master Class React NativeBenoit Fillon
 
Elasticsearch 5.0 les nouveautés
Elasticsearch 5.0 les nouveautésElasticsearch 5.0 les nouveautés
Elasticsearch 5.0 les nouveautésMathieu Elie
 
Les données transitoires (transients) vous veulent du bien
Les données transitoires (transients) vous veulent du bienLes données transitoires (transients) vous veulent du bien
Les données transitoires (transients) vous veulent du bienBoiteaweb
 
Ops@viadeo : Puppet & Co... 6 mois après par Xavier Krantz
Ops@viadeo : Puppet & Co... 6 mois après par Xavier KrantzOps@viadeo : Puppet & Co... 6 mois après par Xavier Krantz
Ops@viadeo : Puppet & Co... 6 mois après par Xavier KrantzOlivier DASINI
 
Ez18n Annotation Processing Tool in a nutshell
Ez18n Annotation Processing Tool in a nutshellEz18n Annotation Processing Tool in a nutshell
Ez18n Annotation Processing Tool in a nutshellgdigugli
 
MHA : MySQL haute dispo, chez Viadeo par Olivier Dasini
MHA : MySQL haute dispo, chez Viadeo par Olivier DasiniMHA : MySQL haute dispo, chez Viadeo par Olivier Dasini
MHA : MySQL haute dispo, chez Viadeo par Olivier DasiniOlivier DASINI
 
Microbox : Ma toolbox microservices - Julien Roy
Microbox : Ma toolbox microservices - Julien RoyMicrobox : Ma toolbox microservices - Julien Roy
Microbox : Ma toolbox microservices - Julien Royekino
 
Présentation JSS2015 - Le Query Store de SQL Server 2016
Présentation JSS2015 - Le Query Store de SQL Server 2016Présentation JSS2015 - Le Query Store de SQL Server 2016
Présentation JSS2015 - Le Query Store de SQL Server 2016Guillaume Nocent
 

Similar a Paris JUG Spring Batch (20)

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

Paris JUG Spring Batch