Breizhjug spring batch 2011

1 329 vues

Publié le

Présentation de Spring Batch au Breizhjug par @obazoud et @jak78

Publié dans : Technologie
1 commentaire
1 j’aime
Statistiques
Remarques
Aucun téléchargement
Vues
Nombre de vues
1 329
Sur SlideShare
0
Issues des intégrations
0
Intégrations
1
Actions
Partages
0
Téléchargements
101
Commentaires
1
J’aime
1
Intégrations 0
Aucune incorporation

Aucune remarque pour cette diapositive

Breizhjug spring batch 2011

  1. 1. Spring Batch Lundi 6 Juin 2011Copyright © BreizhJug
  2. 2. Intervenants Olivier Bazoud, @obazoud, Ekino (FullSIX Group) Architecte technique de sites web à fort traffic Java EE / Spring, Spring Batch, Groovy, Grails Co-auteur de « Spring Batch in Action » Spring User Group France Julien Jakubowski, @jak78, OCTO Technology Architecte technique Spécialisé Java EE / Spring Productivité et qualité des développements Chti JUG, Agile Tour LilleCopyright © BreizhJug
  3. 3. De quoi va-t-on parler ce soir ? • On va parler de batchs en Java • … et aussi de bièreCopyright © BreizhJug http://www.flickr.com/photos/fromeyetopixel/2559391584/
  4. 4. Nos objectifs En sortant de la salle, vous : Savez identifier certains problèmes récurrents avec les batchs écrits en Java Savez si Spring Batch est utile pour vous (ou pas) Avez intégré les notions principales … et quelques notions avancées Pouvez faire un batch « Spring Batch » demainCopyright © BreizhJug
  5. 5. Ce qui vous attend • Batch : de quoi parle-t-on ? • Pourquoi Spring Batch ? • Faisons ensemble un batch... – Introduction progressive des notions de Spring Batch • Retours dexpérience • Forces et faiblesses • Notions avancées • Questions / réponsesCopyright © BreizhJug
  6. 6. Batch : de quoi parle-t-on ? Batch processing = suite de traitements sur ensemble de données…Copyright © BreizhJug
  7. 7. Batch : de quoi parle-t-on ? … potentiellement grands volumes… http://www.flickr.com/photos/claudiasofia99/2878579560/Copyright © BreizhJug
  8. 8. Batch : de quoi parle-t-on ? … sans intervention d’un utilisateur humain – pas d’interface homme-machineCopyright © BreizhJug
  9. 9. Batch : de quoi parle-t-on ? Exemples: • Import flat / XML dans une base de données • Mise à jour de données de référentiel • Intégration de flux financiers dans un SI • …Copyright © BreizhJug
  10. 10. Batch : de quoi parle-t-on ? Un batch n’est pas un scheduler • Cron, Quartz, $U… • Mais un scheduler peut le lancerCopyright © BreizhJug
  11. 11. Beer Batch • Caractéristiques : – Lire le fichier XML de recettes, au format BeerXML – Ecrire les recettes en base de données – Filtrer certaines recettes et créer un fichier de rejetsCopyright © BreizhJug
  12. 12. Problèmes récurrents • FiabilitéCopyright © BreizhJug
  13. 13. Problèmes récurrents • MaintenabilitéCopyright © BreizhJug
  14. 14. Problèmes récurrents • Réinvention de la roue… carréeCopyright © BreizhJug
  15. 15. Quand j’écris une application web…Copyright © BreizhJug
  16. 16. Quand j’accède à une base de données…Copyright © BreizhJug
  17. 17. Et quand j’écris un batch ? Je suis… à poil ? http://www.flickr.com/photos/crystaljingsr/3914729343/sizes/o/in/set-72157622354789320/Copyright © BreizhJug
  18. 18. Et quand j’écris un batch ? Spring Batch offre pourtant une solution pour vous guider lors de l’écriture de vos batchs en JavaCopyright © BreizhJug
  19. 19. Spring Batch propose… • Un cadre • Un vocabulaire (domainlanguage) • Traitement par lots (grands volumes de données) • Gestion des transactions • Flow, reprise sur erreur • Spring dans ses batchs Parallélisme Spring Batch Admin PartitionnementCopyright © BreizhJug
  20. 20. Spring Batch Notions de baseCopyright © BreizhJug
  21. 21. BeerBatch V2 • Ecrire la date de début du batch • Lire le fichier XML de recettes, au format BeerXML • Filtrer certaines recettes et créer un fichier de rejets • Ecrire en base de donnéesCopyright © BreizhJug
  22. 22. Schéma du batch InitialStep InitialTasklet RecipeStep Chunkorientedtasklet ItemReader ItemProcessor ItemWriterCopyright © BreizhJug
  23. 23. ItemReader InitialStep InitialTasklet RecipeStep Chunkorientedtasklet ItemReader ItemProcessor ItemWriterCopyright © BreizhJug
  24. 24. ItemReader • Besoin – Lire le XML de recettes • ItemReader – Fournit des items en entrée <xml> SELECT ... FROM ... 123;AB; 456;CD;Copyright © BreizhJug
  25. 25. Morceaux de codeCopyright © BreizhJug
  26. 26. ItemProcessor InitialStep InitialTasklet RecipeStep Chunkorientedtasklet ItemReader ItemProcessor ItemWriterCopyright © BreizhJug
  27. 27. 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 »Copyright © BreizhJug
  28. 28. Morceaux de codeCopyright © BreizhJug
  29. 29. Morceaux de codeCopyright © BreizhJug
  30. 30. ItemWriter InitialStep InitialTasklet RecipeStep Chunkorientedtasklet ItemReader ItemProcessor ItemWriterCopyright © BreizhJug
  31. 31. ItemWriter • Besoin – Décharge les bières dans une base SQL • ItemWriter – Ecrit les items <xml> INSERT... INTO ... 123;AB; 456;CD;Copyright © BreizhJug
  32. 32. Morceaux de codeCopyright © BreizhJug
  33. 33. Chunk InitialStep InitialTasklet RecipeStep Chunkorientedtasklet ItemReader ItemProcessor ItemWriterCopyright © BreizhJug
  34. 34. Chunk • Besoin – Lire, transformer et écrire • Chunk – Lire et transformer les données successivement – Ecrire le lot de données – Le commit-interval définit la taille du lot (différent de la taille du fichier) – Gestion de la transaction : Commit/RollbackCopyright © BreizhJug
  35. 35. ChunkCopyright © BreizhJug
  36. 36. Traitement par lotsCopyright © BreizhJug
  37. 37. Morceaux de codeCopyright © BreizhJug
  38. 38. Listener InitialStep InitialTasklet RecipeStep Chunkorientedtasklet ItemReader ItemProcessor ItemWriterCopyright © BreizhJug
  39. 39. Listener • Besoin – Création d’un fichier de rejet • Listener – Etre à l’écoute des évènements du batchCopyright © BreizhJug
  40. 40. Morceaux de codeCopyright © BreizhJug
  41. 41. Morceaux de codeCopyright © BreizhJug
  42. 42. Morceaux de codeCopyright © BreizhJug
  43. 43. Tasklet InitialStep InitialTasklet RecipeStep Chunkorientedtasklet ItemReader ItemProcessor ItemWriterCopyright © BreizhJug
  44. 44. Tasklet • Besoin – Effectuer une tâche unitaire • Exemples – Supprimer un répertoire et son contenu – Unzip d’un fichier – Appel d’une procédure stockée – Appel d’un web serviceCopyright © BreizhJug
  45. 45. Morceaux de codeCopyright © BreizhJug
  46. 46. Step InitialStep InitialTasklet RecipeStep Chunkorientedtasklet ItemReader ItemProcessor ItemWriterCopyright © BreizhJug
  47. 47. Step • Besoin – Etape dans le processus du batch – Contrôle le workflowCopyright © BreizhJug
  48. 48. Job InitialStep InitialTasklet RecipeStep Chunkorientedtasklet ItemReader ItemProcessor ItemWriterCopyright © BreizhJug
  49. 49. Job • Besoin – Décrire les étapes du batch – Composé d’un ou plusieurs stepsCopyright © BreizhJug Spring Tools Suite
  50. 50. Morceaux de codeCopyright © BreizhJug
  51. 51. Lancer un job directementCopyright © BreizhJug
  52. 52. Lancer un job via un scheduler On utilise ici SpringScheduler. Il est indépendant de Spring BatchCopyright © BreizhJug
  53. 53. Lancer un job via un schedulerCopyright © BreizhJug
  54. 54. Tests • Tests unitaires facilités via le découpage Spring Batch – writers, processors etc... • Tests dintégration facilités par Spring – @RunWith – Step, JobCopyright © BreizhJug
  55. 55. Morceaux de codeCopyright © BreizhJug
  56. 56. Morceaux de codeCopyright © BreizhJug
  57. 57. Forces et faiblesses ✔Fiabilité et bons patterns ✔Tests unitaires et dintégration, TDD ✔Batchs complexes mieux maintenables ✔Bénéficie de fonctions avancées à moindre coût ✔...the Springway, Spring Intégration ✔Productivité, à terme... ✗… après avoir payé le ticket dentréeCopyright © BreizhJug
  58. 58. Retour d’expérience Ekino • Framework de batch – Moins de code produit, moins derreurs possibles – Plus de tests unitaires + intégrations • Mise en place par lexemple – Jai fait le premier batch pour montrer la voie – Un même vocabulaire aide à se comprendre • Répond à nos besoins même si les batchs sont différents au niveau métierCopyright © BreizhJug
  59. 59. Retour d’expérience Ekino • Nos batchs « Spring Batch » sont en SQL plutôt quen Hibernate • Spring Batch soccupe de la gestion transactionnelle • En moyenne – 15% - 50% de gain sur le temps de développement – 15% - 50% de gain au « runtime » • Gains plus impressionnants sur certains cas – XML 100Mo + SQL; Gain : de 60 mn à 8mn – 10 fichiers 4Mo + SQL; Gain : de 10mn à 1mn30sCopyright © BreizhJug
  60. 60. Des questions, avant la suite ?Copyright © BreizhJug http://www.flickr.com/photos/crystaljingsr/3914729343/in/set-72157622354789320/
  61. 61. Spring Batch Allons plus loinCopyright © BreizhJug
  62. 62. Allons plus loin… • Un cas un peu plus complexe – maître détail • La reprise sur erreurs • Un batch qui n’a pas un flow de bisounours… • Aperçu du parallélisme et du partitionnementCopyright © BreizhJug
  63. 63. Maître détail R;BurtonAle;AllGrain;Brad Smith H;Goldings, East Kent;UnitedKingdom H;NorthernBrewer;Germany H;Fuggles;UnitedKingdom END R;DryStout;AllGrain;Brad Smith H;Fuggles;UnitedKingdom ENDCopyright © BreizhJug
  64. 64. Maître détail RecipeStep Chunkorientedtasklet ItemReader ItemProcessor ItemWriterCopyright © BreizhJug
  65. 65. Maître détail Déclaration du JobCopyright © BreizhJug
  66. 66. Maître détail Déclaration du reader customCopyright © BreizhJug
  67. 67. R;BurtonAle;AllGrain;Brad Smith H;Goldings, East Kent;UnitedKingdom H;NorthernBrewer;Germany H;Fuggles;UnitedKingdom END R;DryStout;AllGrain;Brad Smith H;Fuggles;UnitedKingdom ENDCopyright © BreizhJug
  68. 68. Maître détail Déclaration du reader déléguéCopyright © BreizhJug
  69. 69. A retenir • Implémentation de notre propre reader • Ré-utilisation d’un reader déjà fourni par Spring Batch • Ré-utilisation de ce que nous avons déjà codé précédemmentCopyright © BreizhJug
  70. 70. Reprise sur erreur • Un batch plus robuste (tolérant à l’erreur) c’est un batch : – Qui survit à quelques données invalides – Qui survit à une indisponibilité – Qu’on est en mesure de relancerCopyright © BreizhJug
  71. 71. Reprise sur erreur • Spring Batch out-of-the-box propose: – Sauter les erreurs non bloquantes (skip) – Recommencer un traitement (retry) – Déterminer si le batch est fini (completion) – Redémarrer un batch (restart)Copyright © BreizhJug
  72. 72. Reprise sur erreur: Skip 0001;ABC;DEF; 0002;ABC;DEF; 000zxjgxdjghjsdfkud 0004;ABC;DEF; • Ne pas arrêter le batch si la lecture/process/écriture échoue • Personnaliser les cas de « skip » • Ecouter les cas de « skip »Copyright © BreizhJug
  73. 73. Reprise sur erreur: Skip – Si FlatFileException, Spring Batch skip l’item – Skip de 10 items max – Au-delà la step « failed » – Include/Exclude possibleCopyright © BreizhJug
  74. 74. Reprise sur erreur: Skip • Personnaliser la gestion du « skip » • Par défaut: LimitCheckingItemSkipPolicyCopyright © BreizhJug
  75. 75. Reprise sur erreur: Skip • Configuration de la gestion du « skip »Copyright © BreizhJug
  76. 76. Reprise sur erreur: Skip • Un listener permet de traiter les items écartés • Les annotations existent aussi – @OnSkipInRead – @OnSkipInWrite – @OnSkipInProcessCopyright © BreizhJug
  77. 77. Reprise sur erreur: Retry http://www.libertaland.com/2011/04/une-femme-de-75-ans-coupe-tout-linternet-en-armenie/Copyright © BreizhJug
  78. 78. Reprise sur erreur: Retry • Permet de relancer une opération si indispo temporaire • Personnaliser les cas de « retry » • Ecouter les cas de « retry »Copyright © BreizhJug
  79. 79. Reprise sur erreur: Retry – Si DLDAE, Spring Batch recommence – Retry 3 fois max – Au-delà la step « failed » – Include/Exclude possibleCopyright © BreizhJug
  80. 80. Reprise sur erreur: Retry • Personnaliser le « retry »: RetryPolicy – SimpleRetryPolicy (défaut) • Stratégie entre 2 « retry »: BackoffPolicy – NoBackOffPolicy (défaut) – ExponentialBackOffPolicy vraiment utileCopyright © BreizhJug
  81. 81. Reprise sur erreur: Retry • Configuration de la gestion du « retry »Copyright © BreizhJug
  82. 82. Reprise sur erreur: Retry • Un listener permet de traiter les « retry »Copyright © BreizhJug
  83. 83. Reprise sur erreur: Retry • Pour les tasklets – RetryTemplate – RetryOperationsInterceptor avec de l’AOPCopyright © BreizhJug
  84. 84. Reprise sur erreur: Restart • Même avec skip/retry, un batch peut planter • Il reste encore une solution  • Nous pouvons redémarrer le batchCopyright © BreizhJug
  85. 85. Reprise sur erreur: Restart • Spring batch stocke des méta dataCopyright © BreizhJug
  86. 86. Reprise sur erreur: Restart • Spring Batch persiste régulièrement les « ExecutionContext » • Ceci permet à Spring Batch de savoir où reprendre • C’est ce qui fait qu’un batch est « restartable »Copyright © BreizhJug
  87. 87. Reprise sur erreur: Restart • Si vous voulez que vos Reader/Writer custom soient restartables, vous devez les concevoir restartables. • Certains fournis par Spring Batch le sont, mais pas tous • Ce n’est pas toujours possible – ex: Writer JMS.Copyright © BreizhJug
  88. 88. Reprise sur erreur: Restart • ItemStreamCopyright © BreizhJug
  89. 89. Reprise sur erreur: Restart • Exemple de Reader « restartable »Copyright © BreizhJug
  90. 90. Reprise sur erreur Conclusion • Nous savons: – Ecarter des items défectueux (skip) – Recommencer un step s’il y a une erreur temporaire (retry) – Implémenter notre propre stratégie de « skip » et « retry » – Redémarrer un job avec certains stepsCopyright © BreizhJug
  91. 91. Gestion du flow Le « batch bisounours » Step A Step BCopyright © BreizhJug
  92. 92. Gestion du flow ExempleCopyright © BreizhJug
  93. 93. Gestion du flow ExempleCopyright © BreizhJug
  94. 94. Gestion du flow • Le « batch complexe» Step Step Step Step Step Step Step Step StepCopyright © BreizhJug
  95. 95. Gestion du flow • Comment… – faire des flows non linéaires – piloter l’enchaînement des steps – passer des données entre stepsCopyright © BreizhJug
  96. 96. Gestion du flow • Exemple plus simple ;) StepA FAILED StepAlert * StepBCopyright © BreizhJug
  97. 97. Gestion du flowCopyright © BreizhJug
  98. 98. Gestion du flow • Batch Status – Représente le status du job ou step • Exit Status – Représente le status du job ou step au final • Exemple – COMPLETED, STARTING, STARTED, STOPPING, STOPPED, FAILED,ABANDONED or UNKNOWN – C?T (CAT mais pas COUNT), C*T (CAT et COUNT)Copyright © BreizhJug
  99. 99. Gestion du flow • Créer et utiliser ses propres « exit status » – StepExecutionListener – JobDeciderCopyright © BreizhJug
  100. 100. Gestion du flow • Utiliser ses propres « exit status » StepA COMPLETED WITH SKIPS StepC * StepBCopyright © BreizhJug
  101. 101. Gestion du flow • « exit status » + StepExecutionListenerCopyright © BreizhJug
  102. 102. Gestion du flow • ConfigurationCopyright © BreizhJug
  103. 103. Gestion du flow • « exit status » + JobExecutionDeciderCopyright © BreizhJug
  104. 104. Gestion du flow • ConfigurationCopyright © BreizhJug
  105. 105. Gestion du flow • Alors « StepExecutionListener » ou « JobExecutionDecider » ? – Le exit status du step est stocké comme meta data – Pas de « latebinding » avec le JobExecutionDeciderCopyright © BreizhJug
  106. 106. Gestion du flow • Encore plus de contrôle: end, failCopyright © BreizhJug
  107. 107. Gestion du flow • Partager des informations entre les steps – À la Spring:beanclassic – A la Spring Batch: « Executioncontext » • 1 pour le Job et 1 par Step • C’est une Map sauvegardé dans les meta data • Attention au volume • Latebindings – #{jobExecutionContext[‘myKey]}Copyright © BreizhJug
  108. 108. Gestion du flow • Accès à ExecutionContextCopyright © BreizhJug
  109. 109. Gestion du flow • ConfigurationCopyright © BreizhJug
  110. 110. Gestion du flow Step A • Mutualiser les flows Step B Mon Flow Step C Step DCopyright © BreizhJug
  111. 111. Gestion du flow • ConfigurationCopyright © BreizhJug
  112. 112. Gestion du flow • Réutiliser un JobCopyright © BreizhJug
  113. 113. Gestion du flow • Conclusion, nous avons – Fait des flows non linéaires – Piloté l’enchaînement des steps – Passé des données entre steps – Mutualisé et réutilisé des jobsCopyright © BreizhJug
  114. 114. Scaling http://www.flickr.com/photos/claudiasofia99/2878579560/Copyright © BreizhJug
  115. 115. Scaling • Différentes stratégies possibles – Multi-threaded Step (single process) – Parallel Steps (single process) – Remote Chunking of Step (multi process) – Partitioning a Step (single or multi process)Copyright © BreizhJug
  116. 116. Spring Batch in Action http://www.manning.com/templierCopyright © BreizhJug
  117. 117. Liens • Spring User Group Paris – http://groups.google.fr/group/sugfr • Le code de la présentation – http://code.google.com/p/fr-sug-spring-batch • Spring Batch 2.1.x – http://static.springsource.org/spring-batch • 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/Copyright © BreizhJug
  118. 118. Questions ?Copyright © BreizhJug
  119. 119. ROTI http://www.flickr.com/photos/34943981@N00/202923614/Copyright © BreizhJug

×