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

Vom Monolithen zu 
Self-Contained-Systems

Vom Monolithen zu 
Self-Contained-Systems

Praxisbericht über das schrittweise Herauslösen eines Self-Contained-Systems aus einem gewachsenen Monolithen.

Avatar for Daniel Rosowski

Daniel Rosowski

October 10, 2018
Tweet

More Decks by Daniel Rosowski

Other Decks in Programming

Transcript

  1. @DanielRosowski 1 Vom Monolithen zu 
 Self-Contained-Systems: Ein Praxisbericht Daniel

    Rosowski The Architecture Gathering 2018 10.10.2018, München
  2. @DanielRosowski „At Etsy about 150 engineers deploy a single monolithic

    application more than 60 times a day.“ „1.49 billion page views, 4,215,169 items sold, $94.7 million of goods sold, 22+ million members, 800,000+ active shops“ !10
  3. @DanielRosowski „We have 200 controllers with a total of 900

    methods! This combined with a model of 190 classes with some 1473 methods.“ !12
  4. @DanielRosowski Die Realität: Der Big Ball of Mud Ein Softwaresystem

    mit einer hohen Entropie Resultiert aus uneingeschränktem Wachstum Abhängigkeiten „kreuz und quer“ und zirkulär 13
  5. @DanielRosowski Lange Releasezyklen Agiles Mantra: „release early, release often“, aber:

    Keine Module, keine Teilreleases Aufwändiger Model-Driven-Development Prozess Langer Buildprozess !22
  6. @DanielRosowski Teambildung eingeschränkt fehlende Modularisierung => keine Schnittstellen Keine isolierte

    Fachlichkeit => Jeder muss alles wissen Querschnittsthemen wie Architektur und QS werden zunehmend schwieriger !28
  7. @DanielRosowski Architektur Arbeitsgruppe Regelmäßiger Termin mit klarem Fokus Jeder ist

    eingeladen teilzunehmen I.d.R. um die 4-5 Devs und 1-2 Ops Ergebnisse werden protokolliert Architekturentscheidungen werden in Architecture- Decision-Records (ADR) festgehalten !31
  8. @DanielRosowski Zielarchitektur 
 festlegen & prüfen Oftmals ist eine ursprüngliche

    Architektur bekannt / erkennbar Architektur festlegen (es gibt Tools, z.B. Structure101) Architektur visualisieren (PlantUML, yed, Whiteboard) Architektur-Constraints festlegen
 !32
  9. @DanielRosowski Microservices sind ein Modularisierungskonzept sind …klein. sind separate Deployments

    sind Programmiersprachen-unabhängig sind nicht eindeutig definiert! !39
  10. @DanielRosowski Self-Contained-Systems sind …größer als Microservices :-) sind in sich

    geschlossen, sie müssen nicht mit anderen Systemen kommunizieren beinhalten i.d.R. eine UI (Webanwendung) werden i.d.R. über die UI integriert !41
  11. @DanielRosowski Independent Systems Architecture Module die über Schnittstellen kommunizieren Module

    sind separate Prozesse, Container oder virtuelle Maschinen Unterscheidung zwischen Makro- und Mikroarchitektur Integration über standardisierte Schnittstellen !43 Kommunikation über standardisierte Protokolle Eigenständiger CI/CD Lifecycle Standardisierter Betrieb (Konfiguration, Deployment, Logging, etc.) Resilienz
  12. @DanielRosowski Entscheidungen für 
 Self-Contained-Systems Programmiersprachen-Unabhängigkeit wird nicht gebraucht (JEE

    Stack) Microservices sind schwierig! UI soll maßgeblicher Bestandteil der Teilsysteme sein Für sich alleine genommen sinnvoller Business Value !47
  13. @DanielRosowski SCS in the wild otto.de
 https://dev.otto.de/2016/03/20/why-microservices/ Kühne + Nagel


    https://kuehne-nagel.github.io/monolith-to- microservices/#/ Hermes
 https://speakerdeck.com/hermes/wie-wir-mit- microservices-beinahe-gescheitert-waren !48
  14. @DanielRosowski Welche Fachlichkeit? Was wurde in der Vergangenheit häufig geändert?

    Was wird sich in Zukunft vermutlich häufig ändern? Oder auch, was verursacht den größten Schmerz? !51
  15. @DanielRosowski Was wurde in der Vergangenheit am häufigsten geändert? Ticketsystem

    Reporting über Epics (o.ä.) der letzten Monate/Jahre VCS Reporting über geänderte Pfade der letzten Monate/ Jahre !52
  16. @DanielRosowski Was wird sich in Zukunft vermutlich am häufigsten ändern?

    Backlog analysieren Mit dem Business sprechen! Stakeholder konsultieren Zukünftige Businessgoals beachten !53
  17. @DanielRosowski Was verursacht den größten Schmerz? “If it hurts, do

    it more frequently, 
 and bring the pain forward.”
 - Jez Humble Architektur Arbeitsgruppe Einzelne Entwickler befragen !54 © https://de.wikipedia.org/wiki/Der_Schrei
  18. @DanielRosowski Integration der Serviceschicht Verarbeitung MQ FTP FTP Reporting Faktura

    Self-
 Service … !60 Eingang Ausgang Kunden- schnittstellen
  19. @DanielRosowski Kundenschnittstellen Start mit zwei Kunden und zwei KSS „Feature

    Toggle“ am Kunden !61 Der „Standardkunde“ (ca. 80% aller Kunden) Der „Customized Customer“
  20. @DanielRosowski Relocate or Rewrite? Code in das neue System verschieben?

    Oder Code neu schreiben? Es gibt keine klare Heuristik! Hybrid, da einige Teile übernommen werden konnten, andere dafür komplett ersetzt werden (EIP) !63
  21. @DanielRosowski Pipes and Filters Validieren Splitten Normieren Anreichern FTP Message

    Queue Ergebnis- mapping Anreichern Aggregieren FTP Message Queue Eingang Ausgang !65
  22. @DanielRosowski Integration der Daten Eingang Ausgang CSV XML Version 4

    Version 3 UTF-8 UTF-8 Verarbeitung Reporting Faktura Self-
 Service … REST API ⭐ ⭐ Monolith !67 Eingang Ausgang Kunden- schnittstellen Kunde Id Name Organisation
  23. @DanielRosowski Kundenschnittstellen 2. Schritt: Bounded Context in eigenes Schema migrieren

    Schnittstelle zu den Stammdaten im Monolithen bleibt bestehen !68
  24. @DanielRosowski Integration der Daten Kunden- schnittstellen Kunde Id Name Organisation

    Verarbeitung Reporting Faktura Self-
 Service … REST API Eingang Ausgang CSV XML Version 4 Version 3 UTF-8 UTF-8 Monolith !69
  25. @DanielRosowski Wie kann integriert werden? Server-seitig
 z.B. ESI oder SSI

    ➕ Standardlösung, wird von
 den meisten Webservern
 unterstützt
 
 
 ➖ Synchron und dadurch
 langsam !72 Client-seitig
 z.B. Ajax ➕ Asynchron und dadurch 
 fehlertolerant
 ➕ Es können auch nur Teile
 der Seite neu geladen
 werden
 ➖ Mehrere Requests im
 Client nötig
  26. @DanielRosowski Deployment Release early and deploy early! Operating frühstmöglich ins

    Boot holen Zentrales Monitoring und Logging unbedingt empfehlenswert! Eigenständiger CI/CD Lifecycle !75
  27. @DanielRosowski CI/CD Jenkins / GoCD / Teamcity / … Chef

    / Puppet / Ansible / … Docker / K8S !77 Build Test Provisioning Deploy Test Pre-
 Prod Prod
  28. @DanielRosowski Antipattern 
 „Ivory Architect“ Architekturarbeit ist Teamarbeit Architektur sollte

    nicht im Elfenbeinturm entworfen werden Die Entwickler wissen selber am besten, welche Stellen die größten Probleme verursachen 80 © http://dilbert.com
  29. @DanielRosowski Antipattern 
 „Big Bang“ Mit kleiner unabhängiger Funktionalität starten

    Gefühl für Sizing entwickeln Erste Erfahrungen mit Multi- Deployment sammeln Gefahr des „Microlith“ 81 © https://www.popsci.com
  30. @DanielRosowski Antipattern 
 „Half Measures“ Serviceschicht und User Interface werden

    modularisiert Daten liegen weiterhin in einem monolithischen Schema Oder anders herum: Daten und Service und monolithische UI 82 © https://www.cafepress.com/+breakingbad_half_measures_tile_coaster,1716311230
  31. @DanielRosowski Antipattern 
 „Stuck-in-Between“ Am Anfang wird eine Verschlechterung der

    Architektur bewusst in Kauf genommen Wenn der Schritt nicht komplett vollzogen wird, stehen wir hinterher schlechter da! 83 © https://martinfowler.com/articles/break-monolith-into-microservices.html
  32. @DanielRosowski Antipattern 
 „Dance around“ Kernsystem wird nicht angegangen, da

    zu komplex zu hohes Risiko Es werden nur periphere Module gebildet (zumeist technischer Natur) 84