WS User Group - Spring Batch - Xebia
-
Upload
olivier-bazoud -
Category
Technology
-
view
921 -
download
4
description
Transcript of WS User Group - Spring Batch - Xebia
![Page 1: WS User Group - Spring Batch - Xebia](https://reader031.fdocuments.net/reader031/viewer/2022012310/55660cafd8b42a06318b48c0/html5/thumbnails/1.jpg)
Spring BatchMercredi 20 Novembre 2013
Interface21 UG
Olivier Bazoud
![Page 2: WS User Group - Spring Batch - Xebia](https://reader031.fdocuments.net/reader031/viewer/2022012310/55660cafd8b42a06318b48c0/html5/thumbnails/2.jpg)
IntervenantOlivier Bazoud @obazoud
Senior developer KyribaSpring-* / JEE, NoSQL, Node.jsScala bientôt ;)Co-auteur de “Spring Batch in Action”
![Page 3: WS User Group - Spring Batch - Xebia](https://reader031.fdocuments.net/reader031/viewer/2022012310/55660cafd8b42a06318b48c0/html5/thumbnails/3.jpg)
Sommaire➢ C’est quoi un batch ?➢ Problèmes récurrents
➢ Notions de bases➢ Notions avancées
➢ Conclusion
![Page 4: WS User Group - Spring Batch - Xebia](https://reader031.fdocuments.net/reader031/viewer/2022012310/55660cafd8b42a06318b48c0/html5/thumbnails/4.jpg)
C’est quoi un batch ?Répétition de traitements sur des données➔ Sur des grands volumes
![Page 5: WS User Group - Spring Batch - Xebia](https://reader031.fdocuments.net/reader031/viewer/2022012310/55660cafd8b42a06318b48c0/html5/thumbnails/5.jpg)
C’est quoi un batch ?… sans intervention d’un utilisateur humain➔ pas d’interface homme-machine
![Page 6: WS User Group - Spring Batch - Xebia](https://reader031.fdocuments.net/reader031/viewer/2022012310/55660cafd8b42a06318b48c0/html5/thumbnails/6.jpg)
C’est quoi un batch ?
batch ≠ scheduler
![Page 7: WS User Group - Spring Batch - Xebia](https://reader031.fdocuments.net/reader031/viewer/2022012310/55660cafd8b42a06318b48c0/html5/thumbnails/7.jpg)
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
• …
![Page 8: WS User Group - Spring Batch - Xebia](https://reader031.fdocuments.net/reader031/viewer/2022012310/55660cafd8b42a06318b48c0/html5/thumbnails/8.jpg)
Problèmes récurrents• Fiabilité
![Page 9: WS User Group - Spring Batch - Xebia](https://reader031.fdocuments.net/reader031/viewer/2022012310/55660cafd8b42a06318b48c0/html5/thumbnails/9.jpg)
Problèmes récurrents• Maintenabilité
![Page 10: WS User Group - Spring Batch - Xebia](https://reader031.fdocuments.net/reader031/viewer/2022012310/55660cafd8b42a06318b48c0/html5/thumbnails/10.jpg)
Problèmes récurrents• Réinvention de la roue… carrée
![Page 11: WS User Group - Spring Batch - Xebia](https://reader031.fdocuments.net/reader031/viewer/2022012310/55660cafd8b42a06318b48c0/html5/thumbnails/11.jpg)
Spring BatchNotions de base
![Page 12: WS User Group - Spring Batch - Xebia](https://reader031.fdocuments.net/reader031/viewer/2022012310/55660cafd8b42a06318b48c0/html5/thumbnails/12.jpg)
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
![Page 13: WS User Group - Spring Batch - Xebia](https://reader031.fdocuments.net/reader031/viewer/2022012310/55660cafd8b42a06318b48c0/html5/thumbnails/13.jpg)
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.”
![Page 14: WS User Group - Spring Batch - Xebia](https://reader031.fdocuments.net/reader031/viewer/2022012310/55660cafd8b42a06318b48c0/html5/thumbnails/14.jpg)
Infrastructure
![Page 15: WS User Group - Spring Batch - Xebia](https://reader031.fdocuments.net/reader031/viewer/2022012310/55660cafd8b42a06318b48c0/html5/thumbnails/15.jpg)
ApplicationInsérer des départements et des villes dans une base de données à partir de fichier XML
![Page 16: WS User Group - Spring Batch - Xebia](https://reader031.fdocuments.net/reader031/viewer/2022012310/55660cafd8b42a06318b48c0/html5/thumbnails/16.jpg)
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
![Page 17: WS User Group - Spring Batch - Xebia](https://reader031.fdocuments.net/reader031/viewer/2022012310/55660cafd8b42a06318b48c0/html5/thumbnails/17.jpg)
Flow
Dézipper le fichier zip
Insert des départements
Insert des villes
![Page 18: WS User Group - Spring Batch - Xebia](https://reader031.fdocuments.net/reader031/viewer/2022012310/55660cafd8b42a06318b48c0/html5/thumbnails/18.jpg)
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
![Page 19: WS User Group - Spring Batch - Xebia](https://reader031.fdocuments.net/reader031/viewer/2022012310/55660cafd8b42a06318b48c0/html5/thumbnails/19.jpg)
Flow
Dézipper le fichier zip
Ajouter des départements
Ajouter des villes
![Page 20: WS User Group - Spring Batch - Xebia](https://reader031.fdocuments.net/reader031/viewer/2022012310/55660cafd8b42a06318b48c0/html5/thumbnails/20.jpg)
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
![Page 21: WS User Group - Spring Batch - Xebia](https://reader031.fdocuments.net/reader031/viewer/2022012310/55660cafd8b42a06318b48c0/html5/thumbnails/21.jpg)
Step
![Page 22: WS User Group - Spring Batch - Xebia](https://reader031.fdocuments.net/reader031/viewer/2022012310/55660cafd8b42a06318b48c0/html5/thumbnails/22.jpg)
Flow
Lancer une commande système unzipDézipper le fichier zip
Ajouter des départements
Ajouter des villes
![Page 23: WS User Group - Spring Batch - Xebia](https://reader031.fdocuments.net/reader031/viewer/2022012310/55660cafd8b42a06318b48c0/html5/thumbnails/23.jpg)
Tasklet● Permet d’éxecuter une tâche
○ Appel à une commande système○ Appel un webservice
![Page 24: WS User Group - Spring Batch - Xebia](https://reader031.fdocuments.net/reader031/viewer/2022012310/55660cafd8b42a06318b48c0/html5/thumbnails/24.jpg)
Tasklet
![Page 25: WS User Group - Spring Batch - Xebia](https://reader031.fdocuments.net/reader031/viewer/2022012310/55660cafd8b42a06318b48c0/html5/thumbnails/25.jpg)
Flow
Lire un département(xml)
Processer
Ecrire des départements
Dézipper le fichier zip
Ajouter des départements
Ajouter des villes
![Page 26: WS User Group - Spring Batch - Xebia](https://reader031.fdocuments.net/reader031/viewer/2022012310/55660cafd8b42a06318b48c0/html5/thumbnails/26.jpg)
ItemReader● Lire un flux de données● Résistant aux gros volumes➢ Lire une base, un fichier XML, ...
![Page 27: WS User Group - Spring Batch - Xebia](https://reader031.fdocuments.net/reader031/viewer/2022012310/55660cafd8b42a06318b48c0/html5/thumbnails/27.jpg)
ItemProcessor● Transforme, valide et/ou filtre la donnée● Emplacement des rêgles métiers
![Page 28: WS User Group - Spring Batch - Xebia](https://reader031.fdocuments.net/reader031/viewer/2022012310/55660cafd8b42a06318b48c0/html5/thumbnails/28.jpg)
ItemWriter● Ecrire un lot de données
➢ Ecriture par lot➢ Ecrire dans une base de données➢ Ecrire un fichier XML, CSV, ...
![Page 29: WS User Group - Spring Batch - Xebia](https://reader031.fdocuments.net/reader031/viewer/2022012310/55660cafd8b42a06318b48c0/html5/thumbnails/29.jpg)
Reader/Processor/Writer
![Page 30: WS User Group - Spring Batch - Xebia](https://reader031.fdocuments.net/reader031/viewer/2022012310/55660cafd8b42a06318b48c0/html5/thumbnails/30.jpg)
Flow
Lire une ville(xml)
Processer
Ecrire des villes
Dézipper le fichier zip
Ajouter des départements
Ajouter des villes
![Page 31: WS User Group - Spring Batch - Xebia](https://reader031.fdocuments.net/reader031/viewer/2022012310/55660cafd8b42a06318b48c0/html5/thumbnails/31.jpg)
ChunkLire, Transformer et Ecrire
➢ Ecriture par lot➢ Limiter la consommation mémoire➢ Optimiser l’écriture
![Page 32: WS User Group - Spring Batch - Xebia](https://reader031.fdocuments.net/reader031/viewer/2022012310/55660cafd8b42a06318b48c0/html5/thumbnails/32.jpg)
Chunk
Taille du lot = commit interval = 2
![Page 33: WS User Group - Spring Batch - Xebia](https://reader031.fdocuments.net/reader031/viewer/2022012310/55660cafd8b42a06318b48c0/html5/thumbnails/33.jpg)
Chunk
![Page 34: WS User Group - Spring Batch - Xebia](https://reader031.fdocuments.net/reader031/viewer/2022012310/55660cafd8b42a06318b48c0/html5/thumbnails/34.jpg)
Chunk
![Page 35: WS User Group - Spring Batch - Xebia](https://reader031.fdocuments.net/reader031/viewer/2022012310/55660cafd8b42a06318b48c0/html5/thumbnails/35.jpg)
Tests
● Coder un batch en TDD○ POJO every where (Procesor)
● Tests d'intégration facilités○ @RunWith○ Step, Job
![Page 36: WS User Group - Spring Batch - Xebia](https://reader031.fdocuments.net/reader031/viewer/2022012310/55660cafd8b42a06318b48c0/html5/thumbnails/36.jpg)
Tests
![Page 37: WS User Group - Spring Batch - Xebia](https://reader031.fdocuments.net/reader031/viewer/2022012310/55660cafd8b42a06318b48c0/html5/thumbnails/37.jpg)
Listeners
![Page 38: WS User Group - Spring Batch - Xebia](https://reader031.fdocuments.net/reader031/viewer/2022012310/55660cafd8b42a06318b48c0/html5/thumbnails/38.jpg)
★ JobExecutionListener★ StepListener★ Item{Read,Process,Write}Listener★ StepExecutionListener★ SkipListener, RetryListener★ ...
Listeners
![Page 39: WS User Group - Spring Batch - Xebia](https://reader031.fdocuments.net/reader031/viewer/2022012310/55660cafd8b42a06318b48c0/html5/thumbnails/39.jpg)
Spring Batch 2.2Juin 2013Java ConfigSupport de Spring DataNon-identifying Job ParametersAMQP support
![Page 40: WS User Group - Spring Batch - Xebia](https://reader031.fdocuments.net/reader031/viewer/2022012310/55660cafd8b42a06318b48c0/html5/thumbnails/40.jpg)
Forces et faiblesses✔ Batchs complexes mieux maintenables✔ Productivité✔ Tests
✔ Ticket d'entrée✔ Ne convient pas à tous les batchs
![Page 41: WS User Group - Spring Batch - Xebia](https://reader031.fdocuments.net/reader031/viewer/2022012310/55660cafd8b42a06318b48c0/html5/thumbnails/41.jpg)
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 ;)
![Page 42: WS User Group - Spring Batch - Xebia](https://reader031.fdocuments.net/reader031/viewer/2022012310/55660cafd8b42a06318b48c0/html5/thumbnails/42.jpg)
JSR-352 « javax.batch »
Ressemble beaucoup à Spring Batch
![Page 43: WS User Group - Spring Batch - Xebia](https://reader031.fdocuments.net/reader031/viewer/2022012310/55660cafd8b42a06318b48c0/html5/thumbnails/43.jpg)
Spring BatchAllons plus loin
![Page 44: WS User Group - Spring Batch - Xebia](https://reader031.fdocuments.net/reader031/viewer/2022012310/55660cafd8b42a06318b48c0/html5/thumbnails/44.jpg)
Un batch plus robuste reprise sur erreurs
![Page 45: WS User Group - Spring Batch - Xebia](https://reader031.fdocuments.net/reader031/viewer/2022012310/55660cafd8b42a06318b48c0/html5/thumbnails/45.jpg)
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
![Page 46: WS User Group - Spring Batch - Xebia](https://reader031.fdocuments.net/reader031/viewer/2022012310/55660cafd8b42a06318b48c0/html5/thumbnails/46.jpg)
Skip0001;ABC;DEF;0002;ABC;DEF;000zxjgxdjghjsdfkud0004;ABC;DEF;
• Au-delà du « skip-limit », failed• Personnaliser le « skip »• SkipListener pour écouter
![Page 47: WS User Group - Spring Batch - Xebia](https://reader031.fdocuments.net/reader031/viewer/2022012310/55660cafd8b42a06318b48c0/html5/thumbnails/47.jpg)
Retry
![Page 48: WS User Group - Spring Batch - Xebia](https://reader031.fdocuments.net/reader031/viewer/2022012310/55660cafd8b42a06318b48c0/html5/thumbnails/48.jpg)
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
![Page 49: WS User Group - Spring Batch - Xebia](https://reader031.fdocuments.net/reader031/viewer/2022012310/55660cafd8b42a06318b48c0/html5/thumbnails/49.jpg)
Restart
![Page 50: WS User Group - Spring Batch - Xebia](https://reader031.fdocuments.net/reader031/viewer/2022012310/55660cafd8b42a06318b48c0/html5/thumbnails/50.jpg)
Restart• Spring batch stocke des méta data
![Page 51: WS User Group - Spring Batch - Xebia](https://reader031.fdocuments.net/reader031/viewer/2022012310/55660cafd8b42a06318b48c0/html5/thumbnails/51.jpg)
Restart• Indique si le job est « restartable » ou pas
• Indique le nombre max de « restart »
• Reader/Writer doivent être « restartable »
![Page 52: WS User Group - Spring Batch - Xebia](https://reader031.fdocuments.net/reader031/viewer/2022012310/55660cafd8b42a06318b48c0/html5/thumbnails/52.jpg)
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)
![Page 53: WS User Group - Spring Batch - Xebia](https://reader031.fdocuments.net/reader031/viewer/2022012310/55660cafd8b42a06318b48c0/html5/thumbnails/53.jpg)
Gestion du flow
![Page 54: WS User Group - Spring Batch - Xebia](https://reader031.fdocuments.net/reader031/viewer/2022012310/55660cafd8b42a06318b48c0/html5/thumbnails/54.jpg)
Gestion du flow
Dézipper le fichier zip
Ajouter des départements
Ajouter des villes
*
*
Alertesfailed
![Page 55: WS User Group - Spring Batch - Xebia](https://reader031.fdocuments.net/reader031/viewer/2022012310/55660cafd8b42a06318b48c0/html5/thumbnails/55.jpg)
Gestion du flow
![Page 56: WS User Group - Spring Batch - Xebia](https://reader031.fdocuments.net/reader031/viewer/2022012310/55660cafd8b42a06318b48c0/html5/thumbnails/56.jpg)
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 57: WS User Group - Spring Batch - Xebia](https://reader031.fdocuments.net/reader031/viewer/2022012310/55660cafd8b42a06318b48c0/html5/thumbnails/57.jpg)
Scaling
![Page 58: WS User Group - Spring Batch - Xebia](https://reader031.fdocuments.net/reader031/viewer/2022012310/55660cafd8b42a06318b48c0/html5/thumbnails/58.jpg)
Scaling
![Page 59: WS User Group - Spring Batch - Xebia](https://reader031.fdocuments.net/reader031/viewer/2022012310/55660cafd8b42a06318b48c0/html5/thumbnails/59.jpg)
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
![Page 60: WS User Group - Spring Batch - Xebia](https://reader031.fdocuments.net/reader031/viewer/2022012310/55660cafd8b42a06318b48c0/html5/thumbnails/60.jpg)
Scaling “Partitioning”• Répartir les données suivant une clé de
partition ⇒ « Partitionner »
• Traiter les données ⇒ « PartitionHandler »
![Page 61: WS User Group - Spring Batch - Xebia](https://reader031.fdocuments.net/reader031/viewer/2022012310/55660cafd8b42a06318b48c0/html5/thumbnails/61.jpg)
Horizontal Scaling• RabbitMQ: Message-Oriented Middleware
– Découpler le producteur des consommateurs
• Batch Orienté Tâche ou Worker
![Page 62: WS User Group - Spring Batch - Xebia](https://reader031.fdocuments.net/reader031/viewer/2022012310/55660cafd8b42a06318b48c0/html5/thumbnails/62.jpg)
Horizontal Scaling
WorkerBatch
WorkerBatch
Spring Batch
WorkerBatch
AMQPSpring Integration
Exchange
QueueBatch
Spring Batch Spring Batch
AMQPSpring Integration pulling
![Page 63: WS User Group - Spring Batch - Xebia](https://reader031.fdocuments.net/reader031/viewer/2022012310/55660cafd8b42a06318b48c0/html5/thumbnails/63.jpg)
Monitoring• Graphite http://graphite.wikidot.com
![Page 64: WS User Group - Spring Batch - Xebia](https://reader031.fdocuments.net/reader031/viewer/2022012310/55660cafd8b42a06318b48c0/html5/thumbnails/64.jpg)
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: WS User Group - Spring Batch - Xebia](https://reader031.fdocuments.net/reader031/viewer/2022012310/55660cafd8b42a06318b48c0/html5/thumbnails/65.jpg)
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
![Page 66: WS User Group - Spring Batch - Xebia](https://reader031.fdocuments.net/reader031/viewer/2022012310/55660cafd8b42a06318b48c0/html5/thumbnails/66.jpg)
Monitoring
Mode push au lieu de pull
![Page 67: WS User Group - Spring Batch - Xebia](https://reader031.fdocuments.net/reader031/viewer/2022012310/55660cafd8b42a06318b48c0/html5/thumbnails/67.jpg)
Monitoring
![Page 68: WS User Group - Spring Batch - Xebia](https://reader031.fdocuments.net/reader031/viewer/2022012310/55660cafd8b42a06318b48c0/html5/thumbnails/68.jpg)
Spring Batch Admin
![Page 69: WS User Group - Spring Batch - Xebia](https://reader031.fdocuments.net/reader031/viewer/2022012310/55660cafd8b42a06318b48c0/html5/thumbnails/69.jpg)
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: WS User Group - Spring Batch - Xebia](https://reader031.fdocuments.net/reader031/viewer/2022012310/55660cafd8b42a06318b48c0/html5/thumbnails/70.jpg)
Spring Batch Admin
![Page 71: WS User Group - Spring Batch - Xebia](https://reader031.fdocuments.net/reader031/viewer/2022012310/55660cafd8b42a06318b48c0/html5/thumbnails/71.jpg)
ConclusionLes notions de bases
❏ Job, Step❏ Reader, Processor, Writer
Les notions avancées❏ Robustesse, Scaling, Monitoring
#NoXML
![Page 72: WS User Group - Spring Batch - Xebia](https://reader031.fdocuments.net/reader031/viewer/2022012310/55660cafd8b42a06318b48c0/html5/thumbnails/72.jpg)
Questions
![Page 73: WS User Group - Spring Batch - Xebia](https://reader031.fdocuments.net/reader031/viewer/2022012310/55660cafd8b42a06318b48c0/html5/thumbnails/73.jpg)
CréditsSlides http://www.slideshare.net/obazoud/presentations
Auteurs (des éditions précédentes)○ Olivier Bazoud○ Julien Jakubowski