Skip to content
State and Event Management / Service Granularity
- Problem bei Microservices: Ein Service kann nur auf eigenen Daten operieren. Was, wenn globale Transaktion ausgeführt werden muss?
Statelessness
- Session state und resource state sind Unterbegriffe von application state
- session state ist auf dem Presentation layer, nicht interessant für domain layer, z.B. Page flow auf website
- resource state ist auf Business Ebene, die Resources sind REST-Ressourcen, z.B. Entities
- REST erlaubt streng genommen gar keine Cookies
- Server Session State ist unpopulär wegen schlechter Skalierbarkeit, besser gleich Session in Datenbank speichern (z.B. Redis)
- So ist Session natürlich auch einfacher zu archivieren und auszuwerten. Bei REST ist das viel schwieriger (möglicher Grund für Verbreitung)
Event Sourcing
- Bei leerem application state anfangen und change logs verwenden (ähnlich Git)
- Alle Änderungen gehen über Events
- Es werden Checkpoints gesetzt in der "Kette" der Events
- Erlaubt komplette Audit Logs, oder z.B. Messaging zwischen Aggregates in DDD
- Coupling:
- Events sind time- und reference-decoupled
- Platform-decoupling mit XML / JSON
- Format-coupling: Empfänger und Sender müssen sich auf Datenformat einigen
Command Query Responsibility Segregation (CQRS)
- Domain Model auseinander ziehen
- Eines ist auf Reads und eines auf Writes optimiert
- Nützlich, wenn grosse Imbalance zwischen Read und Write
- Read-Cache für schnelles Lesen
- Schreib-Operationen werden eventually consistent in den Read Storage übertragen
- Gut, wenn Performance wichtiger als Korrektheit ist
- Schwierig, konsistent zu halten
Service Granularity
- Master Data Separation: Lang-lebende Objekte werden abgekapselt
- Loose Kopplung zwischen grösseren Services ist einfacher als zwischen vielen kleinen Services
- Business Granularität: "Gib den Status der Bestellung" (fein granular)
- Technische Granularität: Beeinflusst Performance und Skalierbarkeit, z.B. Anzahl Operationen im System
- Bsp: "Tweets der letzten 30 Minuten" ist auf Business-Ebene feingranular, auf technischer Ebene sind das aber viele Daten, also grob granular