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

Nie wieder Monolithen! Ein Praxisbericht über M...

Nie wieder Monolithen! Ein Praxisbericht über Micro Services.

Keiner will Sie, und dennoch entstehen Sie wie von Zauberhand: Anwendungsmonolithen. Mit Micro Services wird es möglich, die SOLID Prinzipen auf die Architektur anzuwenden. Anwendungen werden in kleine, kollaborierende Services zerlegt. Der Entstehung von grossen Software-Monolithen wird dadurch dauerhaft ein Riegel vor geschoben.

Die einzelnen Konzepte hinter dem Micro Service Architekturstil sind leicht zu erfassen und vieles davon ist bereits bekannt. In der Umsetzungspraxis entstehen dennoch einige Fragen, die beantwortet werden wollen:

- Welche Technologien bieten sich an?
- Wie können Integrationstests gestaltet werden?
- Was ändert sich an einer Continuous Deployment Pipeline, wenn plötzlich viele, im lifecycle unabhängige Services deployed werden wollen?
- Auf welche Aspekte muss beim Betrieb von Micro Services geachtet werden?

In diesem Vortrag stelle ich vor, welche Antworten wir bei der Hypoport AG auf diese Fragen gefunden haben. Am Ende werden Sie in der Lage sein, innerhalb kürzester Zeit, eigene Micro Services Aufzusetzen, zu Testen und zu Deployen.

Timmo Freudl-Gierke

September 25, 2014
Tweet

More Decks by Timmo Freudl-Gierke

Other Decks in Programming

Transcript

  1. Nie wieder Monolithen! Ein Praxisbericht über Micro Services. Timmo Freudl-Gierke

    @timmo_gierke 1 Micro Service User Group München 25. September 2014
  2. © 2011 HYPOPORT AG Organisator der 
 MongoDB User Group

    Berlin Head Architekt EUROPACE 2 Plattform Timmo Freudl-Gierke twitter: @timmo_gierke 2
  3. Agenda • Fachlicher Kontext • Monolithen • Micro Services •

    Macro- und Micro- Architektur • Technologiestack • Betrieb • Zusammenfassung
  4. Eigenschaften • Ein VCS (git) • Keine Steuerung der Abhängigkeiten

    • Ein Software Artefakt • Homogene Technologiestack • i.d.R. grosse Anwendungs-Library (“util”) • Verschmelzung unterschiedl. Fachlichkeiten
  5. Konsequenzen • Seiteneffekte • (Integrations-) Testbarkeit • Lange Buildzeiten •

    Hoher Einarbeitungsaufwand • Risiko von Änderungen • Kostenintensive Skallierbarkeit • Wenig Overhead bei (sehr) kleinen Anwendungen
  6. Eigenschaften • Ein VCS (git) - Ein IDE Projekt •

    Nachvollziehbare Abhängigkeiten (Maven)! • Ein Software Artefakt (WAR) • Eine Deployment Pipeline • Homogene Technologiestack • i.d.R. grosse Anwendungs-Library (“util”)
  7. Weiterentwicklung 0 100 200 300 400 2008 2010 Gestern Java

    + Grooy: > 1 M lines, XML 1,2 M lines # pom’s
  8. Konsequenzen • TDD Zyklus dauert > 20 Sek • Integrationstest-Feedback

    > 40 min • Release-Build > 1 Std • Innovation beschränkt auf Framework updates • Gebunden an Java / Spring / Maven
  9. Conway’s Law “Organizations which design systems are constrained to produce

    systems which are copies of the communication structures of these organizations.”
  10. Vorgangs Management Übersicht Partner Management Baufi Smart Kredit Smart Bauspar

    Smart Reporting Dokumenten Verwaltung Rechenkern 26 Antragsübersicht EUROPACE 2 Frontend WebApps
  11. Eigenschaften • Ein VCS (git) - Ein IDE Projekt •

    Nachvollziehbare Abhängigkeiten (Maven) • N Software Artefakte (WARs) mit eigener DB • Heterogener (Java) Technologiestack möglich • Eine Deployment Pipeline • Grosse Anwendungs-Library (“util”)
  12. Weiterentwicklung Entscheidung Mitte 2012: “Die Vorteile des “single project /

    single pipeline” überwiegen, wenn wir die langen Buildzeiten in den Griff bekommen” => Maven Milk Plugin
  13. Weiterentwicklung Classes per WebApp 80 - 2000 Maven Projekts per

    WebApp 5 - 50 Total Clases > 5k Total Maven Projects > 200 Technologiehomogenität 90% Herbst 2013
  14. Konsequenzen • TDD Zyklus dauert > 30 Sek • Integrationstest-Feedback

    3 .. 30 min (Milk Plugin) • Commit-to-Prod ~ 1 Std. • Rollout-“Stau” durch single Pipeline • Technologieunabhängigkeit wurde nicht genutzt (Effizienz, Komfort-Zone, Projektdruck) • Verzahnung / Kohäsion durch übergreifende Libraries
  15. 34

  16. Single Responsibility Principle “Für die Änderung einer Klasse sollte es

    nur genau einen Grund geben.” Robert C. Martin
  17. Eigenschaften • Single Responsibility • Separate VCS Projekt • Exklusive

    Datenbank • Aufgaben-optimierter Tech-Stack • Unabhängig Deploybar • Unabhängig Skallierbar • Verantwortung eines Team
  18. Leitplanken Makro-Architektur Mikro-Architektur UI / UX Freie Technologiewahl Ab- &

    Vorwärtskompatible Schnittstellen Keine geteilten Bibliotheken HTTP / REST Shared Nothing Model Continuous Deployment Logging / Request Verfolgung Health Monitoring Controlling & Metriken Security
  19. Lieblings Tech- Stack !•!Java 8! !•!Spring Boot ! ! ◦!Embedded

    Container! ! ◦!Executable Jar! ! ◦!Property-Management! ! ◦!HTTP Resourcen! !•!HAL + HAL Browser ! !•!Jersey-Http-Client! !•!Spring-Data-MongoDB! !•!TestNG! !•!Mockito! !•!FEST Assertions! !•!Gradle (Build & Deployment)! !•!MongoDB
  20. Infrastructure • CI-Server (TeamCity Goals) • Database (MongoDB) • Host

    (ESX) / Co-location • Puppet template • Load balancer config • DNS • Consul / HA Proxy 48
  21. Continuous Integration Server (Random, free Network Port) Service Integration Test

    Suite Service Integration Test Suite Service Integration Test Suite 59
  22. try { ServerSocket s = new ServerSocket(0); int port =

    s.getLocalPort(); s.close(); return port; } catch (IOException e) {// …} service.properties Service Integration Test Suite 60
  23. 61

  24. Multi-Pipeline Dependencies Production Rollout Service Integration T. Consumer Driven Tests

    Service Specific Pipeline (part) Service Specific Pipeline (part) 63
  25. Consumer Driven Test Suites B A C CDTS! A->B CDTS!

    B->C Verantwortungsgrenze Provider Consumer Provider Consumer 65
  26. Rolling Update For each Host do 1. Remove from load

    balancer 2. Shutdown service 3. Copy new service artefact(s) 4. (Install new artefact) 5. Start service 6. Add to load balancer 67
  27. 68

  28. Logging Log Aggregator • Logstash & Kibana • (Splunk) log

    statement: • traceId! • service • user • use-case • entity 73
  29. Monitoring • Self monitoring • Mem • Cpu • DB

    Connection • Business Metrics • Metrics + Graphite • Aalarming • pushover.net GET /health 74
  30. Resilience n-tier headache Circuit Breaker Fail fast Fail silent Hysterix

    Load Shedder Totmannschalter Caching Fallback Strategy 75
  31. Monolithen und deren Eigenschaften Architekturleitplanken Technologie Stack Deployment Pipeline Support

    & Betrieb Multi-Pipeline-Dependencies & Integrationstests Micro Service Fundament
  32. Nie wieder Monolithen! Ein Praxisbericht über Micro Services. Timmo Freudl-Gierke

    @timmo_gierke 80 Micro Service User Group München 25. September 2014