0
Spring BatchMardi 14 Mai 2013Paris JUGOlivier BazoudJulien Jakubowski
Julien Jakubowski @jak78Java depuis > 10 ansSpécialisé Java EE / SpringVos réactions: #springbatch #parisjugIntervenantsOl...
De quoi va-t-on parler ce soir ?•  On va parler de batchs en Java•  … et aussi de bièrehttp://www.flickr.com/photos/fromey...
Nos objectifsEn sortant de la salle, vous savez: Si Spring Batch est utile pour vous (ou pas) Les notions principales de...
Batch : de quoi parle-t-on ?Batch processing = répétition de traitements sur unensemble de données…
Batch : de quoi parle-t-on ?… potentiellement grands volumes…http://www.flickr.com/photos/claudiasofia99/2878579560/
Batch : de quoi parle-t-on ?… sans intervention d’un utilisateur humain – pasd’interface homme-machine
Batch : de quoi parle-t-on ?batch ≠ scheduler
Problèmes récurrents•  Fiabilité
Problèmes récurrents•  Maintenabilité
Problèmes récurrents•  Réinvention de la roue… carrée
Spring Batch propose…•  Un cadre•  Un vocabulaire (domain language)•  Traitement par lots•  Flow, Reprise sur erreur, …•  ...
Spring BatchNotions de base
BeerBatch•  Ecrire la date de début du batch•  Lire le fichier XML de recettes, au format BeerXML•  Ecrire en base de donn...
Schéma du batchRecipeStepInitialStepEcrit une date dans un logChunk oriented taskletItemReader ItemWriterItemProcessor
TaskletRecipeStepInitialStepChunk oriented taskletItemReader ItemProcessor ItemWriterEcrit une date dans un log
Tasklet•  Besoin–  Effectuer 1 tâche unitaire•  Exemples–  Unzip d’un fichier–  Ecrire une date dans un log–  …
ItemReaderRecipeStepInitialStepInitialTaskletChunk oriented taskletItemReader ItemWriterItemProcessorItemReader
ItemReader•  Besoin–  Lire le XML de recettes•  ItemReader–  Fournit des items en entrée
Morceaux de code
ItemProcessorRecipeStepInitialStepInitialTaskletChunk oriented taskletItemReader ItemWriterItemProcessor
ItemProcessor•  Besoin–  Transforme, valide et / ou filtre une recette•  ItemProcessor–  Transforme un item en un autre–  ...
ItemWriterRecipeStepInitialStepInitialTaskletChunk oriented taskletItemReader ItemProcessor ItemWriter
ItemWriter•  Besoin–  Décharge les bières dans une base SQL•  ItemWriter–  Ecrit les items
ChunkRecipeStepInitialStepInitialTaskletChunk oriented taskletItemReader ItemProcessor ItemWriter
Chunk•  Besoin–  Lire, transformer et écrire•  Chunk–  Lit et transforme chaque recette successivement–  Ecrit les recette...
ChunkTaille du lot = commit interval = 2
StepRecipeStepInitialStepChunk oriented taskletItemReader ItemProcessor ItemWriterInitialTasklet
Step•  Besoin–  Etape dans le processus du batch–  Contrôle le workflow
JobRecipeStepInitialStepChunk oriented taskletItemReader ItemProcessor ItemWriterInitialTasklet
Job•  Besoin–  Décrire les étapes du batch–  Composé d’un ou plusieurs stepsSpring Tools Suite
Tests automatisés•  Coder un batch en TDD•  Tests dintégration facilitéshttps://github.com/obazoud/spring-batch-sug
Forces et faiblesses✔  Batchs complexes mieux maintenables✔  Productivité✔  Tests✗  Ticket dentrée✗  Ne convient pas à tou...
Retour d’expérienceEkino•  Avec « Spring Batch »–  Moins de code produit–  Plus de tests unitaires & intégrations–  Spring...
JSR-352 « javax.batch »Ressemble beaucoup àSpring Batch
Spring BatchAllons plus loin
Un batch plus robuste
Flow
Scalinghttp://www.flickr.com/photos/claudiasofia99/2878579560/
Monitoring
Spring Batch Admin
Un batch plus robustereprise sur erreurs
Reprise sur erreur•  Spring Batch « out-of-the-box » propose:– Sauter les erreurs non bloquantes (skip)•  survivre à quelq...
Reprise sur erreur: Skip•  Par défaut, au-delà du « skip-limit », failed0001;ABC;DEF;0002;ABC;DEF;000zxjgxdjghjsdfkud0004;...
Reprise sur erreur: Retry
Reprise sur erreur: Retry•  Relancer une opération si indisponibilité•  Par défaut, au-delà du « retry-limit », failed•  P...
Reprise sur erreur: Restart
Reprise sur erreur:Restart•  Spring batch stocke des méta data
Reprise sur erreur:Restart•  Indique si le job est « restartable »•  Indique le nombre max de « restart »•  Reader/Writer ...
Reprise sur erreurConclusion•  Ecarter des items défectueux (skip)•  Recommencer une step s’il y a une erreurtemporaire (r...
Flow
Gestion du flow•  Exemple plus simple ;)StepAStepBStepAlertFAILED*
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 l...
Scalinghttp://www.flickr.com/photos/claudiasofia99/2878579560/
Scaling
Horizontal Scaling•  RabbitMQ: Message-Oriented Middleware– Découpler le producteur des consommateurs•  Batch Orienté Tâch...
Horizontal ScalingWorker	  Batch	  Worker	  Batch	  Spring	  Batch	  Worker	  Batch	  AMQP	  Spring	  Integra6on	  Exchang...
Scaling•  Si un ItemProcessor est « lent »•  ItemProcessor en asynchrone•  ItemWriter attend la fin des processors•  Async...
Scaling•  Multi-threaded Step (Local)– Une Step est multithreaded•  Parallel Steps (Local)– Les Steps sont exécutées en pa...
Scaling•  Remote Chunking of Step (Remote)– Distribution des chunks (Horizontal Scaling)– Reader sur les master– Processor...
Monitoring•  Graphite http://graphite.wikidot.com
Monitoring•  Collectd–  http://collectd.org– démon qui recueille périodiquement desstatistiques de performance du système•...
Monitoring•  Metrics–  http://metrics.codahale.com/– Connaitre l’intérieur de votre application– Gauges, Counters, Meters,...
MonitoringMode 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, ...
Liens•  Le code de la présentation–  https://github.com/obazoud/spring-batch-sug•  Spring Batch 2.1.x–  http://static.spri...
Spring Batch ParisJUG
Upcoming SlideShare
Loading in...5
×

Spring Batch ParisJUG

1,237

Published on

0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
1,237
On Slideshare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
29
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

Transcript of "Spring Batch ParisJUG "

  1. 1. Spring BatchMardi 14 Mai 2013Paris JUGOlivier BazoudJulien Jakubowski
  2. 2. Julien Jakubowski @jak78Java depuis > 10 ansSpécialisé Java EE / SpringVos réactions: #springbatch #parisjugIntervenantsOlivier Bazoud @obazoudArchitecte technique séniorJava EE / Spring, Spring Batch, NoSQL, Node.jsCo-auteur de « Spring Batch in Action »
  3. 3. De quoi va-t-on parler ce soir ?•  On va parler de batchs en Java•  … et aussi de bièrehttp://www.flickr.com/photos/fromeyetopixel/2559391584/
  4. 4. Nos objectifsEn sortant de la salle, vous savez: Si Spring Batch est utile pour vous (ou pas) Les notions principales de Spring Batch… et quelques notions avancées Faire un batch « Spring Batch » dès demainhttps://github.com/obazoud/spring-batch-sug
  5. 5. Batch : de quoi parle-t-on ?Batch processing = répétition de traitements sur unensemble de données…
  6. 6. Batch : de quoi parle-t-on ?… potentiellement grands volumes…http://www.flickr.com/photos/claudiasofia99/2878579560/
  7. 7. Batch : de quoi parle-t-on ?… sans intervention d’un utilisateur humain – pasd’interface homme-machine
  8. 8. Batch : de quoi parle-t-on ?batch ≠ scheduler
  9. 9. Problèmes récurrents•  Fiabilité
  10. 10. Problèmes récurrents•  Maintenabilité
  11. 11. Problèmes récurrents•  Réinvention de la roue… carrée
  12. 12. Spring Batch propose…•  Un cadre•  Un vocabulaire (domain language)•  Traitement par lots•  Flow, Reprise sur erreur, …•  Spring dans ses batchs•  …ParallélismePartitionnementSpring Batch Admin
  13. 13. Spring BatchNotions de base
  14. 14. BeerBatch•  Ecrire la date de début du batch•  Lire le fichier XML de recettes, au format BeerXML•  Ecrire en base de données
  15. 15. Schéma du batchRecipeStepInitialStepEcrit une date dans un logChunk oriented taskletItemReader ItemWriterItemProcessor
  16. 16. TaskletRecipeStepInitialStepChunk oriented taskletItemReader ItemProcessor ItemWriterEcrit une date dans un log
  17. 17. Tasklet•  Besoin–  Effectuer 1 tâche unitaire•  Exemples–  Unzip d’un fichier–  Ecrire une date dans un log–  …
  18. 18. ItemReaderRecipeStepInitialStepInitialTaskletChunk oriented taskletItemReader ItemWriterItemProcessorItemReader
  19. 19. ItemReader•  Besoin–  Lire le XML de recettes•  ItemReader–  Fournit des items en entrée
  20. 20. Morceaux de code
  21. 21. ItemProcessorRecipeStepInitialStepInitialTaskletChunk oriented taskletItemReader ItemWriterItemProcessor
  22. 22. ItemProcessor•  Besoin–  Transforme, valide et / ou filtre une recette•  ItemProcessor–  Transforme un item en un autre–  Filtrer ou rejeter un item–  Emplacement pour les « règles métier »
  23. 23. ItemWriterRecipeStepInitialStepInitialTaskletChunk oriented taskletItemReader ItemProcessor ItemWriter
  24. 24. ItemWriter•  Besoin–  Décharge les bières dans une base SQL•  ItemWriter–  Ecrit les items
  25. 25. ChunkRecipeStepInitialStepInitialTaskletChunk oriented taskletItemReader ItemProcessor ItemWriter
  26. 26. Chunk•  Besoin–  Lire, transformer et écrire•  Chunk–  Lit et transforme chaque recette successivement–  Ecrit les recettes, par lot
  27. 27. ChunkTaille du lot = commit interval = 2
  28. 28. StepRecipeStepInitialStepChunk oriented taskletItemReader ItemProcessor ItemWriterInitialTasklet
  29. 29. Step•  Besoin–  Etape dans le processus du batch–  Contrôle le workflow
  30. 30. JobRecipeStepInitialStepChunk oriented taskletItemReader ItemProcessor ItemWriterInitialTasklet
  31. 31. Job•  Besoin–  Décrire les étapes du batch–  Composé d’un ou plusieurs stepsSpring Tools Suite
  32. 32. Tests automatisés•  Coder un batch en TDD•  Tests dintégration facilitéshttps://github.com/obazoud/spring-batch-sug
  33. 33. Forces et faiblesses✔  Batchs complexes mieux maintenables✔  Productivité✔  Tests✗  Ticket dentrée✗  Ne convient pas à tous les batchs
  34. 34. Retour d’expérienceEkino•  Avec « Spring Batch »–  Moins de code produit–  Plus de tests unitaires & intégrations–  Spring Batch soccupe de la montée en charge–  SQL/MyBatis•  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 ;)
  35. 35. JSR-352 « javax.batch »Ressemble beaucoup àSpring Batch
  36. 36. Spring BatchAllons plus loin
  37. 37. Un batch plus robuste
  38. 38. Flow
  39. 39. Scalinghttp://www.flickr.com/photos/claudiasofia99/2878579560/
  40. 40. Monitoring
  41. 41. Spring Batch Admin
  42. 42. Un batch plus robustereprise sur erreurs
  43. 43. Reprise sur erreur•  Spring Batch « out-of-the-box » propose:– 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
  44. 44. Reprise sur erreur: Skip•  Par défaut, au-delà du « skip-limit », failed0001;ABC;DEF;0002;ABC;DEF;000zxjgxdjghjsdfkud0004;ABC;DEF;
  45. 45. Reprise sur erreur: Retry
  46. 46. Reprise sur erreur: Retry•  Relancer une opération si indisponibilité•  Par défaut, au-delà du « retry-limit », failed•  Personnaliser le « retry »– RetryPolicy– Stratégie entre 2 « retry »: BackoffPolicy•  RetryListener pour écouter
  47. 47. Reprise sur erreur: Restart
  48. 48. Reprise sur erreur:Restart•  Spring batch stocke des méta data
  49. 49. Reprise sur erreur:Restart•  Indique si le job est « restartable »•  Indique le nombre max de « restart »•  Reader/Writer doivent être « restartable »
  50. 50. Reprise sur erreurConclusion•  Ecarter des items défectueux (skip)•  Recommencer une step s’il y a une erreurtemporaire (retry)•  Redémarrer un job (restart)
  51. 51. Flow
  52. 52. Gestion du flow•  Exemple plus simple ;)StepAStepBStepAlertFAILED*
  53. 53. Gestion du flow
  54. 54. 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
  55. 55. Scalinghttp://www.flickr.com/photos/claudiasofia99/2878579560/
  56. 56. Scaling
  57. 57. Horizontal Scaling•  RabbitMQ: Message-Oriented Middleware– Découpler le producteur des consommateurs•  Batch Orienté Tâche ou Worker
  58. 58. Horizontal ScalingWorker  Batch  Worker  Batch  Spring  Batch  Worker  Batch  AMQP  Spring  Integra6on  Exchange  Queue  Batch  Spring  Batch   Spring  Batch  AMQP  Spring  Integra6on  
  59. 59. Scaling•  Si un ItemProcessor est « lent »•  ItemProcessor en asynchrone•  ItemWriter attend la fin des processors•  AsyncItemProcessor / AsyncItemWriter
  60. 60. Scaling•  Multi-threaded Step (Local)– Une Step est multithreaded•  Parallel Steps (Local)– Les Steps sont exécutées en parallèle
  61. 61. Scaling•  Remote Chunking of Step (Remote)– Distribution des chunks (Horizontal Scaling)– Reader sur les master– Processor/Writer sur les slaves•  Partitioning a Step (Local + Remote)– Découpe les données suivant une clé departition
  62. 62. Monitoring•  Graphite http://graphite.wikidot.com
  63. 63. Monitoring•  Collectd–  http://collectd.org– démon qui recueille périodiquement desstatistiques de performance du système•  JMXTrans–  https://github.com/jmxtrans/jmxtrans– Interroge les données JMX de la JVM et lesenvoyer dans Graphite
  64. 64. 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–  Bientôt sur Maven Central
  65. 65. MonitoringMode push au lieu de pull
  66. 66. Monitoring
  67. 67. Spring Batch Admin
  68. 68. 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, …
  69. 69. Liens•  Le code de la présentation–  https://github.com/obazoud/spring-batch-sug•  Spring Batch 2.1.x–  http://static.springsource.org/spring-batch•  Spring Batch 2.2 coming soon•  Articles sur le web–  http://www.theserverside.com/news/1363855/Spring-Batch-Overview–  http://www.infoq.com/presentations/syer-introducing-spring-batch–  http://blog.zenika.com/index.php?post/2010/03/05/To-batch-or-not-to-batch–  http://blog.octo.com/spring-batch-par-quel-bout-le-prendre/
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×