Chtijug springbatch 2011

187
Spring Batch Mardi 29 Novembre 2011 Ch’ti JUG Olivier Bazoud Julien Jakubowski

description

http://chtijug.org/session-spring-batch-avec-ekino-le-29-novembre/ Nous avons le plaisir de vous annoncer que la prochaine session du Ch’ti JUG est prévue le 29 novembre 2011. Elle aura lieu à l’IUT A de Lille 1, boulevard Paul Langevin, à Villeneuve d’Ascq. Plan d’accès Le thème de cette session est Spring Batch : un framework pour implémenter des traitements de masse en Java. Cette présentation sera animée par Olivier Bazoud / @obazoud et Julien Jakubowski / @jak78. Cette session est rendue possible grâce à Ekino / @3k1no.

Transcript of Chtijug springbatch 2011

Page 1: Chtijug springbatch 2011

Spring BatchMardi 29 Novembre 2011

Ch’ti JUG

Olivier Bazoud

Julien Jakubowski

Page 2: Chtijug springbatch 2011

Le mot du sponsorde cette session

Page 3: Chtijug springbatch 2011

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

Page 4: Chtijug springbatch 2011

Duchess France

Page 5: Chtijug springbatch 2011

Duchess France - Présentation 

Ce qu'est le JDuchess ...

Et ce qu'il n'est pas !

Page 6: Chtijug springbatch 2011

Duchess France - L'équipe

@MathildeLemee

@agnes_crepet

@dijouxellenne

@karesti

@Zazoun

@cfalguiere

@Audrey_Neveu

Page 7: Chtijug springbatch 2011

Duchess France - Objectifs

… Et les inciter à participer aux conférences

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

Page 8: Chtijug springbatch 2011

Duchess France - Les Actions

Page 9: Chtijug springbatch 2011

Duchess France - En chiffre

70 membres

60 membres

+ de 700 followers

Page 10: Chtijug springbatch 2011

Duchess France - Nous suivre

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

duchessfr

@duchessfr

Page 11: Chtijug springbatch 2011

Merci de votre attention !

Page 12: Chtijug springbatch 2011

• http://lille.startupweekend.org

Page 13: Chtijug springbatch 2011

Spring BatchMardi 29 Novembre 2011

Ch’ti JUG

Olivier Bazoud

Julien Jakubowski

Page 14: Chtijug springbatch 2011

IntervenantsOlivier 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 TechnologyISEN (le vrai, de Lille)

Architecte technique

Spécialisé Java EE / Spring

Ch'ti JUG, Agile Tour Lille

Page 15: Chtijug springbatch 2011

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/

Page 16: Chtijug springbatch 2011

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

Page 17: Chtijug springbatch 2011

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

Page 18: Chtijug springbatch 2011

Batch : de quoi parle-t-on ?

Batch processing = répétition de traitements sur un ensemble de données…

Page 19: Chtijug springbatch 2011

Batch : de quoi parle-t-on ?

… potentiellement grands volumes…

http://www.flickr.com/photos/claudiasofia99/2878579560/

Page 20: Chtijug springbatch 2011

Batch : de quoi parle-t-on ?

… sans intervention d’un utilisateur humain – pas d’interface homme-machine

Page 21: Chtijug springbatch 2011

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• …

Page 22: Chtijug springbatch 2011

Batch : de quoi parle-t-on ?

Un batch n’est pas un scheduler• Cron, inotify, Quartz, $U…• Mais un scheduler peut le lancer

Page 23: Chtijug springbatch 2011

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

Page 24: Chtijug springbatch 2011

Problèmes récurrents• Fiabilité

Page 25: Chtijug springbatch 2011

Problèmes récurrents• Maintenabilité

Page 26: Chtijug springbatch 2011

Problèmes récurrents• Réinvention de la roue… carrée

Page 27: Chtijug springbatch 2011

Quand j’écris une application web…

Page 28: Chtijug springbatch 2011

Quand j’accède à une base de données…

Page 29: Chtijug springbatch 2011

Et quand j’écris un batch ?

http://www.flickr.com/photos/crystaljingsr/3914729343/sizes/o/in/set-72157622354789320/

Je suis… à poil ?

Page 30: Chtijug springbatch 2011

Et quand j’écris un batch ?

Spring Batch offre pourtant une solution pour vous guider lors de l’écriture de vos batchs en Java

Page 31: Chtijug springbatch 2011

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

PartitionnementSpring Batch Admin

Page 32: Chtijug springbatch 2011

Spring Batch

Notions de base

Page 33: Chtijug springbatch 2011

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

Page 34: Chtijug springbatch 2011

Schéma du batch

RecipeStep

InitialStep

InitialTasklet

Chunk oriented tasklet

ItemReader ItemWriterItemProcessor

Page 35: Chtijug springbatch 2011

Tasklet

RecipeStep

InitialStep

Chunk oriented tasklet

ItemReader ItemProcessor ItemWriter

InitialTasklet

Page 36: Chtijug springbatch 2011

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

Page 37: Chtijug springbatch 2011

Morceaux de code

Page 38: Chtijug springbatch 2011

ItemReader

RecipeStep

InitialStep

InitialTasklet

Chunk oriented tasklet

ItemReader ItemWriterItemProcessorItemReader

Page 39: Chtijug springbatch 2011

ItemReader• Besoin

– Lire le XML de recettes

• ItemReader– Fournit des items en entrée

<xml>

123;AB;456;CD;

SELECT ... FROM ...

Page 40: Chtijug springbatch 2011

Morceaux de code

Page 41: Chtijug springbatch 2011

ItemProcessor

RecipeStep

InitialStep

InitialTasklet

Chunk oriented tasklet

ItemReader ItemWriterItemProcessor

Page 42: Chtijug springbatch 2011

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 »

Page 43: Chtijug springbatch 2011

Morceaux de code

Page 44: Chtijug springbatch 2011

Morceaux de code

Page 45: Chtijug springbatch 2011

ItemWriter

RecipeStep

InitialStep

InitialTasklet

Chunk oriented tasklet

ItemReader ItemProcessor ItemWriter

Page 46: Chtijug springbatch 2011

ItemWriter• Besoin

– Décharge les bières dans une base SQL

• ItemWriter– Ecrit les items

<xml>

123;AB;456;CD;

INSERT... INTO ...

Page 47: Chtijug springbatch 2011

Morceaux de code

Page 48: Chtijug springbatch 2011

Chunk

RecipeStep

InitialStep

InitialTasklet

Chunk oriented tasklet

ItemReader ItemProcessor ItemWriter

Page 49: Chtijug springbatch 2011

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

Page 50: Chtijug springbatch 2011

Chunk

Page 51: Chtijug springbatch 2011

Traitement par lots

Page 52: Chtijug springbatch 2011

Morceaux de code

Page 53: Chtijug springbatch 2011

Listener

RecipeStep

InitialStep

InitialTasklet

Chunk oriented tasklet

ItemReader ItemProcessor ItemWriter

Page 54: Chtijug springbatch 2011

Listener

• Besoin– Création d’un fichier de rejet

• Listener– Etre à l’écoute des évènements du batch

Page 55: Chtijug springbatch 2011

Morceaux de code

Page 56: Chtijug springbatch 2011

Morceaux de code

Page 57: Chtijug springbatch 2011

Morceaux de code

Page 58: Chtijug springbatch 2011

Step

RecipeStep

InitialStep

Chunk oriented tasklet

ItemReader ItemProcessor ItemWriter

InitialTasklet

Page 59: Chtijug springbatch 2011

Step

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

Page 60: Chtijug springbatch 2011

Job

RecipeStep

InitialStep

Chunk oriented tasklet

ItemReader ItemProcessor ItemWriter

InitialTasklet

Page 61: Chtijug springbatch 2011

Job

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

Spring Tools Suite

Page 62: Chtijug springbatch 2011

Morceaux de code

Page 63: Chtijug springbatch 2011

Lancer un job directement

Page 64: Chtijug springbatch 2011

Lancer un jobvia un scheduler

On utilise ici Spring Scheduler.Il est indépendant de Spring Batch

Page 65: Chtijug springbatch 2011

Lancer un jobvia un scheduler

Page 66: Chtijug springbatch 2011

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

Page 67: Chtijug springbatch 2011

Morceaux de code

Page 68: Chtijug springbatch 2011

Morceaux de code

Page 69: Chtijug springbatch 2011

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

Page 70: Chtijug springbatch 2011

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

Page 71: Chtijug springbatch 2011

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

Page 72: Chtijug springbatch 2011

Des questions,avant la suite ?

http://www.flickr.com/photos/crystaljingsr/3914729343/in/set-72157622354789320/

Page 73: Chtijug springbatch 2011

Spring BatchAllons plus loin

Page 74: Chtijug springbatch 2011

Maître détailRecipe

HopHopHop

R;Burton Ale;All Grain;Brad SmithH;Goldings, East Kent;United KingdomH;Northern Brewer;GermanyH;Fuggles;United KingdomENDR;Dry Stout;All Grain;Brad SmithH;Fuggles;United KingdomEND

Page 75: Chtijug springbatch 2011

Un batch plus robuste reprise sur erreurs

Page 76: Chtijug springbatch 2011

Flow

Step A

Step B

Page 77: Chtijug springbatch 2011

Scaling et parallélisme

http://www.flickr.com/photos/claudiasofia99/2878579560/

Page 78: Chtijug springbatch 2011

Spring Batch et Hibernate

Page 79: Chtijug springbatch 2011

Spring Batch Admin

Page 80: Chtijug springbatch 2011

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

Page 81: Chtijug springbatch 2011

Maître détail

R;Burton Ale;All Grain;Brad SmithH;Goldings, East Kent;United KingdomH;Northern Brewer;GermanyH;Fuggles;United KingdomENDR;Dry Stout;All Grain;Brad SmithH;Fuggles;United KingdomEND

Page 82: Chtijug springbatch 2011

Maître détail

RecipeStep

Chunk oriented tasklet

ItemReader ItemWriterItemProcessor

Page 83: Chtijug springbatch 2011

Maître détailDéclaration du Job

Page 84: Chtijug springbatch 2011

Maître détailDéclaration du reader custom

Page 85: Chtijug springbatch 2011

R;Burton Ale;All Grain;Brad SmithH;Goldings, East Kent;United KingdomH;Northern Brewer;GermanyH;Fuggles;United KingdomENDR;Dry Stout;All Grain;Brad SmithH;Fuggles;United KingdomEND

Page 86: Chtijug springbatch 2011

Maître détailDéclaration du reader délégué

Page 87: Chtijug springbatch 2011

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

Page 88: Chtijug springbatch 2011

Un batch plus robuste

Page 89: Chtijug springbatch 2011

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

Page 90: Chtijug springbatch 2011

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)

Page 91: Chtijug springbatch 2011

Reprise sur erreur

Page 92: Chtijug springbatch 2011

Reprise sur erreur: Skip

• Ne pas arrêter le batch si la lecture/process/écriture échoue

• Personnaliser les cas de « skip »• Ecouter les cas de « skip »

0001;ABC;DEF;0002;ABC;DEF;000zxjgxdjghjsdfkud0004;ABC;DEF;

Page 93: Chtijug springbatch 2011

Reprise sur erreur: Skip

– Si FlatFileException, Spring Batch skip l’item– Skip de 10 items max– Au-delà la step « failed »– Include/Exclude possible

Page 94: Chtijug springbatch 2011

Reprise sur erreur: Skip

• Personnaliser la gestion du « skip »• Par défaut: LimitCheckingItemSkipPolicy

Page 95: Chtijug springbatch 2011

Reprise sur erreur: Skip

• Configuration de la gestion du « skip »

Page 96: Chtijug springbatch 2011

Reprise sur erreur: Skip

• Un listener permet de traiter les items écartés

• Les annotations existent aussi– @OnSkipInRead– @OnSkipInWrite– @OnSkipInProcess

Page 97: Chtijug springbatch 2011

Reprise sur erreur: Retry

Page 98: Chtijug springbatch 2011

Reprise sur erreur: Retry

http://www.libertaland.com/2011/04/une-femme-de-75-ans-coupe-tout-linternet-en-armenie/

Page 99: Chtijug springbatch 2011

Reprise sur erreur: Retry

• Permet de relancer une opération si indispo temporaire

• Personnaliser les cas de « retry »• Ecouter les cas de « retry »

Page 100: Chtijug springbatch 2011

Reprise sur erreur: Retry

– Si DLDAE, Spring Batch recommence– Retry 3 fois max– Au-delà la step « failed »– Include/Exclude possible

Page 101: Chtijug springbatch 2011

Reprise sur erreur: Retry

• Personnaliser le « retry »: RetryPolicy– SimpleRetryPolicy (défaut)

• Stratégie entre 2 « retry »: BackoffPolicy– NoBackOffPolicy (défaut)– ExponentialBackOffPolicy vraiment utile

Page 102: Chtijug springbatch 2011

Reprise sur erreur: Retry

• Configuration de la gestion du « retry »

Page 103: Chtijug springbatch 2011

Reprise sur erreur: Retry

• Un listener permet de traiter les « retry »

Page 104: Chtijug springbatch 2011

Reprise sur erreur: Retry

• Pour les tasklets– RetryTemplate– RetryOperationsInterceptor avec de l’AOP

Page 105: Chtijug springbatch 2011

Reprise sur erreur: Restart

Page 106: Chtijug springbatch 2011

Reprise sur erreur: Restart

• Même avec skip/retry, un batch peut planter

• Il reste encore une solution • Nous pouvons redémarrer le batch

Page 107: Chtijug springbatch 2011

Reprise sur erreur: Restart

• Indique si le job est « restartable »

• Indique le nombre max de « restart »

Page 108: Chtijug springbatch 2011

Reprise sur erreur: Restart

• La step est démarrée lors du restart même si elle a été terminée correctement

Page 109: Chtijug springbatch 2011

Reprise sur erreur: Restart

• Comment reprendre en plein milieu d’un chunk ?

• Comment Spring Batch sait il où reprend ?

Page 110: Chtijug springbatch 2011

Reprise sur erreur: Restart

• Spring batch stocke des méta data

Page 111: Chtijug springbatch 2011

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 »

Page 112: Chtijug springbatch 2011

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.

Page 113: Chtijug springbatch 2011

Reprise sur erreur: Restart

• ItemStream

Page 114: Chtijug springbatch 2011

Reprise sur erreur: Restart• Exemple de Reader « restartable »

Page 115: Chtijug springbatch 2011

Reprise sur erreurConclusion

• 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

Page 116: Chtijug springbatch 2011

Gestion du flow

Page 117: Chtijug springbatch 2011

Gestion du flow

Le « batch bisounours »

Step A

Step B

Page 118: Chtijug springbatch 2011

Gestion du flow

Exemple

Page 119: Chtijug springbatch 2011

Gestion du flow

Exemple

Page 120: Chtijug springbatch 2011

Gestion du flow• Le « batch complexe»

Step

Step

Step

Step

Step

Step

Step

Step

Step

Page 121: Chtijug springbatch 2011

Gestion du flow

• Comment…– faire des flows non linéaires– piloter l’enchaînement des steps– passer des données entre steps

Page 122: Chtijug springbatch 2011

Gestion du flow

• Exemple plus simple ;)

StepA

StepB

StepAlertFAILED

*

Page 123: Chtijug springbatch 2011

Gestion du flow

Page 124: Chtijug springbatch 2011

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)

Page 125: Chtijug springbatch 2011

Gestion du flow

• Créer et utiliser ses propres « exit status » – StepExecutionListener– JobDecider

Page 126: Chtijug springbatch 2011

Gestion du flow

• Utiliser ses propres « exit status »

StepA

StepB

StepC

COMPLETED WITH SKIPS

*

Page 127: Chtijug springbatch 2011

Gestion du flow

• « exit status » + StepExecutionListener

Page 128: Chtijug springbatch 2011

Gestion du flow• Configuration

Page 129: Chtijug springbatch 2011

Gestion du flow

• « exit status » + JobExecutionDecider

Page 130: Chtijug springbatch 2011

Gestion du flow• Configuration

Page 131: Chtijug springbatch 2011

Gestion du flow

• « StepExecutionListener » ou « JobExecutionDecider » ?

• JobExecutionDecider pour réutiliser plus facilement la logique de branchement

Page 132: Chtijug springbatch 2011

Gestion du flow

• Encore plus de contrôle: end, fail

Page 133: Chtijug springbatch 2011

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']}

Page 134: Chtijug springbatch 2011

Gestion du flow

• Accès à ExecutionContext

Page 135: Chtijug springbatch 2011

Gestion du flow

• Configuration

Page 136: Chtijug springbatch 2011

Gestion du flow

• Mutualiser les flowsStep A

Step B

Step C

Step D

MonFlow

Page 137: Chtijug springbatch 2011

Gestion du flow• Configuration

Page 138: Chtijug springbatch 2011

Gestion du flow• Réutiliser un Job

Page 139: Chtijug springbatch 2011

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

Page 140: Chtijug springbatch 2011

Scaling

http://www.flickr.com/photos/claudiasofia99/2878579560/

Page 141: Chtijug springbatch 2011

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)

Page 142: Chtijug springbatch 2011

Spring Batch in Action

http://www.manning.com/templier

Page 143: Chtijug springbatch 2011

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/

Page 144: Chtijug springbatch 2011

Questions ?

http://www.flickr.com/photos/crystaljingsr/3914729343/in/set-72157622354789320/

Page 145: Chtijug springbatch 2011

Quizz

Page 146: Chtijug springbatch 2011

Quizz 1

Ce que n'est pas Spring Batch ?

1. un framework orienté batchs

2. un scheduler

3. un framework open source

Page 147: Chtijug springbatch 2011

Quizz 2

Qui est le principal leader du projet Spring Batch ?

1. Antonio Goncalves

2. Obi-wan Kenobi

3. Dave Syer

Page 148: Chtijug springbatch 2011

Quizz 3

Comment s'appelle le format standard de description de recette de bière ?

1. BeerXML

2. ISO-1664

3. ChtixML

Page 149: Chtijug springbatch 2011

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

Page 150: Chtijug springbatch 2011

Quizz 5

Comment s'appelle la console d’admin de Spring Batch ?

1. Coldfusion Web Console

2. Spring Batch Admin

3. PlayScala

Page 151: Chtijug springbatch 2011

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

Page 152: Chtijug springbatch 2011

ROTI

http://www.flickr.com/photos/34943981@N00/202923614/

Page 153: Chtijug springbatch 2011

Session « Spring Batch »

• Ekino– http://www.ekino.com / @3k1n0– Olivier Bazoud @obazoud

• Octo Technology– http://www.octo.com / @ OCTOTechnology– Julien Jakubowski @jak78

Page 154: Chtijug springbatch 2011
Page 155: Chtijug springbatch 2011

Spring Batch et Hibernate

Page 156: Chtijug springbatch 2011

Spring Batch et Hibernate

• Raison d’utiliser Hibernate avec Spring Batch: code existant rapidité de développement

• Ca ne se fait pas sans dangers…

Page 157: Chtijug springbatch 2011

Spring Batch et Hibernate

• Overhead de Hibernate sur JDBC

• Hibernate est stateful (par défaut)– 1M d’items lus = 1M maintenus en RAM

OutOfMemoryError

Page 158: Chtijug springbatch 2011

Spring Batch et Hibernate

Correctifs possibles pour pb stateful:

• Ne pas faire d’Hibernate ;-)

• Utiliser HibernateCustomItemReader– Session stateless

• Ajuster le commit interval

Page 159: Chtijug springbatch 2011

Spring Batch et Hibernate

• OK je suis un bon élève, j’utilise HibernateCursorItemReader

• Maintenant, je fonce…

• Mais attention au select N+1

Page 160: Chtijug springbatch 2011

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

Page 161: Chtijug springbatch 2011

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

– …

Page 162: Chtijug springbatch 2011
Page 163: 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

Page 164: Chtijug springbatch 2011

Spring Batch Admin

• API REST

Page 165: Chtijug springbatch 2011

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 …

Page 166: Chtijug springbatch 2011

Spring Batch Admin

• Les jobs

Page 167: Chtijug springbatch 2011

Spring Batch Admin

• Lancement / Historique d’un job

Page 168: Chtijug springbatch 2011

Spring Batch Admin

• Lancer un job

Page 169: Chtijug springbatch 2011

Spring Batch Admin

• Détail d’un job execution

Page 170: Chtijug springbatch 2011

Spring Batch Admin• Détail d’éxécution

Page 171: Chtijug springbatch 2011

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

Page 172: Chtijug springbatch 2011

Spring Batch Admin / Monitoring

Page 173: Chtijug springbatch 2011

Spring Batch Admin / Monitoring

Page 174: Chtijug springbatch 2011
Page 175: Chtijug springbatch 2011

Scaling

http://www.flickr.com/photos/claudiasofia99/2878579560/

Page 176: Chtijug springbatch 2011

Scaling

Page 177: Chtijug springbatch 2011

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)

Page 178: Chtijug springbatch 2011

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

Page 179: Chtijug springbatch 2011

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’

Page 180: Chtijug springbatch 2011

Scaling: Multi-threaded Step

Page 181: Chtijug springbatch 2011

Scaling: Step en parallèle

• Executer plusieurs Step en parallèle• Mot clé « split » dans la configuration• Possibilité utiliser un

ThreadPoolTaskExecutor

Page 182: Chtijug springbatch 2011

Scaling: Step en parallèle

Page 183: Chtijug springbatch 2011

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

Page 184: Chtijug springbatch 2011

Scaling: Remote Chunking Master

Slave 1

ChunkProcessor

Writer

ChunkProcessor

Reader

ChunkProvider

Slave 2

ChunkProcessor

Writer

Slave N

ChunkProcessor

Writer

Page 185: Chtijug springbatch 2011

Scaling: Remote Chunking

• Démo ?!

Page 186: Chtijug springbatch 2011

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

Page 187: Chtijug springbatch 2011

Scaling: Partitioning