WS User Group - Spring Batch - Xebia

73
Spring Batch Mercredi 20 Novembre 2013 Interface21 UG Olivier Bazoud

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 @obazoud

Transcript of WS User Group - Spring Batch - Xebia

Page 1: WS User Group - Spring Batch - Xebia

Spring BatchMercredi 20 Novembre 2013

Interface21 UG

Olivier Bazoud

Page 2: WS User Group - Spring Batch - Xebia

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

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

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

C’est quoi un batch ?… sans intervention d’un utilisateur humain➔ pas d’interface homme-machine

Page 6: WS User Group - Spring Batch - Xebia

C’est quoi un batch ?

batch ≠ scheduler

Page 7: WS User Group - Spring Batch - Xebia

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

Problèmes récurrents• Fiabilité

Page 9: WS User Group - Spring Batch - Xebia

Problèmes récurrents• Maintenabilité

Page 10: WS User Group - Spring Batch - Xebia

Problèmes récurrents• Réinvention de la roue… carrée

Page 11: WS User Group - Spring Batch - Xebia

Spring BatchNotions de base

Page 12: WS User Group - Spring Batch - Xebia

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

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

Infrastructure

Page 15: WS User Group - Spring Batch - Xebia

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

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

Flow

Dézipper le fichier zip

Insert des départements

Insert des villes

Page 18: WS User Group - Spring Batch - Xebia

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

Flow

Dézipper le fichier zip

Ajouter des départements

Ajouter des villes

Page 20: WS User Group - Spring Batch - Xebia

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

Step

Page 22: WS User Group - Spring Batch - Xebia

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

Tasklet● Permet d’éxecuter une tâche

○ Appel à une commande système○ Appel un webservice

Page 24: WS User Group - Spring Batch - Xebia

Tasklet

Page 25: WS User Group - Spring Batch - Xebia

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

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

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

Page 28: WS User Group - Spring Batch - Xebia

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

Reader/Processor/Writer

Page 30: WS User Group - Spring Batch - Xebia

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

ChunkLire, Transformer et Ecrire

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

Page 32: WS User Group - Spring Batch - Xebia

Chunk

Taille du lot = commit interval = 2

Page 33: WS User Group - Spring Batch - Xebia

Chunk

Page 34: WS User Group - Spring Batch - Xebia

Chunk

Page 35: WS User Group - Spring Batch - Xebia

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

Tests

Page 37: WS User Group - Spring Batch - Xebia

Listeners

Page 38: WS User Group - Spring Batch - Xebia

★ JobExecutionListener★ StepListener★ Item{Read,Process,Write}Listener★ StepExecutionListener★ SkipListener, RetryListener★ ...

Listeners

Page 39: WS User Group - Spring Batch - Xebia

Spring Batch 2.2Juin 2013Java ConfigSupport de Spring DataNon-identifying Job ParametersAMQP support

Page 40: WS User Group - Spring Batch - Xebia

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

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

JSR-352 « javax.batch »

Ressemble beaucoup à Spring Batch

Page 43: WS User Group - Spring Batch - Xebia

Spring BatchAllons plus loin

Page 44: WS User Group - Spring Batch - Xebia

Un batch plus robuste reprise sur erreurs

Page 45: WS User Group - Spring Batch - Xebia

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

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

Retry

Page 48: WS User Group - Spring Batch - Xebia

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

Restart

Page 50: WS User Group - Spring Batch - Xebia

Restart• Spring batch stocke des méta data

Page 51: WS User Group - Spring Batch - Xebia

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

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

Gestion du flow

Page 54: WS User Group - Spring Batch - Xebia

Gestion du flow

Dézipper le fichier zip

Ajouter des départements

Ajouter des villes

*

*

Alertesfailed

Page 55: WS User Group - Spring Batch - Xebia

Gestion du flow

Page 56: WS User Group - Spring Batch - Xebia

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

Scaling

Page 58: WS User Group - Spring Batch - Xebia

Scaling

Page 59: WS User Group - Spring Batch - Xebia

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

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

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

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

Monitoring• Graphite http://graphite.wikidot.com

Page 64: WS User Group - Spring Batch - Xebia

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

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

Monitoring

Mode push au lieu de pull

Page 67: WS User Group - Spring Batch - Xebia

Monitoring

Page 68: WS User Group - Spring Batch - Xebia

Spring Batch Admin

Page 69: WS User Group - Spring Batch - Xebia

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

Spring Batch Admin

Page 71: WS User Group - Spring Batch - Xebia

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

Questions

Page 73: WS User Group - Spring Batch - Xebia

CréditsSlides http://www.slideshare.net/obazoud/presentations

Auteurs (des éditions précédentes)○ Olivier Bazoud○ Julien Jakubowski