SlideShare une entreprise Scribd logo
1  sur  73
Télécharger pour lire hors ligne
Interface21 UG

Spring Batch
Mercredi 20 Novembre 2013

Olivier Bazoud
Intervenant
Olivier Bazoud @obazoud
Senior developer Kyriba
Spring-* / JEE, NoSQL, Node.js
Scala bientôt ;)
Co-auteur de “Spring Batch in Action”
Sommaire
➢ C’est quoi un batch ?
➢ Problèmes récurrents
➢ Notions de bases
➢ Notions avancées
➢ Conclusion
C’est quoi un batch ?
Répétition de traitements sur des données
➔ Sur des grands volumes
C’est quoi un batch ?
… sans intervention d’un utilisateur humain
➔ pas d’interface homme-machine
C’est quoi un batch ?

batch ≠ scheduler
C’est quoi un batch ?
Exemples:
• Import flat / XML dans une base de données
– Nouveaux clients
– Flux financier…

• Mise à jour de données
– référentiel
• …
Problèmes récurrents
• Fiabilité
Problèmes récurrents
• Maintenabilité
Problèmes récurrents
• Réinvention de la roue… carrée
Spring Batch
Notions de base
Spring Batch propose…
•
•
•
•
•
•

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

Scaling
Partitionnement

Spring Batch Admin
Monitoring
Spring Batch
“Spring Batch is a lightweight,
comprehensive batch framework
designed to enable the development of
robust batch applications vital for the
daily operations of enterprise systems.”
Infrastructure
Application
Insérer des départements et des villes
dans une base de données à partir de
fichier XML
Spécifications

3.

Unzip du fichier (départements + villes)
Charger des départements dans la base
Charger des villes dans la base

➢

Lancer la web application

1.
2.
Flow
Dézipper le fichier zip

Insert des départements

Insert des villes
Job
●
●

Validation des paramètres du “job”
Composé d’une ou plusieurs étapes
○

●
●

pas forcément linéaire

Liste un ensemble de Listeners
Peut hériter d’un autre job
Flow
Dézipper le fichier zip

Ajouter des départements

Ajouter des villes
Step
●
●

Etape dans le processus du batch
“Separation of Concerns”
○

●

Distinction entre l’enchainement des étapes
et leur éxécution

Liste un ensemble de Listeners
Step
Flow
Dézipper le fichier zip

Ajouter des départements

Ajouter des villes

Lancer une commande système unzip
Tasklet
●

Permet d’éxecuter une tâche
○
○

Appel à une commande système
Appel un webservice
Tasklet
Flow
Dézipper le fichier zip

Ajouter des départements

Lire un département
(xml)
Processer

Ecrire des départements
Ajouter des villes
ItemReader
●
●
➢

Lire un flux de données
Résistant aux gros volumes
Lire une base, un fichier XML, ...
ItemProcessor
●
●

Transforme, valide et/ou filtre la donnée
Emplacement des rêgles métiers
ItemWriter
●

➢
➢
➢

Ecrire un lot de données
Ecriture par lot
Ecrire dans une base de données
Ecrire un fichier XML, CSV, ...
Reader/Processor/Writer
Flow
Dézipper le fichier zip
Lire une ville
(xml)
Ajouter des départements
Processer

Ajouter des villes

Ecrire des villes
Chunk
Lire, Transformer et Ecrire
➢
➢
➢

Ecriture par lot
Limiter la consommation mémoire
Optimiser l’écriture
Chunk

Taille du lot = commit interval = 2
Chunk
Chunk
Tests
● Coder un batch en TDD
○ POJO every where (Procesor)
● Tests d'intégration facilités
○ @RunWith
○ Step, Job
Tests
Listeners
Listeners
★
★
★
★
★
★

JobExecutionListener
StepListener
Item{Read,Process,Write}Listener
StepExecutionListener
SkipListener, RetryListener
...
Spring Batch 2.2
Juin 2013
Java Config
Support de Spring Data
Non-identifying Job Parameters
AMQP support
Forces et faiblesses
✔ Batchs complexes mieux maintenables
✔ Productivité
✔ Tests
✔ Ticket d'entrée
✔ Ne convient pas à tous les batchs
Retour d’expérience
• Avec « Spring Batch »
– Moins de code produit
– Plus de tests unitaires & intégrations
– Spring Batch s'occupe de la montée en charge

• 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
reprise sur erreurs
Reprise sur erreur
●

Sauter les erreurs non bloquantes (skip)
○

●

Recommencer un traitement (retry)
○

●

survivre à quelques données invalides
survivre à une indisponibilité temporaire

Redémarrer un batch (restart)
○

on est en mesure de le relancer
Skip
0001;ABC;DEF;
0002;ABC;DEF;
000zxjgxdjghjsdfkud
0004;ABC;DEF;

• Au-delà du « skip-limit », failed
• Personnaliser le « skip »
• SkipListener pour écouter
Retry
Retry
●
●

Relancer une opération si indisponibilité
Au-delà du « retry-limit », failed (défaut)
○

●

RetryPolicy
○

●

Personnaliser le « retry »
Stratégie entre 2 « retry »: BackoffPolicy

RetryListener pour écouter
Restart
Restart
• Spring batch stocke des méta data
Restart
• Indique si le job est « restartable » ou pas

• Indique le nombre max de « restart »

• Reader/Writer doivent être « restartable »
Reprise sur erreur
• Ecarter des items défectueux (skip)
• Recommencer une step s’il y a une erreur
temporaire (retry)
• Redémarrer un job (restart)
Gestion du flow
Gestion du flow
Dézipper le fichier zip

*
Ajouter des départements

*
Ajouter des villes

failed

Alertes
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
Scaling
Scaling
– Multi-threaded Step (single process)
• Une Step est multi threaded

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

– Remote Chunking of Step (multi process)
• Distribution des chunks par slave

– Partitioning a Step (single or multi process)
• Partage les données à travers les slaves
Scaling “Partitioning”
• Répartir les données suivant une clé de
partition ⇒ « Partitionner »
• Traiter les données ⇒ « PartitionHandler »
Horizontal Scaling
• RabbitMQ: Message-Oriented Middleware
– Découpler le producteur des consommateurs

• Batch Orienté Tâche ou Worker
Horizontal Scaling
AMQP
Spring Integration

Exchange
Queue
Batch
AMQP
Spring Integration

pulling

Worker
Batch

Worker
Batch

Worker
Batch

Spring Batch

Spring Batch

Spring Batch
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
– Disponible 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 Admin
Conclusion
Les notions de bases
❏ Job, Step
❏ Reader, Processor, Writer
Les notions avancées
❏ Robustesse, Scaling, Monitoring
#NoXML
Questions
Crédits
Slides http://www.slideshare.net/obazoud/presentations
Auteurs (des éditions précédentes)
○
○

Olivier Bazoud
Julien Jakubowski

Contenu connexe

Tendances

Guss webcasts Tempdb Internals - june 2013
Guss webcasts   Tempdb Internals - june 2013Guss webcasts   Tempdb Internals - june 2013
Guss webcasts Tempdb Internals - june 2013David BAFFALEUF
 
Spring 3 en production
Spring 3 en productionSpring 3 en production
Spring 3 en productionJulien Dubois
 
Node.js, le pavé dans la mare
Node.js, le pavé dans la mareNode.js, le pavé dans la mare
Node.js, le pavé dans la mareValtech
 
Hibernate vs le_cloud_computing
Hibernate vs le_cloud_computingHibernate vs le_cloud_computing
Hibernate vs le_cloud_computingIppon
 
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
 
DevOps avec Ansible et Docker
DevOps avec Ansible et DockerDevOps avec Ansible et Docker
DevOps avec Ansible et DockerStephane Manciot
 
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
 
Hibernate vs le Cloud computing
Hibernate vs le Cloud computingHibernate vs le Cloud computing
Hibernate vs le Cloud computingJulien Dubois
 
Paris stormusergroup intrudocution
Paris stormusergroup intrudocutionParis stormusergroup intrudocution
Paris stormusergroup intrudocutionParis_Storm_UG
 
Systèmes d'Exploitation - chp1-introduction
Systèmes d'Exploitation - chp1-introductionSystèmes d'Exploitation - chp1-introduction
Systèmes d'Exploitation - chp1-introductionLilia Sfaxi
 
É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
 
Nouveau look pour une nouvelle vie, version spéciale Ippon
Nouveau look pour une nouvelle vie, version spéciale IpponNouveau look pour une nouvelle vie, version spéciale Ippon
Nouveau look pour une nouvelle vie, version spéciale IpponJulien Dubois
 
Web API & Cache, the HTTP way - Ippevent 10 Juin 2014
Web API & Cache, the HTTP way - Ippevent 10 Juin 2014Web API & Cache, the HTTP way - Ippevent 10 Juin 2014
Web API & Cache, the HTTP way - Ippevent 10 Juin 2014Ippon
 
De Maven à SBT ScalaIO 2013
De Maven à SBT ScalaIO 2013De Maven à SBT ScalaIO 2013
De Maven à SBT ScalaIO 2013Stephane Manciot
 
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
 
La migration continue vers Symfony
La migration continue vers SymfonyLa migration continue vers Symfony
La migration continue vers SymfonyFrancois Zaninotto
 
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
 

Tendances (20)

Guss webcasts Tempdb Internals - june 2013
Guss webcasts   Tempdb Internals - june 2013Guss webcasts   Tempdb Internals - june 2013
Guss webcasts Tempdb Internals - june 2013
 
Spring 3 en production
Spring 3 en productionSpring 3 en production
Spring 3 en production
 
Node.js, le pavé dans la mare
Node.js, le pavé dans la mareNode.js, le pavé dans la mare
Node.js, le pavé dans la mare
 
Hibernate vs le_cloud_computing
Hibernate vs le_cloud_computingHibernate vs le_cloud_computing
Hibernate vs le_cloud_computing
 
Backday xebia - Chercher la performance efficacement
Backday xebia - Chercher la performance efficacement Backday xebia - Chercher la performance efficacement
Backday xebia - Chercher la performance efficacement
 
DevOps avec Ansible et Docker
DevOps avec Ansible et DockerDevOps avec Ansible et Docker
DevOps avec Ansible et Docker
 
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
 
REX Storm Redis
REX Storm RedisREX Storm Redis
REX Storm Redis
 
Php 100k
Php 100kPhp 100k
Php 100k
 
Hibernate vs le Cloud computing
Hibernate vs le Cloud computingHibernate vs le Cloud computing
Hibernate vs le Cloud computing
 
Liquibase
LiquibaseLiquibase
Liquibase
 
Paris stormusergroup intrudocution
Paris stormusergroup intrudocutionParis stormusergroup intrudocution
Paris stormusergroup intrudocution
 
Systèmes d'Exploitation - chp1-introduction
Systèmes d'Exploitation - chp1-introductionSystèmes d'Exploitation - chp1-introduction
Systèmes d'Exploitation - chp1-introduction
 
É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
 
Nouveau look pour une nouvelle vie, version spéciale Ippon
Nouveau look pour une nouvelle vie, version spéciale IpponNouveau look pour une nouvelle vie, version spéciale Ippon
Nouveau look pour une nouvelle vie, version spéciale Ippon
 
Web API & Cache, the HTTP way - Ippevent 10 Juin 2014
Web API & Cache, the HTTP way - Ippevent 10 Juin 2014Web API & Cache, the HTTP way - Ippevent 10 Juin 2014
Web API & Cache, the HTTP way - Ippevent 10 Juin 2014
 
De Maven à SBT ScalaIO 2013
De Maven à SBT ScalaIO 2013De Maven à SBT ScalaIO 2013
De Maven à SBT ScalaIO 2013
 
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
 
La migration continue vers Symfony
La migration continue vers SymfonyLa migration continue vers Symfony
La migration continue vers Symfony
 
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...
 

Similaire à WS User Group - Spring Batch - Xebia

Spring Batch - Julien Jakubowski - November 2010
Spring Batch - Julien Jakubowski - November 2010Spring Batch - Julien Jakubowski - November 2010
Spring Batch - Julien Jakubowski - November 2010JUG Lausanne
 
BBL - Monitoring - kyriba
BBL - Monitoring - kyribaBBL - Monitoring - kyriba
BBL - Monitoring - kyribaOlivier BAZOUD
 
Importer 500 millions de données de MySQL vers Neo4j
Importer 500 millions de données de MySQL vers Neo4jImporter 500 millions de données de MySQL vers Neo4j
Importer 500 millions de données de MySQL vers Neo4jGabriel Pillet 🐙
 
Workshop Spring - Session 4 - Spring Batch
Workshop Spring -  Session 4 - Spring BatchWorkshop Spring -  Session 4 - Spring Batch
Workshop Spring - Session 4 - Spring BatchAntoine Rey
 
Conférence AFUP 20minutes.Fr
Conférence AFUP 20minutes.FrConférence AFUP 20minutes.Fr
Conférence AFUP 20minutes.FrOxalide
 
Spark Streaming
Spark StreamingSpark Streaming
Spark StreamingPALO IT
 
USI 2013 : 7 changements nécessaires pour sauver vos SI décisionnels
USI 2013 : 7 changements nécessaires pour sauver vos SI décisionnelsUSI 2013 : 7 changements nécessaires pour sauver vos SI décisionnels
USI 2013 : 7 changements nécessaires pour sauver vos SI décisionnelsJoseph Glorieux
 
Apache Storm - Introduction au traitement temps-réel avec Storm
Apache Storm - Introduction au traitement temps-réel avec StormApache Storm - Introduction au traitement temps-réel avec Storm
Apache Storm - Introduction au traitement temps-réel avec StormParis_Storm_UG
 
Réussir une montée en charge avec MongoDB
Réussir une montée en charge avec MongoDBRéussir une montée en charge avec MongoDB
Réussir une montée en charge avec MongoDB MongoDB
 
Elasticsearch 5.0 les nouveautés
Elasticsearch 5.0 les nouveautésElasticsearch 5.0 les nouveautés
Elasticsearch 5.0 les nouveautésMathieu Elie
 
2008-10-02 Paris - Administration des applications critiques avec SQL Server ...
2008-10-02 Paris - Administration des applications critiques avec SQL Server ...2008-10-02 Paris - Administration des applications critiques avec SQL Server ...
2008-10-02 Paris - Administration des applications critiques avec SQL Server ...Patrick Guimonet
 
Implémentation efficace et durable de processus métiers complexes
Implémentation efficace et durable de processus métiers complexesImplémentation efficace et durable de processus métiers complexes
Implémentation efficace et durable de processus métiers complexesGeeks Anonymes
 
Apache Cassandra - Concepts et fonctionnalités
Apache Cassandra - Concepts et fonctionnalitésApache Cassandra - Concepts et fonctionnalités
Apache Cassandra - Concepts et fonctionnalitésRomain Hardouin
 
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
 
Tout sur les solutions de haute disponibilité et disaster recovery de sql ser...
Tout sur les solutions de haute disponibilité et disaster recovery de sql ser...Tout sur les solutions de haute disponibilité et disaster recovery de sql ser...
Tout sur les solutions de haute disponibilité et disaster recovery de sql ser...Christophe Laporte
 

Similaire à WS User Group - Spring Batch - Xebia (20)

Spring Batch - Julien Jakubowski - November 2010
Spring Batch - Julien Jakubowski - November 2010Spring Batch - Julien Jakubowski - November 2010
Spring Batch - Julien Jakubowski - November 2010
 
BBL - Monitoring - kyriba
BBL - Monitoring - kyribaBBL - Monitoring - kyriba
BBL - Monitoring - kyriba
 
Importer 500 millions de données de MySQL vers Neo4j
Importer 500 millions de données de MySQL vers Neo4jImporter 500 millions de données de MySQL vers Neo4j
Importer 500 millions de données de MySQL vers Neo4j
 
Workshop Spring - Session 4 - Spring Batch
Workshop Spring -  Session 4 - Spring BatchWorkshop Spring -  Session 4 - Spring Batch
Workshop Spring - Session 4 - Spring Batch
 
Conférence AFUP 20minutes.Fr
Conférence AFUP 20minutes.FrConférence AFUP 20minutes.Fr
Conférence AFUP 20minutes.Fr
 
Les nouveautés de PowerShell 3.0
Les nouveautés de PowerShell 3.0Les nouveautés de PowerShell 3.0
Les nouveautés de PowerShell 3.0
 
Paris RailsCamp 2009
Paris RailsCamp 2009Paris RailsCamp 2009
Paris RailsCamp 2009
 
Spark Streaming
Spark StreamingSpark Streaming
Spark Streaming
 
USI 2013 : 7 changements nécessaires pour sauver vos SI décisionnels
USI 2013 : 7 changements nécessaires pour sauver vos SI décisionnelsUSI 2013 : 7 changements nécessaires pour sauver vos SI décisionnels
USI 2013 : 7 changements nécessaires pour sauver vos SI décisionnels
 
Apache Storm - Introduction au traitement temps-réel avec Storm
Apache Storm - Introduction au traitement temps-réel avec StormApache Storm - Introduction au traitement temps-réel avec Storm
Apache Storm - Introduction au traitement temps-réel avec Storm
 
Réussir une montée en charge avec MongoDB
Réussir une montée en charge avec MongoDBRéussir une montée en charge avec MongoDB
Réussir une montée en charge avec MongoDB
 
Elasticsearch 5.0 les nouveautés
Elasticsearch 5.0 les nouveautésElasticsearch 5.0 les nouveautés
Elasticsearch 5.0 les nouveautés
 
Power Shell V2 Full
Power Shell V2 FullPower Shell V2 Full
Power Shell V2 Full
 
2008-10-02 Paris - Administration des applications critiques avec SQL Server ...
2008-10-02 Paris - Administration des applications critiques avec SQL Server ...2008-10-02 Paris - Administration des applications critiques avec SQL Server ...
2008-10-02 Paris - Administration des applications critiques avec SQL Server ...
 
Implémentation efficace et durable de processus métiers complexes
Implémentation efficace et durable de processus métiers complexesImplémentation efficace et durable de processus métiers complexes
Implémentation efficace et durable de processus métiers complexes
 
Apache Cassandra - Concepts et fonctionnalités
Apache Cassandra - Concepts et fonctionnalitésApache Cassandra - Concepts et fonctionnalités
Apache Cassandra - Concepts et fonctionnalités
 
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
 
Tout sur les solutions de haute disponibilité et disaster recovery de sql ser...
Tout sur les solutions de haute disponibilité et disaster recovery de sql ser...Tout sur les solutions de haute disponibilité et disaster recovery de sql ser...
Tout sur les solutions de haute disponibilité et disaster recovery de sql ser...
 
Présentation de jBPM 3.1
Présentation de jBPM 3.1Présentation de jBPM 3.1
Présentation de jBPM 3.1
 
Sug spring batch
Sug spring batchSug spring batch
Sug spring batch
 

WS User Group - Spring Batch - Xebia