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

Vom Distributed Monolith zu Self-Contained Systems: ein Erfahrungsbericht

Vom Distributed Monolith zu Self-Contained Systems: ein Erfahrungsbericht

Am Anfang war es einfach: wir waren eine Hand voll Entwickler, die auf der grünen Wiese starteten Software zu schreiben. Jetzt, 4 Jahre später, sind wir plötzlich über 30 Entwickler in 5 Teams, und aus unserer kleinen Software ist eine mandantenfähige, Multiprodukt-Plattform für über 500 Banken geworden (hätten wir das nur mal zu Anfang gewusst)

Nach ein paar holprigen Sprints, vielen Schulungstagen und Gesprächen auf Konferenzen wussten wir: unser Problem sind zu viele Abhängigkeiten im Code und Team. Also weg mit dem Distributed Monolith, Self-Contained Systems müssen her!

In unserem Erfahrungsbericht schildern wir, wie wir ein Projekt mit großer Codebasis in mehrere SCS aufgeteilt haben. Dabei gehen wir auf die organisatorischen Herausforderungen (Überzeugen des Chefs, Schnitt der Teams, Entscheidungen) eben so ein, wie auf die technischen Voraussetzungen, vor denen wir stehen und standen (Shared Code, Abhängigkeiten, Infrastruktur, Deployment).

Marcos Scholtz

February 06, 2020
Tweet

Other Decks in Technology

Transcript

  1. Cofinpro AG // // VisualVest – unser Projektpartner • Robo-Advisor

    für die vollständig digitale Geldanlage • White-Label Plattform für mehreren hundert Banken 3 06.02.2020
  2. Cofinpro AG // // Was wollen wir erzählen? • Vorher

    – unser Distributed Monolith • Unser Ziel – Self-Contained-Systems • Unser Weg – wie sind wir vorgegangen • Was ist noch zu tun • Was haben wir gelernt 4 06.02.2020
  3. Cofinpro AG // // Am Anfang war alles schön… •

    neue Web-Anwendung • Microservices in zwei Schichten - Business-Logik - Integration • 1 AngularJS Frontend • 1 Kunde, ein Produkt • 1 Scrum-Team 6 Die Welt war in Ordnung 06.02.2020
  4. Cofinpro AG // // Der Preis des Erfolgs • Viele

    neue Features • White-Labeling für über 300 Banken • verschiedene Produkte • neue Vertriebskanäle - Mobile-App - Berater-Portal - Bankarbeitsplatz • Skalierung auf 5 Scrum-Teams 06.02.2020 7 Komplexität um ein Vielfaches höher
  5. Cofinpro AG // // Die Organisation Reaktion • Einführung eines

    „Integration-Teams“ • hat die Architektur-Verantwortung • keine festen Zuständigkeiten der Teams 06.02.2020 9 Integration-Team Teams Ergebnis • Integration-Team überlastet • Jeder muss alles kennen • Teams demotiviert
  6. Cofinpro AG // // Die Herausforderung • Anwendung groß und

    komplex • neue Mitarbeiter brauchen lang für die Einarbeitung • Anpassungen nur schwer möglich • Fehler wirken sich auf andere Anwendungsteile aus • Viel Aufwand für manuelle Tests • Releases dauern zu lang 06.02.2020 10 Wir haben einen Distributed-Monolith!
  7. Cofinpro AG // // Self-Contained Systems 06.02.2020 12 Distributed Monolith

    Self-Contained Systems Simulation Registrierung Antragsstrecke SCS oder „Vertical“ Frontend Business-Layer Integration-Layer
  8. Cofinpro AG // // Ein Self-Contained System • ist eine

    unabhängige Web-Anwendung • gehört zu einem Team • kommuniziert meistens asynchron • beinhaltet Frontend, Logik, und Daten • benutzt keinen (kaum) geteilter Code oder Komponenten • kann allein released/deployed werden 06.02.2020 13 Hyperlinks Messaging https://scs-architecture.org Transclusion REST
  9. Cofinpro AG // // Self-Contained Systems Was wollen wir erreichen

    • weniger komplexe Anwendungen • unabhängiger arbeiten – weniger Overhead • mehr Eigenverantwortung für die Teams 06.02.2020 14
  10. Cofinpro AG // // Anwendungsschnitt 06.02.2020 16 • sonst keine

    Unabhängigkeit / Entkopplung • nach „Bounded Context“ (DDD) Schnitt sollte fachlich sein ✓ • geeignet für Produkte / Bereiche mit wenig Gemeinsamkeiten Nach Produkt / Bereich / Kundentyp • geeignet für Prozess-Schritte mit wenig Gemeinsamkeiten Nach fachlichen Prozess-Schritten Zerteilung in 10 Verticals nach fachlichen Prozess-Schritten
  11. Cofinpro AG // // Aufteilung der Verticals 06.02.2020 17 Fragestrecke

    Ermitteln von Anlage- vorschlägen Simulation der Zielerreichung Registrierung Anlegen von Benutzerkonten Authentifizierung Depoteröffnung Erfassen der persönlichen Daten Legitimation
  12. Cofinpro AG // // Verticals auf Teams verteilen • Verticals

    auf Teams verteilt - vorhandenes Know-How als wichtigster Faktor - Kick-Off Workshop mit jedem Team • manche Verticals größer als andere: Balance finden • Cross-Cutting Concerns: gemeinsam nach Open-Source- Vorbild entwickeln Erfahrungen • Immer wieder Feinjustierung nötig • aber weniger als gedacht 06.02.2020 18
  13. Cofinpro AG // // Herausforderung: Konzeption und Planung Umdenken bei

    der Konzeption von Stories • 1 User-Story ► 1 Vertical • PO(s) mit „Produkt“-Ausrichtung Ungleichmäßige Team-Auslastung 1. vermeiden (balanciert planen) 2. Entwickler wechseln temporär das Team 3. Stories zwischen Teams schieben (Merge-Requests an das „Owner“-Team) 06.02.2020 20 Simulation Registrierung Antragsstrecke Tolles Feature
  14. Cofinpro AG // // Scheinbare Entkopplung 06.02.2020 21 Conway‘s Law

    • Es geht um „Kommunikations- Wege“ • viel Kommunikation à starke Kopplung
  15. Cofinpro AG // // Cross-funktionale Teams Teams bestehen aus: •

    Team PO • Business-Analyst • Architekt • Entwickler • Tester • Operations 06.02.2020 22 Ziel: mehr Probleme direkt in den Teams lösen
  16. Cofinpro AG // // Mikro- und Makro-Architektur Mikro-Architektur • Alles

    was im Vertical ist • Services, Datenbanken, Frontends • Team-Konventionen (DoD) Makro-Architektur • Schnittstellen zwischen Verticals • Shared-Libraries, Infrastruktur • Konventionen und Richtlinien 06.02.2020 23 Cross-Cutting-Concerns Vertical 1 Vertical 2 Vertical 3 Cross-Cutting-Concerns Vertical 1 Vertical 2 Vertical 3
  17. Cofinpro AG // // Architektur- Community-of-Practice 06.02.2020 24 Backlog Backlog

    Backlog Community of Practice Makro-Architektur Team eigene Mikro-Arch. Team eigene Mikro-Arch. Team eigene Mikro-Arch.
  18. Cofinpro AG // // Verticals entkoppeln Abhängigkeiten • viel Kommunikation

    (HTTP-Calls) zwischen Verticals • Services enthalten Fachlichkeit aus verschiedenen Verticals • große Frontends – erstrecken sich über mehrere Verticals • viel geteilter Code (insbesondere im Frontend) 06.02.2020 29
  19. Cofinpro AG // // Ansätze zur Entkopplung Abhängigkeiten entfernen •

    Abspaltung von Frontends • Abspaltung von Services • Code-Duplizierung • Daten-Replizierung • Zusammenfügen von Services Abhängigkeiten pflegen • Frontend-Transclusion • Messaging • spezialisierte APIs • APIs rückwärtskompatibel • Schnittstellen-Tests (CDCT) 06.02.2020 30
  20. Cofinpro AG // // Abhängigkeiten pflegen 06.02.2020 39 Messaging •

    Request-Response-Pattern • einfaches Fehlerhandling • Gegenseite muss verfügbar sein • Publish-Subscribe Pattern • eventually consistent • Broker muss verfügbar sein
  21. Cofinpro AG // // Abhängigkeiten pflegen APIs rückwärtskompatibel • keine

    breaking changes • alte Felder behalten (deprecated) • API versionieren (vermeiden) 06.02.2020 41 Schnittstellen-Tests • Sicherstellen der API-Kompatibilität zwischen Versionen • Consumer Driven Contract Tests (z.B. PACT)
  22. Cofinpro AG // // Betriebs- und Delivery-Prozesse • Problem: stark

    regulierte Branche • Regulatorik und DevOps passen nicht immer zusammen • Mehr automatisiertes Testen notwendig • Testen der Schnittstellen (Contract Driven) erweitern • Delivery-Pipeline-Verantwortung in die Teams 06.02.2020 44 Entwicklung (minütlich) Test (täglich) Prod (wöchentlich)
  23. Cofinpro AG // // Was ist noch zu tun? •

    klare Schnittstellen zwischen Verticals - Abhängigkeiten: wir haben noch zu viele - alle problematischen schaffen wir vermutlich nie • Verticals sind Cluster von Microservices • unabhängige Release-Zyklen • Continuous Delivery - nicht kompatibel mit den Release- und Freigabeprozessen - Ausweg: automatisierte Compliance-Checks? 06.02.2020 45
  24. Cofinpro AG // // Was haben wir gelernt? Was läuft

    besser? • weniger Bugs • klarere Prozesse • weniger Abstimmungen, weniger Meetings • schnellere Umsetzung • motivierte Entwickler • technische Probleme werden wieder angegangen Was ist der Preis? • weniger Konsistenz (Daten, Problemlösung) • lokale Optimierungen: mein Vertical vs. die Plattform • weniger Übersicht der Entwickler über die Gesamtplattform • langsamer bei Anwendungs- übergreifenden Features 06.02.2020 47