SlideShare une entreprise Scribd logo
Ch’ti JUG


Spring Batch
  Mardi 29 Novembre 2011



    Olivier Bazoud
  Julien Jakubowski
Le mot du sponsor
 de cette session
Ekino / @3k1n0
• Conception, développement et
  maintenance de dispositifs digitaux
• 150 personnes
  – 50% de développeurs, 0% de régie
• Digital
  – Mobile + HTML + RIA
  – JAVA + PHP + .NET
• 6 pôles de compétences, 25 clients, 50
  projets/an = 1 équipe
Duchess France
Duchess France - Présentation

Ce qu'est le JDuchess ...




                            Et ce qu'il n'est pas !
Duchess France - L'équipe


             @Audrey_Neveu


 @karesti                     @agnes_crepet



              @cfalguiere


  @Zazoun                     @dijouxellenne



             @MathildeLemee
Duchess France - Objectifs

   Avoir une visibilité des
    femmes dans l'IT ...

                              … Et les inciter à
                               participer aux
                               conférences
Duchess France - Les Actions
Duchess France - En chiffre

        70 membres



        60 membres



        + de 700 followers
Duchess France - Nous suivre

        http://jduchess.org/duchess-france/



        duchessfr



        @duchessfr
Merci de votre attention !
• http://lille.startupweekend.org
Ch’ti JUG


Spring Batch
  Mardi 29 Novembre 2011



    Olivier Bazoud
  Julien Jakubowski
Intervenants
Olivier Bazoud @obazoud, Ekino @3k1n0
   ISEN (Toulon)
   Architecte technique
   Java EE / Spring, Spring Batch, NoSQL, Node.js
   Co-auteur de « Spring Batch in Action »
   Spring User Group France


Julien Jakubowski, @jak78, OCTO Technology
   ISEN (le vrai, de Lille)
   Architecte technique
   Spécialisé Java EE / Spring
   Ch'ti JUG, Agile Tour Lille
De quoi va-t-on parler ce soir ?
• On va parler de batchs en Java



• … et aussi de bière




        http://www.flickr.com/photos/fromeyetopixel/2559391584/
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 » demain
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 d'expérience
•   Forces et faiblesses
•   Notions avancées - vote
•   Questions / Réponses
Batch : de quoi parle-t-on ?
Batch processing = répétition de traitements sur
  un ensemble 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 – pas
 d’interface homme-machine
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
• …
Batch : de quoi parle-t-on ?
Un batch n’est pas un scheduler
• Cron, inotify, Quartz, $U…
• Mais un scheduler peut le lancer
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 rejets
Problèmes récurrents
• Fiabilité
Problèmes récurrents
• Maintenabilité
Problèmes récurrents
• Réinvention de la roue… carrée
Quand j’écris une
application web…
Quand j’accède à une base
     de données…
Et quand j’écris un batch ?
                         Je suis… à poil ?




 http://www.flickr.com/photos/crystaljingsr/3914729343/sizes/o/in/set-72157622354789320/
Et quand j’écris un batch ?

Spring Batch offre pourtant une solution pour vous guider
lors de l’écriture de vos batchs en Java
Spring Batch propose…
• Un cadre
• Un vocabulaire (domain language)
• Traitement par lots (grands volumes de
  données)
• Gestion des transactions
• Flow, reprise sur erreur
• Spring dans ses batchs

      Parallélisme          Spring Batch Admin
          Partitionnement
Spring Batch
Notions de base
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ées




    Spring Batch
Schéma du batch
                  InitialStep
                 InitialTasklet




                  RecipeStep

             Chunk oriented tasklet

ItemReader       ItemProcessor        ItemWriter
Tasklet
                  InitialStep
                 InitialTasklet




                  RecipeStep

             Chunk oriented tasklet

ItemReader       ItemProcessor        ItemWriter
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 service
Morceaux de code
ItemReader
                  InitialStep
                 InitialTasklet




                  RecipeStep

             Chunk oriented tasklet

ItemReader       ItemProcessor        ItemWriter
ItemReader
• Besoin
  – Lire le XML de recettes
• ItemReader
  – Fournit des items en entrée




           <xml>                  SELECT ... FROM ...

           123;AB;
           456;CD;
Morceaux de code
ItemProcessor
                   InitialStep
                  InitialTasklet




                   RecipeStep

              Chunk oriented tasklet

ItemReader        ItemProcessor        ItemWriter
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 »
Morceaux de code
Morceaux de code
ItemWriter
                  InitialStep
                 InitialTasklet




                  RecipeStep

             Chunk oriented tasklet

ItemReader       ItemProcessor        ItemWriter
ItemWriter
• Besoin
   – Décharge les bières dans une base SQL
• ItemWriter
   – Ecrit les items




             <xml>                  INSERT... INTO ...

             123;AB;
             456;CD;
Morceaux de code
Chunk
                  InitialStep
                 InitialTasklet




                  RecipeStep

             Chunk oriented tasklet

ItemReader       ItemProcessor        ItemWriter
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/Rollback
Chunk
Traitement par lots
Morceaux de code
Listener
                  InitialStep
                 InitialTasklet




                  RecipeStep

             Chunk oriented tasklet

ItemReader       ItemProcessor        ItemWriter
Listener

• Besoin
  – Création d’un fichier de rejet
• Listener
  – Etre à l’écoute des évènements du batch
Morceaux de code
Morceaux de code
Morceaux de code
Step
                  InitialStep
                 InitialTasklet




                  RecipeStep

             Chunk oriented tasklet

ItemReader       ItemProcessor        ItemWriter
Step

• Besoin
  – Etape dans le processus du batch
  – Contrôle le workflow
Job
                  InitialStep
                 InitialTasklet




                  RecipeStep

             Chunk oriented tasklet

ItemReader       ItemProcessor        ItemWriter
Job
• Besoin
  – Décrire les étapes du batch
  – Composé d’un ou plusieurs steps




                      Spring Tools Suite
Morceaux de code
Lancer un job directement
Lancer un job
            via un scheduler

On utilise ici Spring Scheduler.
Il est indépendant de Spring Batch
Lancer un job
via un scheduler
Tests
• Tests unitaires facilités via le découpage Spring Batch
   – writers, processors etc...

• Tests d'intégration facilités par Spring
   – @RunWith
   – Step, Job
Morceaux de code
Morceaux de code
Forces et faiblesses
✔Fiabilité et bons patterns
✔Tests unitaires et d'intégration, TDD
✔Batchs complexes mieux maintenables
✔Bénéficie de fonctions avancées à moindre coût
✔...the Spring way, intégration à Spring
✔Productivité, à terme...
✗… après avoir payé le ticket d'entrée
Retour d’expérience
                 Ekino
• Framework de batch
  – Moins de code produit, moins d'erreurs possibles
  – Plus de tests unitaires + intégrations


• Mise en place par l'exemple
  – J'ai 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étier
Retour d’expérience
                Ekino
• Nos batchs « Spring Batch » sont en SQL plutôt
  qu'en Hibernate
• Spring Batch s'occupe 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 à 1mn30s
Des questions,
    avant la suite ?




http://www.flickr.com/photos/crystaljingsr/3914729343/in/set-72157622354789320/
Spring Batch
Allons plus loin
Recipe
   Maître détail
                             Hop    Hop     Hop



R;Burton Ale;All Grain;Brad Smith
H;Goldings, East Kent;United Kingdom
H;Northern Brewer;Germany
H;Fuggles;United Kingdom
END
R;Dry Stout;All Grain;Brad Smith
H;Fuggles;United Kingdom
END
Un batch plus robuste
   reprise sur erreurs
Flow

  Step A




  Step B
Scaling et parallélisme




http://www.flickr.com/photos/claudiasofia99/2878579560/
Spring Batch et Hibernate
Spring Batch Admin
Allons plus loin…
             Au choix!
• Un cas un peu plus complexe – maître
  détail
• La reprise sur erreurs
• Un batch qui n’a pas un flow de
  bisounours…
• Scaling et parallélisme
• Spring Batch et Hibernate
• Spring Batch Admin
Maître détail

R;Burton Ale;All Grain;Brad Smith
H;Goldings, East Kent;United Kingdom
H;Northern Brewer;Germany
H;Fuggles;United Kingdom
END
R;Dry Stout;All Grain;Brad Smith
H;Fuggles;United Kingdom
END
Maître détail

                   RecipeStep

              Chunk oriented tasklet

ItemReader        ItemProcessor        ItemWriter
Maître détail
Déclaration du Job
Maître détail
Déclaration du reader custom
R;Burton Ale;All Grain;Brad Smith
H;Goldings, East Kent;United Kingdom
H;Northern Brewer;Germany
H;Fuggles;United Kingdom
END
R;Dry Stout;All Grain;Brad Smith
H;Fuggles;United Kingdom
END
Maître détail
Déclaration du reader délégué
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édemment
Un batch plus robuste
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 relancer
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)
Reprise sur erreur
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 »
Reprise sur erreur: Skip




– Si FlatFileException, Spring Batch skip l’item
– Skip de 10 items max
– Au-delà la step « failed »
– Include/Exclude possible
Reprise sur erreur: Skip
• Personnaliser la gestion du « skip »
• Par défaut: LimitCheckingItemSkipPolicy
Reprise sur erreur: Skip
• Configuration de la gestion du « skip »
Reprise sur erreur: Skip
• Un listener permet de traiter les items
  écartés



• Les annotations existent aussi
   – @OnSkipInRead
   – @OnSkipInWrite
   – @OnSkipInProcess
Reprise sur erreur: Retry
Reprise sur erreur: Retry




http://www.libertaland.com/2011/04/une-femme-de-75-ans-coupe-tout-linternet-en-armenie/
Reprise sur erreur: Retry
• Permet de relancer une opération si
  indispo temporaire
• Personnaliser les cas de « retry »
• Ecouter les cas de « retry »
Reprise sur erreur: Retry




– Si DLDAE, Spring Batch recommence
– Retry 3 fois max
– Au-delà la step « failed »
– Include/Exclude possible
Reprise sur erreur: Retry
• Personnaliser le « retry »: RetryPolicy
  – SimpleRetryPolicy (défaut)


• Stratégie entre 2 « retry »: BackoffPolicy
  – NoBackOffPolicy (défaut)
  – ExponentialBackOffPolicy vraiment utile
Reprise sur erreur: Retry
• Configuration de la gestion du « retry »
Reprise sur erreur: Retry
• Un listener permet de traiter les « retry »
Reprise sur erreur: Retry
• Pour les tasklets
  – RetryTemplate
  – RetryOperationsInterceptor avec de l’AOP
Reprise sur erreur: Restart
Reprise sur erreur:
              Restart
• Même avec skip/retry, un batch peut
  planter
• Il reste encore une solution 
• Nous pouvons redémarrer le batch
Reprise sur erreur:
               Restart
• Indique si le job est « restartable »



• Indique le nombre max de « restart »
Reprise sur erreur:
              Restart
• La step est démarrée lors du restart même
  si elle a été terminée correctement
Reprise sur erreur:
              Restart
• Comment reprendre en plein milieu d’un
  chunk ?
• Comment Spring Batch sait il où reprend ?
Reprise sur erreur:
             Restart
• Spring batch stocke des méta data
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 »
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.
Reprise sur erreur:
             Restart
• ItemStream
Reprise sur erreur: Restart
• Exemple de Reader « restartable »
Reprise sur erreur
            Conclusion
• Nous avons appris comment:
  – Ecarter des items défectueux (skip)
  – Recommencer une 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 steps
Gestion du flow
Gestion du flow
Le « batch bisounours »


                      Step A




                      Step B
Gestion du flow
Exemple
Gestion du flow
Exemple
Gestion du flow
• Le « batch complexe»
                         Step


          Step                  Step



          Step           Step   Step




          Step           Step   Step
Gestion du flow
• Comment…
 – faire des flows non linéaires
 – piloter l’enchaînement des steps
 – passer des données entre steps
Gestion du flow
• Exemple plus simple ;)
                              StepA

                     FAILED
         StepAlert


                                  *
                              StepB
Gestion du flow
Gestion du flow
• Batch Status
  – Etat du job / step en cours d’exécution
• Exit Status
  – Etat du job ou step après son exécution
  – C’est lui qui détermine le flow
• Exemple
  – COMPLETED, STARTING, STARTED,
    STOPPING, STOPPED, FAILED,ABANDONED
    or UNKNOWN
  – C?T (CAT mais pas COUNT), C*T (CAT et COUNT)
Gestion du flow
• Créer et utiliser ses propres « exit status »
  – StepExecutionListener
  – JobDecider
Gestion du flow
• Utiliser ses propres « exit status »
                                 StepA

          COMPLETED WITH SKIPS
     StepC


                                     *
                                 StepB
Gestion du flow
• « exit status » + StepExecutionListener
Gestion du flow
• Configuration
Gestion du flow
• « exit status » + JobExecutionDecider
Gestion du flow
• Configuration
Gestion du flow
• « StepExecutionListener » ou
  « JobExecutionDecider » ?

• JobExecutionDecider pour réutiliser plus
  facilement la logique de branchement
Gestion du flow
• Encore plus de contrôle: end, fail
Gestion du flow
• Partager des informations entre les steps
  – À la Spring:bean classic
  – A la Spring Batch: « Execution context »
     •   1 pour le Job et 1 par Step
     •   C’est une Map sauvegardé dans les meta data
     •   Attention au volume
     •   Late bindings
          – #{jobExecutionContext[‘myKey']}
Gestion du flow
• Accès à ExecutionContext
Gestion du flow
• Configuration
Gestion du flow
                         Step A
• Mutualiser les flows

                         Step B   Mon
                                  Flow


                         Step C




                         Step D
Gestion du flow
• Configuration
Gestion du flow
• Réutiliser un Job
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 jobs
Scaling




http://www.flickr.com/photos/claudiasofia99/2878579560/
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)
Spring Batch in Action




http://www.manning.com/templier
Liens
• Spring User Group Paris
   – http://groups.google.fr/group/sugfr
• Le code de la présentation
   – https://github.com/obazoud/spring-batch-sug
• 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/
Questions ?
Quizz
Quizz 1

Ce que n'est pas Spring Batch ?

1. un framework orienté batchs
2. un scheduler
3. un framework open source
Quizz 2

Qui est le principal leader du
 projet Spring Batch ?
1. Antonio Goncalves
2. Obi-wan Kenobi
3. Dave Syer
Quizz 3

Comment s'appelle le format
 standard de description de
 recette de bière ?
1. BeerXML
2. ISO-1664
3. ChtixML
Quizz 4

Qui vous offre un exemplaire de
 « Spring Batch in Action »?
1. Sais pas, je viens de me réveiller
2. Ekino
3. Chubaka
Quizz 5

Comment s'appelle la console
 d’admin de Spring Batch ?
1. Coldfusion Web Console
2. Spring Batch Admin
3. PlayScala
Quizz 6

Qui vous offre le buffet de cette
 session ?
1. Sais pas, je viens de me réveiller
   (mais c’est vrai qu’il fait faim!)
2. Linus Torvald
3. Ekino
ROTI




http://www.flickr.com/photos/34943981@N00/202923614/
Session « Spring Batch »
• Ekino
  – http://www.ekino.com / @3k1n0
  – Olivier Bazoud @obazoud


• Octo Technology
  – http://www.octo.com / @ OCTOTechnology
  – Julien Jakubowski @jak78
Chtijug springbatch 2011
Spring Batch et Hibernate
Spring Batch et
             Hibernate
• Raison d’utiliser Hibernate avec Spring
  Batch: code existant  rapidité de
  développement

• Ca ne se fait pas sans dangers…
Spring Batch et
              Hibernate
• Overhead de Hibernate sur JDBC

• Hibernate est stateful (par défaut)
  – 1M d’items lus = 1M maintenus en RAM 
    OutOfMemoryError
Spring Batch et
              Hibernate
Correctifs possibles pour pb stateful:

• Ne pas faire d’Hibernate ;-)

• Utiliser HibernateCustomItemReader
  – Session stateless
• Ajuster le commit interval
Spring Batch et
              Hibernate
• OK je suis un bon élève, j’utilise
  HibernateCursorItemReader

• Maintenant, je fonce…

• Mais attention au select N+1
Spring Batch et Hibernate
• Pattern: « Driving Query Based
  ItemReaders »
• Certaines bases de données (ex: DB2)
  – Pessimitic looking
  – Ouverture de curseurs sur des données
    importantes
• Bonne pratique avec Hibernate
• Prévient les LazyException
Spring Batch et Hibernate
• Principe
  – Le reader lit les ids via SQL
     • Select id from XXX where …
  – Le premier ItemProcessor transforme l’id en
    objet via Hibernate par exemple
  – Les autres processors font les traitements
    métiers
  –…
Chtijug springbatch 2011
Spring Batch Admin
• Console Web pour Spring Batch
  – « Standalone » ou « Embedded »
  – API Rest
  – Uploader une nouvelle configuration
  – Uploader un fichier à traiter
• « Customisable »
  – Base de données, Branding, UI, ..
• Monitorer les batchs
Spring Batch Admin




                • API REST
Spring Batch Admin
$ curl –s http://localhost:8080/spring-batch-admin-sample/jobs.json
 {
     "jobs": {
       "resource": "http://localhost:8080/spring-batch-admin-sample/jobs.json",
       "registrations": {
         "infinite": {
           "name": "infinite",
           "resource": "http://localhost:8080/spring-batch-admin-sample/jobs/infinite.json",
           "description": "No description",
           "executionCount": 0,
           "launchable": true,
           "incrementable": false
         },
         "job1": {
           "name": "job1",
           "resource": "http://localhost:8080/spring-batch-admin-sample/jobs/job1.json",
           "description": "No description",
           "executionCount": 0,
           "launchable": true,
           "incrementable": true
         …
Spring Batch Admin
• Les jobs
Spring Batch Admin
• Lancement / Historique d’un job
Spring Batch Admin
• Lancer un job
Spring Batch Admin
• Détail d’un job execution
Spring Batch Admin
     • Détail d’éxécution
Spring Batch Admin /
               Monitoring
• JMX / MBean
  – BatchMBeanExporter
     • Exporter un jobService
     • Voir les métriques des « Job/Steps Executions »
  – SLA StepExecutionServiceLevelMonitor
     • Permet de recevoir des notifications JMX si une
       Step met trop de temps
• Utilisable aussi en Standalone
Spring Batch Admin /
     Monitoring
Spring Batch Admin /
     Monitoring
Chtijug springbatch 2011
Scaling




http://www.flickr.com/photos/claudiasofia99/2878579560/
Scaling
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)
Scaling
• Multi-threaded Step
  – Une Step est multi threaded
• Parallel Steps
  – Les Steps sont exécutées en parallèle
• Remote Chunking of Step
  – Distribution des chunks
• Partitioning a Step
  – Partage les données à travers les noeuds
Scaling: Multi-threaded Step
– Multi thread au niveau « Step »
– Utilise un ThreadPoolTaskExecutor
– Chaque thread construit un chunk
– Les readers/writers sont thread-safe ?
  • La plus part non, ils sont stateful
– « Process Indicator Pattern »
  • Lire les items ‘processed’ = false
  • Un ItemProcessor met ‘processed = true’
Scaling: Multi-threaded Step
Scaling: Step en parallèle
• Executer plusieurs Step en parallèle
• Mot clé « split » dans la configuration
• Possibilité utiliser un
  ThreadPoolTaskExecutor
Scaling: Step en parallèle
Scaling: Remote Chunking
• Répartition de la charge vers des slaves
• Principe
  – Lecture sur le Master
  – Processor et Writer sur les slaves
• Spring Batch propose que des interfaces
• Spring Integration propose une
  implementation
• La communication master/slave se fait à
  travers un MOM
Scaling: Remote Chunking
                          Master
                           Chunk
                          Processor

                           Reader

                            Chunk
                           Provider




      Slave 1              Slave 2               Slave N
 Chunk      Writer    Chunk       Writer    Chunk      Writer
Processor            Processor             Processor
Scaling: Remote
               Chunking
• Démo ?!
Scaling: Partitioning
• Répartir les données suivant une clé de
  partition
  – « Partitionner »
• Traiter les données
  – « PartitionHandler »
• Et vous pouvez combiner les techniques
  précédentes
Scaling: Partitioning

Contenu connexe

Tendances (19)

PPTX
Plongée au cœur du Framework .NET 4.5
Microsoft
 
PDF
Industrialisation des environnements de dev avec Puppet et Amazon (mais en fa...
Nicolas Silberman
 
PDF
Spring 3 en production
Julien Dubois
 
PDF
Perf ug comment ne plus rajouter de ram a vos jvm sans savoir pourquoi
pkernevez
 
PDF
La migration continue vers Symfony
Francois Zaninotto
 
PDF
Hibernate vs le Cloud computing
Julien Dubois
 
PDF
Un site web rapide ?
haricot
 
PDF
Perfug Guide de survie du développeur dans une application Java qui rame
bleporini
 
PDF
Systèmes d'Exploitation - chp1-introduction
Lilia Sfaxi
 
PPTX
Programmation réactive avec Spring 5 et Reactor
Florian Beaufumé
 
PPTX
Realtime Web avec Kafka, Spark et Mesos
ebiznext
 
PDF
Systèmes d'Exploitation - chp2-gestion des processus
Lilia Sfaxi
 
PPT
Conférence AFUP 20minutes.Fr
Oxalide
 
PDF
Systèmes d'Exploitation - chp3-gestion mémoire
Lilia Sfaxi
 
PDF
Capacity Planning : Pratiques et outils pour regarder la foudre tomber sans p...
Normandy JUG
 
KEY
Paris RailsCamp 2009
Olivier Gutknecht
 
PPTX
Presentation des outils traitements distribues
Lê Anh
 
PPTX
WebSocket avec Java EE 7
Florian Beaufumé
 
ODP
Puppet slides
Pierre Mavro
 
Plongée au cœur du Framework .NET 4.5
Microsoft
 
Industrialisation des environnements de dev avec Puppet et Amazon (mais en fa...
Nicolas Silberman
 
Spring 3 en production
Julien Dubois
 
Perf ug comment ne plus rajouter de ram a vos jvm sans savoir pourquoi
pkernevez
 
La migration continue vers Symfony
Francois Zaninotto
 
Hibernate vs le Cloud computing
Julien Dubois
 
Un site web rapide ?
haricot
 
Perfug Guide de survie du développeur dans une application Java qui rame
bleporini
 
Systèmes d'Exploitation - chp1-introduction
Lilia Sfaxi
 
Programmation réactive avec Spring 5 et Reactor
Florian Beaufumé
 
Realtime Web avec Kafka, Spark et Mesos
ebiznext
 
Systèmes d'Exploitation - chp2-gestion des processus
Lilia Sfaxi
 
Conférence AFUP 20minutes.Fr
Oxalide
 
Systèmes d'Exploitation - chp3-gestion mémoire
Lilia Sfaxi
 
Capacity Planning : Pratiques et outils pour regarder la foudre tomber sans p...
Normandy JUG
 
Paris RailsCamp 2009
Olivier Gutknecht
 
Presentation des outils traitements distribues
Lê Anh
 
WebSocket avec Java EE 7
Florian Beaufumé
 
Puppet slides
Pierre Mavro
 

Similaire à Chtijug springbatch 2011 (20)

PDF
Sug spring batch
Julien Jakubowski
 
PDF
Spring Batch - Julien Jakubowski - November 2010
JUG Lausanne
 
PPTX
Paris JUG Spring Batch
Olivier BAZOUD
 
PPTX
Spring & SpringBatch FR
Marouan MOHAMED
 
PPTX
Workshop Spring - Session 4 - Spring Batch
Antoine Rey
 
PDF
Spring Batch
victor_gallet
 
PDF
présentation migration automatisee Pacbase -> UML + Java
Didier Durand
 
PDF
What’s Next Replay! Lyon 2011 - G. Darmont
Zenika
 
PDF
Synchroniser ses applications (plus) simplement
gplanchat
 
PPT
Symphonie pour PHP industrialisé en agilité majeure
Jonathan Bonzy
 
PPT
Symphonie pour PHP industrialisé en agilité majeure
Marc Nazarian
 
PDF
Solutions Linux Développement Rapide Java
Laurent Guérin
 
PPTX
Introduction au Spring microservices Batch.pptx
YounessABOUQORA
 
PPTX
Introduction au Spring Batch pour microservices.pptx
YounessABOUQORA
 
PPTX
Introduction au Spring Batch pour microservices.pptx
YounessABOUQORA
 
PPTX
Introduction au Spring Batch pour microservices.pptx
YounessABOUQORA
 
PPTX
Run java vs ruby
pinguin666
 
PDF
What's Next Replay - IC / Jenkins
ZenikaOuest
 
PPT
Agl2012
eric German
 
PDF
Chaine de production pipeline
Nicolas wallerand
 
Sug spring batch
Julien Jakubowski
 
Spring Batch - Julien Jakubowski - November 2010
JUG Lausanne
 
Paris JUG Spring Batch
Olivier BAZOUD
 
Spring & SpringBatch FR
Marouan MOHAMED
 
Workshop Spring - Session 4 - Spring Batch
Antoine Rey
 
Spring Batch
victor_gallet
 
présentation migration automatisee Pacbase -> UML + Java
Didier Durand
 
What’s Next Replay! Lyon 2011 - G. Darmont
Zenika
 
Synchroniser ses applications (plus) simplement
gplanchat
 
Symphonie pour PHP industrialisé en agilité majeure
Jonathan Bonzy
 
Symphonie pour PHP industrialisé en agilité majeure
Marc Nazarian
 
Solutions Linux Développement Rapide Java
Laurent Guérin
 
Introduction au Spring microservices Batch.pptx
YounessABOUQORA
 
Introduction au Spring Batch pour microservices.pptx
YounessABOUQORA
 
Introduction au Spring Batch pour microservices.pptx
YounessABOUQORA
 
Introduction au Spring Batch pour microservices.pptx
YounessABOUQORA
 
Run java vs ruby
pinguin666
 
What's Next Replay - IC / Jenkins
ZenikaOuest
 
Agl2012
eric German
 
Chaine de production pipeline
Nicolas wallerand
 
Publicité

Dernier (11)

PDF
Google Remote Procedure Call Web Service
SOUFIANE MOUHTARAM
 
PDF
Katalog VRF Clivet vrf technology(1).pdf
MehfoozAli19
 
PPTX
Soutanece Stage Pfe Développement Web et Multimédia
YassineMyara
 
PDF
Généralités sur balisage (Tagging) en git
SOUFIANE MOUHTARAM
 
PDF
Rapport de Stage Fin D’étude - Développement Web et Multimédia
YassineMyara
 
PDF
CHAPITRE 5_Déplacement des données DBA.pdf
houcemswissi1
 
PDF
Communication entre les conteneurs docker dans diff réseaux
SOUFIANE MOUHTARAM
 
PDF
Présentation UCOPIA et ses fonctionnalités
ZakariaRAHOUI2
 
PDF
linkyfi presentation et ses fonctionnalité
ZakariaRAHOUI2
 
PDF
CHAPITRE1_Architecture du Serveur Oracle.pdf
houcemswissi1
 
PDF
Circuit Breaker pattern avec Resilience4j
SOUFIANE MOUHTARAM
 
Google Remote Procedure Call Web Service
SOUFIANE MOUHTARAM
 
Katalog VRF Clivet vrf technology(1).pdf
MehfoozAli19
 
Soutanece Stage Pfe Développement Web et Multimédia
YassineMyara
 
Généralités sur balisage (Tagging) en git
SOUFIANE MOUHTARAM
 
Rapport de Stage Fin D’étude - Développement Web et Multimédia
YassineMyara
 
CHAPITRE 5_Déplacement des données DBA.pdf
houcemswissi1
 
Communication entre les conteneurs docker dans diff réseaux
SOUFIANE MOUHTARAM
 
Présentation UCOPIA et ses fonctionnalités
ZakariaRAHOUI2
 
linkyfi presentation et ses fonctionnalité
ZakariaRAHOUI2
 
CHAPITRE1_Architecture du Serveur Oracle.pdf
houcemswissi1
 
Circuit Breaker pattern avec Resilience4j
SOUFIANE MOUHTARAM
 
Publicité

Chtijug springbatch 2011

  • 1. Ch’ti JUG Spring Batch Mardi 29 Novembre 2011 Olivier Bazoud Julien Jakubowski
  • 2. Le mot du sponsor de cette session
  • 3. Ekino / @3k1n0 • Conception, développement et maintenance de dispositifs digitaux • 150 personnes – 50% de développeurs, 0% de régie • Digital – Mobile + HTML + RIA – JAVA + PHP + .NET • 6 pôles de compétences, 25 clients, 50 projets/an = 1 équipe
  • 5. Duchess France - Présentation Ce qu'est le JDuchess ... Et ce qu'il n'est pas !
  • 6. Duchess France - L'équipe @Audrey_Neveu @karesti @agnes_crepet @cfalguiere @Zazoun @dijouxellenne @MathildeLemee
  • 7. Duchess France - Objectifs Avoir une visibilité des femmes dans l'IT ... … Et les inciter à participer aux conférences
  • 8. Duchess France - Les Actions
  • 9. Duchess France - En chiffre 70 membres 60 membres + de 700 followers
  • 10. Duchess France - Nous suivre http://jduchess.org/duchess-france/ duchessfr @duchessfr
  • 11. Merci de votre attention !
  • 13. Ch’ti JUG Spring Batch Mardi 29 Novembre 2011 Olivier Bazoud Julien Jakubowski
  • 14. Intervenants Olivier Bazoud @obazoud, Ekino @3k1n0 ISEN (Toulon) Architecte technique Java EE / Spring, Spring Batch, NoSQL, Node.js Co-auteur de « Spring Batch in Action » Spring User Group France Julien Jakubowski, @jak78, OCTO Technology ISEN (le vrai, de Lille) Architecte technique Spécialisé Java EE / Spring Ch'ti JUG, Agile Tour Lille
  • 15. De quoi va-t-on parler ce soir ? • On va parler de batchs en Java • … et aussi de bière http://www.flickr.com/photos/fromeyetopixel/2559391584/
  • 16. 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 » demain
  • 17. 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 d'expérience • Forces et faiblesses • Notions avancées - vote • Questions / Réponses
  • 18. Batch : de quoi parle-t-on ? Batch processing = répétition de traitements sur un ensemble de données…
  • 19. Batch : de quoi parle-t-on ? … potentiellement grands volumes… http://www.flickr.com/photos/claudiasofia99/2878579560/
  • 20. Batch : de quoi parle-t-on ? … sans intervention d’un utilisateur humain – pas d’interface homme-machine
  • 21. 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 • …
  • 22. Batch : de quoi parle-t-on ? Un batch n’est pas un scheduler • Cron, inotify, Quartz, $U… • Mais un scheduler peut le lancer
  • 23. 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 rejets
  • 28. Quand j’accède à une base de données…
  • 29. Et quand j’écris un batch ? Je suis… à poil ? http://www.flickr.com/photos/crystaljingsr/3914729343/sizes/o/in/set-72157622354789320/
  • 30. Et quand j’écris un batch ? Spring Batch offre pourtant une solution pour vous guider lors de l’écriture de vos batchs en Java
  • 31. Spring Batch propose… • Un cadre • Un vocabulaire (domain language) • Traitement par lots (grands volumes de données) • Gestion des transactions • Flow, reprise sur erreur • Spring dans ses batchs Parallélisme Spring Batch Admin Partitionnement
  • 33. 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ées Spring Batch
  • 34. Schéma du batch InitialStep InitialTasklet RecipeStep Chunk oriented tasklet ItemReader ItemProcessor ItemWriter
  • 35. Tasklet InitialStep InitialTasklet RecipeStep Chunk oriented tasklet ItemReader ItemProcessor ItemWriter
  • 36. 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 service
  • 38. ItemReader InitialStep InitialTasklet RecipeStep Chunk oriented tasklet ItemReader ItemProcessor ItemWriter
  • 39. ItemReader • Besoin – Lire le XML de recettes • ItemReader – Fournit des items en entrée <xml> SELECT ... FROM ... 123;AB; 456;CD;
  • 41. ItemProcessor InitialStep InitialTasklet RecipeStep Chunk oriented tasklet ItemReader ItemProcessor ItemWriter
  • 42. 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 »
  • 45. ItemWriter InitialStep InitialTasklet RecipeStep Chunk oriented tasklet ItemReader ItemProcessor ItemWriter
  • 46. ItemWriter • Besoin – Décharge les bières dans une base SQL • ItemWriter – Ecrit les items <xml> INSERT... INTO ... 123;AB; 456;CD;
  • 48. Chunk InitialStep InitialTasklet RecipeStep Chunk oriented tasklet ItemReader ItemProcessor ItemWriter
  • 49. 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/Rollback
  • 50. Chunk
  • 53. Listener InitialStep InitialTasklet RecipeStep Chunk oriented tasklet ItemReader ItemProcessor ItemWriter
  • 54. Listener • Besoin – Création d’un fichier de rejet • Listener – Etre à l’écoute des évènements du batch
  • 58. Step InitialStep InitialTasklet RecipeStep Chunk oriented tasklet ItemReader ItemProcessor ItemWriter
  • 59. Step • Besoin – Etape dans le processus du batch – Contrôle le workflow
  • 60. Job InitialStep InitialTasklet RecipeStep Chunk oriented tasklet ItemReader ItemProcessor ItemWriter
  • 61. Job • Besoin – Décrire les étapes du batch – Composé d’un ou plusieurs steps Spring Tools Suite
  • 63. Lancer un job directement
  • 64. Lancer un job via un scheduler On utilise ici Spring Scheduler. Il est indépendant de Spring Batch
  • 65. Lancer un job via un scheduler
  • 66. Tests • Tests unitaires facilités via le découpage Spring Batch – writers, processors etc... • Tests d'intégration facilités par Spring – @RunWith – Step, Job
  • 69. Forces et faiblesses ✔Fiabilité et bons patterns ✔Tests unitaires et d'intégration, TDD ✔Batchs complexes mieux maintenables ✔Bénéficie de fonctions avancées à moindre coût ✔...the Spring way, intégration à Spring ✔Productivité, à terme... ✗… après avoir payé le ticket d'entrée
  • 70. Retour d’expérience Ekino • Framework de batch – Moins de code produit, moins d'erreurs possibles – Plus de tests unitaires + intégrations • Mise en place par l'exemple – J'ai 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étier
  • 71. Retour d’expérience Ekino • Nos batchs « Spring Batch » sont en SQL plutôt qu'en Hibernate • Spring Batch s'occupe 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 à 1mn30s
  • 72. Des questions, avant la suite ? http://www.flickr.com/photos/crystaljingsr/3914729343/in/set-72157622354789320/
  • 74. Recipe Maître détail Hop Hop Hop R;Burton Ale;All Grain;Brad Smith H;Goldings, East Kent;United Kingdom H;Northern Brewer;Germany H;Fuggles;United Kingdom END R;Dry Stout;All Grain;Brad Smith H;Fuggles;United Kingdom END
  • 75. Un batch plus robuste reprise sur erreurs
  • 76. Flow Step A Step B
  • 78. Spring Batch et Hibernate
  • 80. Allons plus loin… Au choix! • Un cas un peu plus complexe – maître détail • La reprise sur erreurs • Un batch qui n’a pas un flow de bisounours… • Scaling et parallélisme • Spring Batch et Hibernate • Spring Batch Admin
  • 81. Maître détail R;Burton Ale;All Grain;Brad Smith H;Goldings, East Kent;United Kingdom H;Northern Brewer;Germany H;Fuggles;United Kingdom END R;Dry Stout;All Grain;Brad Smith H;Fuggles;United Kingdom END
  • 82. Maître détail RecipeStep Chunk oriented tasklet ItemReader ItemProcessor ItemWriter
  • 85. R;Burton Ale;All Grain;Brad Smith H;Goldings, East Kent;United Kingdom H;Northern Brewer;Germany H;Fuggles;United Kingdom END R;Dry Stout;All Grain;Brad Smith H;Fuggles;United Kingdom END
  • 86. Maître détail Déclaration du reader délégué
  • 87. 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édemment
  • 88. Un batch plus robuste
  • 89. 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 relancer
  • 90. 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)
  • 92. 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 »
  • 93. Reprise sur erreur: Skip – Si FlatFileException, Spring Batch skip l’item – Skip de 10 items max – Au-delà la step « failed » – Include/Exclude possible
  • 94. Reprise sur erreur: Skip • Personnaliser la gestion du « skip » • Par défaut: LimitCheckingItemSkipPolicy
  • 95. Reprise sur erreur: Skip • Configuration de la gestion du « skip »
  • 96. Reprise sur erreur: Skip • Un listener permet de traiter les items écartés • Les annotations existent aussi – @OnSkipInRead – @OnSkipInWrite – @OnSkipInProcess
  • 98. Reprise sur erreur: Retry http://www.libertaland.com/2011/04/une-femme-de-75-ans-coupe-tout-linternet-en-armenie/
  • 99. Reprise sur erreur: Retry • Permet de relancer une opération si indispo temporaire • Personnaliser les cas de « retry » • Ecouter les cas de « retry »
  • 100. Reprise sur erreur: Retry – Si DLDAE, Spring Batch recommence – Retry 3 fois max – Au-delà la step « failed » – Include/Exclude possible
  • 101. Reprise sur erreur: Retry • Personnaliser le « retry »: RetryPolicy – SimpleRetryPolicy (défaut) • Stratégie entre 2 « retry »: BackoffPolicy – NoBackOffPolicy (défaut) – ExponentialBackOffPolicy vraiment utile
  • 102. Reprise sur erreur: Retry • Configuration de la gestion du « retry »
  • 103. Reprise sur erreur: Retry • Un listener permet de traiter les « retry »
  • 104. Reprise sur erreur: Retry • Pour les tasklets – RetryTemplate – RetryOperationsInterceptor avec de l’AOP
  • 106. Reprise sur erreur: Restart • Même avec skip/retry, un batch peut planter • Il reste encore une solution  • Nous pouvons redémarrer le batch
  • 107. Reprise sur erreur: Restart • Indique si le job est « restartable » • Indique le nombre max de « restart »
  • 108. Reprise sur erreur: Restart • La step est démarrée lors du restart même si elle a été terminée correctement
  • 109. Reprise sur erreur: Restart • Comment reprendre en plein milieu d’un chunk ? • Comment Spring Batch sait il où reprend ?
  • 110. Reprise sur erreur: Restart • Spring batch stocke des méta data
  • 111. 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 »
  • 112. 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.
  • 113. Reprise sur erreur: Restart • ItemStream
  • 114. Reprise sur erreur: Restart • Exemple de Reader « restartable »
  • 115. Reprise sur erreur Conclusion • Nous avons appris comment: – Ecarter des items défectueux (skip) – Recommencer une 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 steps
  • 117. Gestion du flow Le « batch bisounours » Step A Step B
  • 120. Gestion du flow • Le « batch complexe» Step Step Step Step Step Step Step Step Step
  • 121. Gestion du flow • Comment… – faire des flows non linéaires – piloter l’enchaînement des steps – passer des données entre steps
  • 122. Gestion du flow • Exemple plus simple ;) StepA FAILED StepAlert * StepB
  • 124. Gestion du flow • Batch Status – Etat du job / step en cours d’exécution • Exit Status – Etat du job ou step après son exécution – C’est lui qui détermine le flow • Exemple – COMPLETED, STARTING, STARTED, STOPPING, STOPPED, FAILED,ABANDONED or UNKNOWN – C?T (CAT mais pas COUNT), C*T (CAT et COUNT)
  • 125. Gestion du flow • Créer et utiliser ses propres « exit status » – StepExecutionListener – JobDecider
  • 126. Gestion du flow • Utiliser ses propres « exit status » StepA COMPLETED WITH SKIPS StepC * StepB
  • 127. Gestion du flow • « exit status » + StepExecutionListener
  • 128. Gestion du flow • Configuration
  • 129. Gestion du flow • « exit status » + JobExecutionDecider
  • 130. Gestion du flow • Configuration
  • 131. Gestion du flow • « StepExecutionListener » ou « JobExecutionDecider » ? • JobExecutionDecider pour réutiliser plus facilement la logique de branchement
  • 132. Gestion du flow • Encore plus de contrôle: end, fail
  • 133. Gestion du flow • Partager des informations entre les steps – À la Spring:bean classic – A la Spring Batch: « Execution context » • 1 pour le Job et 1 par Step • C’est une Map sauvegardé dans les meta data • Attention au volume • Late bindings – #{jobExecutionContext[‘myKey']}
  • 134. Gestion du flow • Accès à ExecutionContext
  • 135. Gestion du flow • Configuration
  • 136. Gestion du flow Step A • Mutualiser les flows Step B Mon Flow Step C Step D
  • 137. Gestion du flow • Configuration
  • 138. Gestion du flow • Réutiliser un Job
  • 139. 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 jobs
  • 141. 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)
  • 142. Spring Batch in Action http://www.manning.com/templier
  • 143. Liens • Spring User Group Paris – http://groups.google.fr/group/sugfr • Le code de la présentation – https://github.com/obazoud/spring-batch-sug • 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/
  • 145. Quizz
  • 146. Quizz 1 Ce que n'est pas Spring Batch ? 1. un framework orienté batchs 2. un scheduler 3. un framework open source
  • 147. Quizz 2 Qui est le principal leader du projet Spring Batch ? 1. Antonio Goncalves 2. Obi-wan Kenobi 3. Dave Syer
  • 148. Quizz 3 Comment s'appelle le format standard de description de recette de bière ? 1. BeerXML 2. ISO-1664 3. ChtixML
  • 149. Quizz 4 Qui vous offre un exemplaire de « Spring Batch in Action »? 1. Sais pas, je viens de me réveiller 2. Ekino 3. Chubaka
  • 150. Quizz 5 Comment s'appelle la console d’admin de Spring Batch ? 1. Coldfusion Web Console 2. Spring Batch Admin 3. PlayScala
  • 151. Quizz 6 Qui vous offre le buffet de cette session ? 1. Sais pas, je viens de me réveiller (mais c’est vrai qu’il fait faim!) 2. Linus Torvald 3. Ekino
  • 153. Session « Spring Batch » • Ekino – http://www.ekino.com / @3k1n0 – Olivier Bazoud @obazoud • Octo Technology – http://www.octo.com / @ OCTOTechnology – Julien Jakubowski @jak78
  • 155. Spring Batch et Hibernate
  • 156. Spring Batch et Hibernate • Raison d’utiliser Hibernate avec Spring Batch: code existant  rapidité de développement • Ca ne se fait pas sans dangers…
  • 157. Spring Batch et Hibernate • Overhead de Hibernate sur JDBC • Hibernate est stateful (par défaut) – 1M d’items lus = 1M maintenus en RAM  OutOfMemoryError
  • 158. Spring Batch et Hibernate Correctifs possibles pour pb stateful: • Ne pas faire d’Hibernate ;-) • Utiliser HibernateCustomItemReader – Session stateless • Ajuster le commit interval
  • 159. Spring Batch et Hibernate • OK je suis un bon élève, j’utilise HibernateCursorItemReader • Maintenant, je fonce… • Mais attention au select N+1
  • 160. Spring Batch et Hibernate • Pattern: « Driving Query Based ItemReaders » • Certaines bases de données (ex: DB2) – Pessimitic looking – Ouverture de curseurs sur des données importantes • Bonne pratique avec Hibernate • Prévient les LazyException
  • 161. Spring Batch et Hibernate • Principe – Le reader lit les ids via SQL • Select id from XXX where … – Le premier ItemProcessor transforme l’id en objet via Hibernate par exemple – Les autres processors font les traitements métiers –…
  • 163. Spring Batch Admin • Console Web pour Spring Batch – « Standalone » ou « Embedded » – API Rest – Uploader une nouvelle configuration – Uploader un fichier à traiter • « Customisable » – Base de données, Branding, UI, .. • Monitorer les batchs
  • 164. Spring Batch Admin • API REST
  • 165. Spring Batch Admin $ curl –s http://localhost:8080/spring-batch-admin-sample/jobs.json { "jobs": { "resource": "http://localhost:8080/spring-batch-admin-sample/jobs.json", "registrations": { "infinite": { "name": "infinite", "resource": "http://localhost:8080/spring-batch-admin-sample/jobs/infinite.json", "description": "No description", "executionCount": 0, "launchable": true, "incrementable": false }, "job1": { "name": "job1", "resource": "http://localhost:8080/spring-batch-admin-sample/jobs/job1.json", "description": "No description", "executionCount": 0, "launchable": true, "incrementable": true …
  • 167. Spring Batch Admin • Lancement / Historique d’un job
  • 168. Spring Batch Admin • Lancer un job
  • 169. Spring Batch Admin • Détail d’un job execution
  • 170. Spring Batch Admin • Détail d’éxécution
  • 171. Spring Batch Admin / Monitoring • JMX / MBean – BatchMBeanExporter • Exporter un jobService • Voir les métriques des « Job/Steps Executions » – SLA StepExecutionServiceLevelMonitor • Permet de recevoir des notifications JMX si une Step met trop de temps • Utilisable aussi en Standalone
  • 172. Spring Batch Admin / Monitoring
  • 173. Spring Batch Admin / Monitoring
  • 177. 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)
  • 178. Scaling • Multi-threaded Step – Une Step est multi threaded • Parallel Steps – Les Steps sont exécutées en parallèle • Remote Chunking of Step – Distribution des chunks • Partitioning a Step – Partage les données à travers les noeuds
  • 179. Scaling: Multi-threaded Step – Multi thread au niveau « Step » – Utilise un ThreadPoolTaskExecutor – Chaque thread construit un chunk – Les readers/writers sont thread-safe ? • La plus part non, ils sont stateful – « Process Indicator Pattern » • Lire les items ‘processed’ = false • Un ItemProcessor met ‘processed = true’
  • 181. Scaling: Step en parallèle • Executer plusieurs Step en parallèle • Mot clé « split » dans la configuration • Possibilité utiliser un ThreadPoolTaskExecutor
  • 182. Scaling: Step en parallèle
  • 183. Scaling: Remote Chunking • Répartition de la charge vers des slaves • Principe – Lecture sur le Master – Processor et Writer sur les slaves • Spring Batch propose que des interfaces • Spring Integration propose une implementation • La communication master/slave se fait à travers un MOM
  • 184. Scaling: Remote Chunking Master Chunk Processor Reader Chunk Provider Slave 1 Slave 2 Slave N Chunk Writer Chunk Writer Chunk Writer Processor Processor Processor
  • 185. Scaling: Remote Chunking • Démo ?!
  • 186. Scaling: Partitioning • Répartir les données suivant une clé de partition – « Partitionner » • Traiter les données – « PartitionHandler » • Et vous pouvez combiner les techniques précédentes