ws user group - spring batch - xebia

73
Spring Batch Mercredi 20 Novembre 2013 Interface21 UG Olivier Bazoud

Upload: olivier-bazoud

Post on 28-May-2015

917 views

Category:

Technology


4 download

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

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