Wer bin ich
         
          
      
      
         
         
            Einleitung
            Größe von Mircoservices
         
         
            Einleitung - Größe von Mircoservices
            Zu groß
         
         
            Größe von Mircoservices - Zu groß
            Enthält mehr Fachlichkeit
            
               - Nicht mehr durch ein Team zu managen
- Mehr Abstimmungen
- Mehr Code
Größe von Mircoservices - Zu groß
            Zuständigkeiten unklar
            
               - Mehr als ein Team "Owner"
                  
               
- Broken-Glass-Problematik
                  
                     - Aufräumen geht nicht nebenher
 
Größe von Mircoservices - Zu groß
            Struktur kann schnell verloren gehen
            
               - !!!!! Big-Ball-Of-Mud !!!!!
Größe von Mircoservices
            Zu klein
         
         
            Größe von Mircoservices - Zu klein
            Refactorings an Schnittstellen
         
         
            Größe von Mircoservices - Zu klein
            Verschieben von Funktionalität
         
         
            Größe von Mircoservices - Zu klein
            Systemintegrationstests mit vielen Teilen
         
         
            Größe von Mircoservices - Zu klein
            Overhead beim Deployment
         
         
            Größe von Mircoservices - Zu klein
            Overhead beim Betrieb
            
               - Monitoring
- Tracing
- Observability
                  
                     - teilweise Lizenzierung per JVM
 
Größe von Mircoservices - Zu klein
            Fehlersuche in verteilten Systemen
            
         
         
            Größe von Mircoservices - Zu klein
            Verteiltes System
            
         
         
            Größe von Mircoservices - Zu klein
            Verteiltes System
            
         
         
            Größe von Mircoservices - Zu klein
            Verteiltes System
            
               - Mehraufwand
                  
                     - Asynchrone Kommunikation (Queues/Feeds)
- Redundante Datenhaltung
 
Größe von Mircoservices - Zu klein
            Verteiltes System
            
               - Fehler bei der Ausführung
                  
               
Größe von Mircoservices - Zu klein
            
         
         
            Einleitung - Größe von Mircoservices
            Zielgröße
            
               - 1 System pro Team (5-9 Leute)
               
- Möglichst unabhängig von anderen Systemen
                  
                     - Self-Contained-Systems / Vertikale
                     
- Microservices schneiden mit
                        Event-Storming (Ina Einemann / Arne Limburg)
                     
 
Einleitung - Größe von Mircoservices
            Zielgröße
            
               - Keine geeigneten Schnittpunkte?
- Unklare Zuordnungen?
- Im Zweifel: größer
                  
                     - Probleme - in der Regel - einfacher zu handhaben
 
Einleitung
            Aufbau innerhalb von Microservices
         
         
            Einleitung - Aufbau innerhalb von Microservices
            Typische Architekturmuster
            
               - Clean Architecture
- Onion Architecture
- Hexagonal Architecture
JMolecules
            
               - Möglichkeit zur Auszeichnung von DDD-Pattern
- Prüfregeln
                  
               
Einleitung - Aufbau innerhalb von Microservices
            
            
               - Typische Implementierung
                  
                     - Je Bounded-Context ein Package auf Domänenebene
                        (meistens)
                     
- Packages für Applikationsebene nicht mehr fachlich
- Infrastrukturebene eher technisch geschnitten
                        
                     
 
Einleitung - Aufbau innerhalb von Microservices
         
         
            Einleitung - Aufbau innerhalb von Microservices
            
            
               - Verlust jeglicher fachlicher Bildung
                  
                     - Kaum Abhängigkeiten innerhalb der Paketen
- Viele Abhängigkeiten zwischen den Paketen
 
- Sichtbarkeit von Klassen, Kontruktoren und
                  Methoden muss fast immer public sein!
               
- Starten von Integrationstests auf
                  Bounded-Context-Ebene Aufwändig
               
- Schon ein wenig Dirty!
Einleitung - Aufbau innerhalb von Microservices
            Option 1
            
               - Fachliche Ebene zusammenziehen
                  
                     - Domain und Service-Package zusammenziehen
- Öffentliches Interface der Domäne anlegen
 
Einleitung - Aufbau innerhalb von Microservices
            Option 2
            
               - Automatische Prüfungen
                  
                     - ArchUnit, jqasistant, ... nutzen um Regeln
                        durchzusetzen
                     
 
Spring Modulith
            
               - Features Spring Modulith
                  
                     - Eventing
- Testing
- Verification
- Documentation
- Observation
 
Spring Modulith
            Code diving!
            
         
         
            Spring Modulith - Features
            Eventing
            
               - Event-Integration-Model (How to invoke Problem)
                  
                     - Normal: in derselben Transaktion
- Async (@Async, @Transactional,
                        @TransactionalEventListener ->
                        @ApplicationModuleListener)
                     
- Incl. remote with persistent Sender
 
Spring Modulith - Features
            Eventing - Remote
            
               - Transaktionales Versenden zumeist nicht möglich
- EventPublicationRegistry
                  
                     - Persistierung von Events in der DB (transaktional)
- Kein automatisches Fehlerhandling
                        
                           - Handling über die Registry möglich
 
 
Spring Modulith - Features
            Testing
            
               - SpringBootTest per Modul
- Auflösen von Abhängigkeiten
- Support von Events
Spring Modulith - Features
            Verification
            
               - Verifikation der Modulabhängigkeiten
- Eclipse und Visual Studio Code Support für
                  Import-Verhinderung
               
Spring Modulith - Features
            Observation
            
               - Metriken nach modulen aufgeschlüsselt
Spring Modulith - Optionen
            Multi-Team-Makro-Service
            
               - Struktur für mehr Code in einer Deployment-Unit
- Test und Überwachung für mehrere Teams trennbar
            - Beratung, Coaching und Projektunterstützung
- Java, Spring-Boot, JPA, Quarkus
- Vue, React, Typescript
- Migrationen
- Testautomatisierung
- Coach in agilen Projekten