Interface21 UG

Spring Batch
Mercredi 20 Novembre 2013

Olivier Bazoud
Intervenant
Olivier Bazoud @obazoud
Senior developer Kyriba
Spring-* / JEE, NoSQL, Node.js
Scala bientôt ;)
Co-auteur de “...
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 ...
Problèmes récurrents
• Fiabilité
Problèmes récurrents
• Maintenabilité
Problèmes récurrents
• Réinvention de la roue… carrée
Spring Batch
Notions de base
Spring Batch propose…
•
•
•
•
•
•

Un cadre
Un vocabulaire (domain language)
Traitement par lots
Flow, Reprise sur erreur,...
Spring Batch
“Spring Batch is a lightweight,
comprehensive batch framework
designed to enable the development of
robust ba...
Infrastructure
Application
Insérer des départements et des villes
dans une base de données à partir de
fichier XML
Spécifications

3.

Unzip du fichier (départements + villes)
Charger des départements dans la base
Charger des villes dans...
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 ens...
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 l...
Step
Flow
Dézipper le fichier zip

Ajouter des départements

Ajouter des villes

Lancer une commande système unzip
Tasklet
●

Permet d’éxecuter une tâche
○
○

Appel à une commande système
Appel un webservice
Tasklet
Flow
Dézipper le fichier zip

Ajouter des départements

Lire un département
(xml)
Processer

Ecrire des départements
Ajout...
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
Dézipper le fichier zip
Lire une ville
(xml)
Ajouter des départements
Processer

Ajouter des villes

Ecrire des ville...
Chunk
Lire, 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
Listeners
★
★
★
★
★
★

JobExecutionListener
StepListener
Item{Read,Process,Write}Listener
StepExecutionListener
SkipListen...
Spring Batch 2.2
Juin 2013
Java Config
Support de Spring Data
Non-identifying Job Parameters
AMQP support
Forces et faiblesses
✔ Batchs complexes mieux maintenables
✔ Productivité
✔ Tests
✔ Ticket d'entrée
✔ Ne convient pas à to...
Retour d’expérience
• Avec « Spring Batch »
– Moins de code produit
– Plus de tests unitaires & intégrations
– Spring Batc...
JSR-352 « javax.batch »

Ressemble beaucoup à
Spring Batch
Spring Batch
Allons plus loin
Un batch plus robuste
reprise sur erreurs
Reprise sur erreur
●

Sauter les erreurs non bloquantes (skip)
○

●

Recommencer un traitement (retry)
○

●

survivre à qu...
Skip
0001;ABC;DEF;
0002;ABC;DEF;
000zxjgxdjghjsdfkud
0004;ABC;DEF;

• Au-delà du « skip-limit », failed
• Personnaliser le...
Retry
Retry
●
●

Relancer une opération si indisponibilité
Au-delà du « retry-limit », failed (défaut)
○

●

RetryPolicy
○

●

P...
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 êt...
Reprise sur erreur
• Ecarter des items défectueux (skip)
• Recommencer une step s’il y a une erreur
temporaire (retry)
• R...
Gestion du flow
Gestion du flow
Dézipper le fichier zip

*
Ajouter des départements

*
Ajouter des villes

failed

Alertes
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...
Scaling
Scaling
Scaling
– Multi-threaded Step (single process)
• Une Step est multi threaded

– Parallel Steps (single process)
• Les Step...
Scaling “Partitioning”
• Répartir les données suivant une clé de
partition ⇒ « Partitionner »
• Traiter les données ⇒ « Pa...
Horizontal Scaling
• RabbitMQ: Message-Oriented Middleware
– Découpler le producteur des consommateurs

• Batch Orienté Tâ...
Horizontal Scaling
AMQP
Spring Integration

Exchange
Queue
Batch
AMQP
Spring Integration

pulling

Worker
Batch

Worker
Ba...
Monitoring
• Graphite http://graphite.wikidot.com
Monitoring
• Collectd
– http://collectd.org

– démon qui recueille périodiquement des
statistiques de performance du systè...
Monitoring
• Metrics
– http://metrics.codahale.com/

– Connaitre l’intérieur de votre application
– Gauges, Counters, Mete...
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 configu...
Spring Batch Admin
Conclusion
Les notions de bases
❏ Job, Step
❏ Reader, Processor, Writer
Les notions avancées
❏ Robustesse, Scaling, Monito...
Questions
Crédits
Slides http://www.slideshare.net/obazoud/presentations
Auteurs (des éditions précédentes)
○
○

Olivier Bazoud
Juli...
Prochain SlideShare
Chargement dans…5
×

WS User Group - Spring Batch - Xebia

1 503 vues

Publié le

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

Publié dans : Technologie
0 commentaire
1 j’aime
Statistiques
Remarques
  • Soyez le premier à commenter

Aucun téléchargement
Vues
Nombre de vues
1 503
Sur SlideShare
0
Issues des intégrations
0
Intégrations
19
Actions
Partages
0
Téléchargements
33
Commentaires
0
J’aime
1
Intégrations 0
Aucune incorporation

Aucune remarque pour cette diapositive

WS User Group - Spring Batch - Xebia

  1. 1. Interface21 UG Spring Batch Mercredi 20 Novembre 2013 Olivier Bazoud
  2. 2. Intervenant Olivier Bazoud @obazoud Senior developer Kyriba Spring-* / JEE, NoSQL, Node.js Scala bientôt ;) Co-auteur de “Spring Batch in Action”
  3. 3. Sommaire ➢ C’est quoi un batch ? ➢ Problèmes récurrents ➢ Notions de bases ➢ Notions avancées ➢ Conclusion
  4. 4. C’est quoi un batch ? Répétition de traitements sur des données ➔ Sur des grands volumes
  5. 5. C’est quoi un batch ? … sans intervention d’un utilisateur humain ➔ pas d’interface homme-machine
  6. 6. C’est quoi un batch ? batch ≠ scheduler
  7. 7. 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 • …
  8. 8. Problèmes récurrents • Fiabilité
  9. 9. Problèmes récurrents • Maintenabilité
  10. 10. Problèmes récurrents • Réinvention de la roue… carrée
  11. 11. Spring Batch Notions de base
  12. 12. Spring Batch propose… • • • • • • Un cadre Un vocabulaire (domain language) Traitement par lots Flow, Reprise sur erreur, … Spring dans ses batchs … Parallélisme Scaling Partitionnement Spring Batch Admin Monitoring
  13. 13. 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.”
  14. 14. Infrastructure
  15. 15. Application Insérer des départements et des villes dans une base de données à partir de fichier XML
  16. 16. Spécifications 3. Unzip du fichier (départements + villes) Charger des départements dans la base Charger des villes dans la base ➢ Lancer la web application 1. 2.
  17. 17. Flow Dézipper le fichier zip Insert des départements Insert des villes
  18. 18. 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
  19. 19. Flow Dézipper le fichier zip Ajouter des départements Ajouter des villes
  20. 20. 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
  21. 21. Step
  22. 22. Flow Dézipper le fichier zip Ajouter des départements Ajouter des villes Lancer une commande système unzip
  23. 23. Tasklet ● Permet d’éxecuter une tâche ○ ○ Appel à une commande système Appel un webservice
  24. 24. Tasklet
  25. 25. Flow Dézipper le fichier zip Ajouter des départements Lire un département (xml) Processer Ecrire des départements Ajouter des villes
  26. 26. ItemReader ● ● ➢ Lire un flux de données Résistant aux gros volumes Lire une base, un fichier XML, ...
  27. 27. ItemProcessor ● ● Transforme, valide et/ou filtre la donnée Emplacement des rêgles métiers
  28. 28. ItemWriter ● ➢ ➢ ➢ Ecrire un lot de données Ecriture par lot Ecrire dans une base de données Ecrire un fichier XML, CSV, ...
  29. 29. Reader/Processor/Writer
  30. 30. Flow Dézipper le fichier zip Lire une ville (xml) Ajouter des départements Processer Ajouter des villes Ecrire des villes
  31. 31. Chunk Lire, Transformer et Ecrire ➢ ➢ ➢ Ecriture par lot Limiter la consommation mémoire Optimiser l’écriture
  32. 32. Chunk Taille du lot = commit interval = 2
  33. 33. Chunk
  34. 34. Chunk
  35. 35. Tests ● Coder un batch en TDD ○ POJO every where (Procesor) ● Tests d'intégration facilités ○ @RunWith ○ Step, Job
  36. 36. Tests
  37. 37. Listeners
  38. 38. Listeners ★ ★ ★ ★ ★ ★ JobExecutionListener StepListener Item{Read,Process,Write}Listener StepExecutionListener SkipListener, RetryListener ...
  39. 39. Spring Batch 2.2 Juin 2013 Java Config Support de Spring Data Non-identifying Job Parameters AMQP support
  40. 40. Forces et faiblesses ✔ Batchs complexes mieux maintenables ✔ Productivité ✔ Tests ✔ Ticket d'entrée ✔ Ne convient pas à tous les batchs
  41. 41. 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 ;)
  42. 42. JSR-352 « javax.batch » Ressemble beaucoup à Spring Batch
  43. 43. Spring Batch Allons plus loin
  44. 44. Un batch plus robuste reprise sur erreurs
  45. 45. Reprise sur erreur ● Sauter les erreurs non bloquantes (skip) ○ ● Recommencer un traitement (retry) ○ ● survivre à quelques données invalides survivre à une indisponibilité temporaire Redémarrer un batch (restart) ○ on est en mesure de le relancer
  46. 46. Skip 0001;ABC;DEF; 0002;ABC;DEF; 000zxjgxdjghjsdfkud 0004;ABC;DEF; • Au-delà du « skip-limit », failed • Personnaliser le « skip » • SkipListener pour écouter
  47. 47. Retry
  48. 48. Retry ● ● Relancer une opération si indisponibilité Au-delà du « retry-limit », failed (défaut) ○ ● RetryPolicy ○ ● Personnaliser le « retry » Stratégie entre 2 « retry »: BackoffPolicy RetryListener pour écouter
  49. 49. Restart
  50. 50. Restart • Spring batch stocke des méta data
  51. 51. Restart • Indique si le job est « restartable » ou pas • Indique le nombre max de « restart » • Reader/Writer doivent être « restartable »
  52. 52. 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)
  53. 53. Gestion du flow
  54. 54. Gestion du flow Dézipper le fichier zip * Ajouter des départements * Ajouter des villes failed Alertes
  55. 55. Gestion du flow
  56. 56. 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
  57. 57. Scaling
  58. 58. Scaling
  59. 59. 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
  60. 60. Scaling “Partitioning” • Répartir les données suivant une clé de partition ⇒ « Partitionner » • Traiter les données ⇒ « PartitionHandler »
  61. 61. Horizontal Scaling • RabbitMQ: Message-Oriented Middleware – Découpler le producteur des consommateurs • Batch Orienté Tâche ou Worker
  62. 62. Horizontal Scaling AMQP Spring Integration Exchange Queue Batch AMQP Spring Integration pulling Worker Batch Worker Batch Worker Batch Spring Batch Spring Batch Spring Batch
  63. 63. Monitoring • Graphite http://graphite.wikidot.com
  64. 64. 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
  65. 65. 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
  66. 66. Monitoring Mode push au lieu de pull
  67. 67. Monitoring
  68. 68. Spring Batch Admin
  69. 69. 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, …
  70. 70. Spring Batch Admin
  71. 71. Conclusion Les notions de bases ❏ Job, Step ❏ Reader, Processor, Writer Les notions avancées ❏ Robustesse, Scaling, Monitoring #NoXML
  72. 72. Questions
  73. 73. Crédits Slides http://www.slideshare.net/obazoud/presentations Auteurs (des éditions précédentes) ○ ○ Olivier Bazoud Julien Jakubowski

×