ws user group - spring batch - xebia
DESCRIPTION
Découvrez Spring Batch, sa simplicité, les concepts de bases ainsi que les notions avancées. Tout tout tout, vous saurez tout sur Spring Batch! Intervenant : Olivier Bazoud @obazoudTRANSCRIPT
Spring BatchMercredi 20 Novembre 2013
Interface21 UG
Olivier Bazoud
IntervenantOlivier Bazoud @obazoud
Senior developer KyribaSpring-* / JEE, NoSQL, Node.jsScala 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 BatchNotions de base
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 AdminScalingMonitoring
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
ApplicationInsérer des départements et des villes dans une base de données à partir de fichier XML
Spécifications1. Unzip du fichier (départements + villes)2. Charger des départements dans la base3. Charger des villes dans la base
➢ Lancer la web application
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
Lancer une commande système unzipDézipper le fichier zip
Ajouter des départements
Ajouter des villes
Tasklet● Permet d’éxecuter une tâche
○ Appel à une commande système○ Appel un webservice
Tasklet
Flow
Lire un département(xml)
Processer
Ecrire des départements
Dézipper le fichier zip
Ajouter 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
Lire une ville(xml)
Processer
Ecrire des villes
Dézipper le fichier zip
Ajouter des départements
Ajouter des villes
ChunkLire, 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
★ JobExecutionListener★ StepListener★ Item{Read,Process,Write}Listener★ StepExecutionListener★ SkipListener, RetryListener★ ...
Listeners
Spring Batch 2.2Juin 2013Java ConfigSupport de Spring DataNon-identifying Job ParametersAMQP 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 BatchAllons plus loin
Un batch plus robuste reprise sur erreurs
Reprise sur erreur● 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
Skip0001;ABC;DEF;0002;ABC;DEF;000zxjgxdjghjsdfkud0004;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)
○ Personnaliser le « retry »● RetryPolicy
○ 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
*
*
Alertesfailed
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
WorkerBatch
WorkerBatch
Spring Batch
WorkerBatch
AMQPSpring Integration
Exchange
QueueBatch
Spring Batch Spring Batch
AMQPSpring Integration pulling
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
ConclusionLes notions de bases
❏ Job, Step❏ Reader, Processor, Writer
Les notions avancées❏ Robustesse, Scaling, Monitoring
#NoXML
Questions
CréditsSlides http://www.slideshare.net/obazoud/presentations
Auteurs (des éditions précédentes)○ Olivier Bazoud○ Julien Jakubowski