Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Micro-Batch-Services mit Spring Boot - ein Praxisbericht

Micro-Batch-Services mit Spring Boot - ein Praxisbericht

Auch Batch-Anwendungen leiden unter monolithischem Wachstum und Conway’s Law - Batch-Server mit Hunderten von Jobs sind die Folge, ein Horror für Updates und Testing. In dieser Session berichten wir von unseren Erfahrungen bei der Umstellung auf Micro-Batch-Services - von der Entwicklung eines eigenen Spring Boot Starters über Test, Release als RPMs, Deployment bis hin zum zentralen Monitoring über Spring Boot Admin, einem eigenen Administrations- und Monitoring-Tool für Spring-Boot-Anwendungen. Viele Erfahrungen sind dabei auch auf Nicht-Batch-Anwendungen übertragbar. Hier gibt's nicht bloß Theorie, sondern Berichte aus der Praxis!

tobiasflohre

March 25, 2015
Tweet

More Decks by tobiasflohre

Other Decks in Programming

Transcript

  1. codecentric AG WORUM GEHT ES? So könnte die schöne neue

    Welt sein! So ist die neue Welt! Micro-Batch-Services
  2. codecentric AG WORUM GEHT ES? So könnte die schöne neue

    Welt sein! So ist die neue Welt! Micro-Batch- Services Tools, Methoden, Frameworks, Vorgehen
  3. codecentric AG AGENDA -  Motivation / Problemstellung -  Entwicklung - 

    Build -  Deployment -  Monitoring -  Logging
  4. codecentric AG Servlet Container 27.03.15 7 Anwendung Batch Application HTTP

    Endpoint Scheduler Job- Metadaten Logs BATCH-ARCHITEKTUR Cron-Job Workflow-System
  5. codecentric AG BATCH-META-FRAMEWORK HTTP-Endpoints Job-Start Status Job-Stop Logfile / Protokoll

    Laufende Jobs Deployed Jobs Job-Execution- Details Logging Logfile pro Job-Execution Thread-Local Protokoll Einheitliches Format Kerndaten des Joblaufs Revisionssichere Ablage Metrics Test- Unterstützung Test-Ressourcen In-Memory Zähler Summen Transaktionssicher
  6. codecentric AG 27.03.15 9 Servlet Container Anwendung Batch Application HTTP

    Endpoint Job- Metadaten Logs MOTIVATION / PROBLEMSTELLUNG Sparte A Job Job Job Job Job Job Job Job Job Problem! Deployment -> Test aller Jobs Jobs sind schwer zu testen Mehrere Anwendungen! Puh... Nee... Anträge, Aufsetzen, git, Build, CI, Properties für Stages, Application Server Deployment, Monitoring, Logging
  7. codecentric AG MOTIVATION / PROBLEMSTELLUNG Ein Job pro Anwendung! Voraussetzungen

    schaffen! Aufsetzen des Projekts muss trivial sein Build-/CI-Jobs nicht manuell erzeugen Application Server loswerden Deployment vereinfachen Monitoring und Logauswertung von vielen Anwendungen ermöglichen
  8. codecentric AG ENTWICKLUNG Spring Boot makes it easy to create

    stand-alone, production- grade Spring based Applications that you can "just run".
  9. codecentric AG ENTWICKLUNG Spring Boot makes it easy to create

    stand-alone, production- grade Spring based Applications that you can "just run". Spring Boot Starter liefern Dependencies liefern Konfiguration einfach erweiterbar
  10. codecentric AG ENTWICKLUNG Spring Boot makes it easy to create

    stand-alone, production- grade Spring based Applications that you can "just run". Embedded Servlet Container Start per main-Methode Startfähiges Fat-Jar java –jar app.jar
  11. codecentric AG ENTWICKLUNG Spring Boot makes it easy to create

    stand-alone, production- grade Spring based Applications that you can "just run". Monitoring Properties Remote Shell CRaSH
  12. codecentric AG ENTWICKLUNG - spring-boot-starter-batch -  Batch-Ausführung standalone - Lösung: eigener Spring

    Boot Starter - Infrastruktureller Code wird geteilt https://github.com/codecentric/spring-boot-starter-batch-web <dependency> <groupId>de.codecentric</groupId> <artifactId>spring-boot-starter-batch-web</artifactId> <version>1.3.4.RELEASE</version> </dependency>
  13. codecentric AG ENTWICKLUNG HTTP-Endpoints Job-Start Status Job-Stop Logfile / Protokoll

    Laufende Jobs Deployed Jobs Job-Execution- Details Logging Logfile pro Job-Execution Thread-Local Protokoll Einheitliches Format Kerndaten des Joblaufs Revisionssichere Ablage Metrics Test- Unterstützung Test-Ressourcen In-Memory Zähler Summen Transaktionssicher
  14. codecentric AG ENTWICKLUNG 1. Wähle eine Basis aus existierenden Spring

    Boot Startern spring-boot-starter-web spring-boot-starter-batch spring-boot-starter-jdbc spring-boot-starter-actuator
  15. codecentric AG ENTWICKLUNG 3. Konfigurierbarkeit durch Properties @Value("${batch.max.pool.size:5}") private int

    maxPoolSize; @Bean public TaskExecutor taskExecutor() { ThreadPoolTaskExecutor taskExecutor = new ThreadPoolTaskExecutor(); taskExecutor.setMaxPoolSize(maxPoolSize); taskExecutor.afterPropertiesSet(); return taskExecutor; }
  16. codecentric AG ENTWICKLUNG 4. Erweiterbarkeit durch überschreibbare Default- Implementierungen @ConditionalOnMissingBean(BatchConfigurer.class)

    @Configuration public class TaskExecutorBatchConfigurer implements BatchConfigurer {} public interface BatchConfigurer { JobRepository getJobRepository() throws Exception; PlatformTransactionManager getTransactionManager() throws Exception JobLauncher getJobLauncher() throws Exception; JobExplorer getJobExplorer() throws Exception; }
  17. codecentric AG ENTWICKLUNG 5. Abhängigkeit von Klassenpfad und Ressourcen @ConditionalOnClass(name

    = "javax.persistence.EntityManagerFactory") @ConditionalOnMissingBean(BatchConfigurer.class) @Configuration protected static class JpaBatchConfiguration {} @ConditionalOnMissingClass @ConditionalOnResource @ConditionalOnWebApplication @ConditionalOnExpression @ConditionalOnProperty
  18. codecentric AG ENTWICKLUNG Voraussetzungen schaffen! Aufsetzen des Projekts muss trivial

    sein Build-/CI-Jobs nicht manuell erzeugen Application Server loswerden Deployment vereinfachen Monitoring und Logauswertung von vielen Anwendungen ermöglichen
  19. codecentric AG BUILD Ziel 1: Build-/CI-Jobs nicht manuell erzeugen Ziel

    2: Ein Job für alles -> Build, Release, Deployment
  20. codecentric AG BUILD Build now bei SCM Commit mvn clean

    package Release manuell mvn build-helper:parse-version versions:set –DnewVersion=${...} mvn clean package mvn deploy mvn scm:tag Promotion manuell Deployment auf Stages -> Trigger eines deployApplication-Jobs
  21. codecentric AG BUILD 27.03.15 25 create repo trigger job Job

    DSL Plugin Seed-Job Job, der Job erzeugt
  22. codecentric AG ENTWICKLUNG Voraussetzungen schaffen! Aufsetzen des Projekts muss trivial

    sein Build-/CI-Jobs nicht manuell erzeugen Application Server loswerden Deployment vereinfachen Monitoring und Logauswertung von vielen Anwendungen ermöglichen
  23. codecentric AG Build erzeugt RPM (Red Hat Package Manager) Maven

    RPM Plugin Startskript + Spring Boot Fat Jar Installationslogik (<preinstallScriptlet>) Properties umgebungsabhängig aus SCM Alternative: Spring Cloud Config DEPLOYMENT 27.03.15 28 Java Property- Resolver Spring Boot Anwendung deployApplication – Job ermittelt Server für Stage ssh -> yum install <artefakt>
  24. codecentric AG ENTWICKLUNG Voraussetzungen schaffen! Aufsetzen des Projekts muss trivial

    sein Build-/CI-Jobs nicht manuell erzeugen Application Server loswerden Deployment vereinfachen Monitoring und Logauswertung von vielen Anwendungen ermöglichen
  25. codecentric AG ENTWICKLUNG Voraussetzungen schaffen! Aufsetzen des Projekts muss trivial

    sein Build-/CI-Jobs nicht manuell erzeugen Application Server loswerden Deployment vereinfachen Monitoring und Logauswertung von vielen Anwendungen ermöglichen
  26. codecentric AG FRAGEN? Tobias Flohre codecentric AG Merscheider Straße 1

    42699 Solingen tobias.fl[email protected] www.codecentric.de blog.codecentric.de www.meettheexperts.de 27.03.15 35