WS User Group - Spring Batch - Xebia

Preview:

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

Citation preview

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

Recommended