paris jug spring batch

73
Spring Batch Mardi 14 Mai 2013 Paris JUG Olivier Bazoud Julien Jakubowski

Upload: olivier-bazoud

Post on 27-Jun-2015

794 views

Category:

Technology


6 download

DESCRIPTION

http://www.parisjug.org/xwiki/bin/view/Meeting/20130514 Quand j'écris une application Web, il y a pléthore de frameworks Web. Quand j'accède à une base de données, il y a des solutions de persistance (Hibernate, etc.). Quand je fais du batch, je suis... à poil ! Les batchs seraient-ils les parents pauvres de Java ? Spring Batch offre pourtant une solution pour vous guider lors de l'écriture de vos batchs en Java en toute décontraction. Le 14 Mai, Olivier et Julien vous présenteront Spring Batch et vous donneront une autre vision des batchs en Java. Intervenants : Julien Jakubowski et Olivier Bazoud

TRANSCRIPT

Page 1: Paris JUG Spring Batch

Spring BatchMardi 14 Mai 2013

Paris JUG

Olivier Bazoud

Julien Jakubowski

Page 2: Paris JUG Spring Batch

Julien Jakubowski @jak78

Java depuis > 10 ans

Spécialisé Java EE / Spring

Vos réactions: #springbatch #parisjug

Intervenants

Olivier Bazoud @obazoud

Architecte technique sénior

Java EE / Spring, Spring Batch, NoSQL, Node.js

Co-auteur de « Spring Batch in Action »

Page 3: Paris JUG Spring Batch

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 4: Paris JUG Spring Batch

Nos objectifs

En sortant de la salle, vous savez:

Si Spring Batch est utile pour vous (ou pas)

Les notions principales de Spring Batch

… et quelques notions avancées

Faire un batch « Spring Batch » dès demain

https://github.com/obazoud/spring-batch-sug

Page 5: Paris JUG Spring Batch

Batch : de quoi parle-t-on ?

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

Page 6: Paris JUG Spring Batch

Batch : de quoi parle-t-on ?

… potentiellement grands volumes…

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

Page 7: Paris JUG Spring Batch

Batch : de quoi parle-t-on ?

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

Page 8: Paris JUG Spring Batch

Batch : de quoi parle-t-on ?

batch ≠ scheduler

Page 9: Paris JUG Spring Batch

Problèmes récurrents• Fiabilité

Page 10: Paris JUG Spring Batch

Problèmes récurrents• Maintenabilité

Page 11: Paris JUG Spring Batch

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

Page 12: Paris JUG Spring Batch

Spring Batch propose…

• Un cadre• Un vocabulaire (domain language)• Traitement par lots• Flow, Reprise sur erreur, …• Spring dans ses batchs• …

Parallélisme

PartitionnementSpring Batch Admin

Page 13: Paris JUG Spring Batch

Spring Batch

Notions de base

Page 14: Paris JUG Spring Batch

BeerBatch• Ecrire la date de début du batch• Lire le fichier XML de recettes, au format BeerXML• Ecrire en base de données

Page 15: Paris JUG Spring Batch
Page 16: Paris JUG Spring Batch

Schéma du batch

RecipeStep

InitialStep

Ecrit une date dans un log

Chunk oriented tasklet

ItemReader ItemWriterItemProcessor

Page 17: Paris JUG Spring Batch

Tasklet

RecipeStep

InitialStep

Chunk oriented tasklet

ItemReader ItemProcessor ItemWriter

Ecrit une date dans un log

Page 18: Paris JUG Spring Batch

Tasklet

• Besoin– Effectuer 1 tâche unitaire

• Exemples– Unzip d’un fichier– Ecrire une date dans un log– …

Page 19: Paris JUG Spring Batch

ItemReader

RecipeStep

InitialStep

InitialTasklet

Chunk oriented tasklet

ItemReader ItemWriterItemProcessorItemReader

Page 20: Paris JUG Spring Batch

ItemReader• Besoin

– Lire le XML de recettes

• ItemReader– Fournit des items en entrée

Page 21: Paris JUG Spring Batch

Morceaux de code

Page 22: Paris JUG Spring Batch

ItemProcessor

RecipeStep

InitialStep

InitialTasklet

Chunk oriented tasklet

ItemReader ItemWriterItemProcessor

Page 23: Paris JUG Spring Batch

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 24: Paris JUG Spring Batch

ItemWriter

RecipeStep

InitialStep

InitialTasklet

Chunk oriented tasklet

ItemReader ItemProcessor ItemWriter

Page 25: Paris JUG Spring Batch

ItemWriter• Besoin

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

• ItemWriter– Ecrit les items

Page 26: Paris JUG Spring Batch

Chunk

RecipeStep

InitialStep

InitialTasklet

Chunk oriented tasklet

ItemReader ItemProcessor ItemWriter

Page 27: Paris JUG Spring Batch

Chunk

• Besoin– Lire, transformer et écrire

• Chunk– Lit et transforme chaque recette successivement– Ecrit les recettes, par lot

Page 28: Paris JUG Spring Batch

Chunk

Taille du lot = commit interval = 2

Page 29: Paris JUG Spring Batch

Step

RecipeStep

InitialStep

Chunk oriented tasklet

ItemReader ItemProcessor ItemWriter

InitialTasklet

Page 30: Paris JUG Spring Batch

Step

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

Page 31: Paris JUG Spring Batch

Job

RecipeStep

InitialStep

Chunk oriented tasklet

ItemReader ItemProcessor ItemWriter

InitialTasklet

Page 32: Paris JUG Spring Batch

Job

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

Spring Tools Suite

Page 33: Paris JUG Spring Batch

Tests automatisés

• Coder un batch en TDD

• Tests d'intégration facilités

https://github.com/obazoud/spring-batch-sug

Page 34: Paris JUG Spring Batch

Forces et faiblesses

✔ Batchs complexes mieux maintenables✔ Productivité✔ Tests

✗Ticket d'entrée✗Ne convient pas à tous les batchs

Page 35: Paris JUG Spring Batch

Retour d’expérience Ekino

• Avec « Spring Batch »– Moins de code produit– Plus de tests unitaires & intégrations– Spring Batch s'occupe de la montée en charge– SQL/MyBatis

• Gain par rapport à un batch « legacy »– XML 100Mo + SQL; Gain : de 60 mn à 8mn– 10 fichiers 4Mo + SQL; Gain : de 10mn à 1mn30s– 20 fois rapide qu’un batch en … PHP ;)

Page 36: Paris JUG Spring Batch

JSR-352 « javax.batch »

Ressemble beaucoup à Spring Batch

Page 37: Paris JUG Spring Batch

Spring BatchAllons plus loin

Page 38: Paris JUG Spring Batch

Un batch plus robuste

Page 39: Paris JUG Spring Batch

Flow

Page 40: Paris JUG Spring Batch

Scaling

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

Page 41: Paris JUG Spring Batch

Monitoring

Page 42: Paris JUG Spring Batch

Spring Batch Admin

Page 43: Paris JUG Spring Batch

Un batch plus robuste reprise sur erreurs

Page 44: Paris JUG Spring Batch

Reprise sur erreur

• Spring Batch « out-of-the-box » propose:– Sauter les erreurs non bloquantes (skip)

• survivre à quelques données invalides

– Recommencer un traitement (retry)• survivre à une indisponibilité temporaire

– Redémarrer un batch (restart)• on est en mesure de le relancer

Page 45: Paris JUG Spring Batch

Reprise sur erreur: Skip

• Par défaut, au-delà du « skip-limit », failed

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

Page 46: Paris JUG Spring Batch

Reprise sur erreur: Retry

Page 47: Paris JUG Spring Batch

Reprise sur erreur: Retry

• Relancer une opération si indisponibilité

• Par défaut, au-delà du « retry-limit », failed• Personnaliser le « retry »

– RetryPolicy– Stratégie entre 2 « retry »: BackoffPolicy

• RetryListener pour écouter

Page 48: Paris JUG Spring Batch

Reprise sur erreur: Restart

Page 49: Paris JUG Spring Batch

Reprise sur erreur: Restart

• Spring batch stocke des méta data

Page 50: Paris JUG Spring Batch

Reprise sur erreur: Restart

• Indique si le job est « restartable »

• Indique le nombre max de « restart »

• Reader/Writer doivent être « restartable »

Page 51: Paris JUG Spring Batch

Reprise sur erreurConclusion

• Ecarter des items défectueux (skip)

• Recommencer une step s’il y a une erreur temporaire (retry)

• Redémarrer un job (restart)

Page 52: Paris JUG Spring Batch

Flow

Page 53: Paris JUG Spring Batch

Gestion du flow

• Exemple plus simple ;)

StepA

StepB

StepAlertFAILED

*

Page 54: Paris JUG Spring Batch

Gestion du flow

Page 55: Paris JUG Spring Batch

Gestion du flow

• Status– Etat du job/step en cours/après d’exécution

• Créer et utiliser ses propres « status »

• Gérer le flow– StepExecutionListener– JobDecider

Page 56: Paris JUG Spring Batch

Scaling

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

Page 57: Paris JUG Spring Batch

Scaling

Page 58: Paris JUG Spring Batch

Horizontal Scaling

• RabbitMQ: Message-Oriented Middleware– Découpler le producteur des consommateurs

• Batch Orienté Tâche ou Worker

Page 59: Paris JUG Spring Batch

Horizontal Scaling

WorkerBatch

WorkerBatch

Spring Batch

WorkerBatch

AMQPSpring Integration

Exchange

QueueBatch

Spring Batch Spring Batch

AMQPSpring Integration

Page 60: Paris JUG Spring Batch

Scaling

• Si un ItemProcessor est « lent »

• ItemProcessor en asynchrone• ItemWriter attend la fin des processors

• AsyncItemProcessor / AsyncItemWriter

Page 61: Paris JUG Spring Batch

Scaling

• Multi-threaded Step (Local)– Une Step est multithreaded

• Parallel Steps (Local)– Les Steps sont exécutées en parallèle

Page 62: Paris JUG Spring Batch

Scaling

• Remote Chunking of Step (Remote)– Distribution des chunks (Horizontal Scaling)– Reader sur les master– Processor/Writer sur les slaves

• Partitioning a Step (Local + Remote)– Découpe les données suivant une clé de

partition

Page 63: Paris JUG Spring Batch

Monitoring

• Graphite http://graphite.wikidot.com

Page 64: Paris JUG Spring Batch

Monitoring

• Collectd – http://collectd.org

– démon qui recueille périodiquement des statistiques de performance du système

• JMXTrans – https://github.com/jmxtrans/jmxtrans

– Interroge les données JMX de la JVM et les envoyer dans Graphite

Page 65: Paris JUG Spring Batch

Monitoring

• Metrics – http://metrics.codahale.com/

– Connaitre l’intérieur de votre application– Gauges, Counters, Meters, Histogram, Timers

• Extension pour Spring Batch– https://github.com/obazoud/metrics-spring-batch– Bientôt sur Maven Central

Page 66: Paris JUG Spring Batch

Monitoring

Mode push au lieu de pull

Page 67: Paris JUG Spring Batch

Monitoring

Page 68: Paris JUG Spring Batch

Spring Batch Admin

Page 69: Paris JUG Spring Batch

Spring Batch Admin

• Console Web pour Spring Batch– « Standalone » ou « Embedded »– API Rest– Uploader une configuration, un fichier à traiter– « Customisable »– Informations sur les jobs, steps, …

Page 70: Paris JUG Spring Batch

« Spring Batch in Action »

http://bit.ly/springbatchinaction

http://www.ekino.com

Un petit Tweet à @3k1n0 ;)

Page 71: Paris JUG Spring Batch

ROTI

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

Page 72: Paris JUG Spring Batch

Liens• Le code de la présentation

– https://github.com/obazoud/spring-batch-sug

• Spring Batch 2.1.x– http://static.springsource.org/spring-batch

• Spring Batch 2.2 coming soon

• Articles sur le web– http://www.theserverside.com/news/1363855/Spring-Batch-Overview– http://www.infoq.com/presentations/syer-introducing-spring-batch– http://blog.zenika.com/index.php?post/2010/03/05/To-batch-or-not-to-

batch– http://blog.octo.com/spring-batch-par-quel-bout-le-prendre/

Page 73: Paris JUG Spring Batch

Questions ?

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