Читать книгу Vom Monolithen zu Microservices - Sam Newman - Страница 5
На сайте Литреса книга снята с продажи.
Inhalt
ОглавлениеVorwort
1Gerade genug Microservices
Was sind Microservices?
Unabhängige Deploybarkeit
Modellierung rund um eine Businessdomäne
Die eigenen Daten besitzen
Welche Vorteile können Microservices haben?
Welche Probleme werden entstehen?
Benutzeroberflächen
Technologie
Größe
Und Ownership
Der Monolith
Der Ein-Prozess-Monolith
Der verteilte Monolith
Black-Box-Systeme von Fremdherstellern
Herausforderungen von Monolithen
Vorteile von Monolithen
Zu Kopplung und Kohäsion
Kohäsion
Kopplung
Gerade genug Domain-Driven Design
Aggregat
Kontextgrenzen
Aggregate und Kontextgrenzen auf Microservices abbilden
Weitere Quellen
Zusammenfassung
2Eine Migration planen
Das Ziel verstehen
Drei zentrale Fragen
Warum wollen Sie Microservices einsetzen?
Teamautonomie verbessern
Time-to-Market verringern
Kostengünstig auf Last reagieren
Robustheit verbessern
Die Anzahl der Entwickler erhöhen
Neue Technologien einsetzen
Wann können Microservices eine schlechte Idee sein?
Unklare Domäne
Start-ups
Beim Kunden installierte und verwaltete Software
Keinen guten Grund haben!
Abwägungen
Die Menschen mitnehmen
Organisationen verändern
Gefühl für die Dringlichkeit vermitteln
Führungskoalition schaffen
Vision und Strategie entwickeln
Veränderungsvision kommunizieren
Mitarbeitern umfangreiche Unterstützung ermöglichen
Kurzfristige Erfolge erzielen
Nutzen konsolidieren und weitere Veränderungen anstoßen
Neue Ansätze in der Unternehmenskultur verankern
Die Wichtigkeit der inkrementellen Migration
Nur die Produktivumgebung zählt
Veränderungskosten
Reversible und irreversible Entscheidungen
Bessere Orte zum Experimentieren
Wo fangen wir also an?
Domain-Driven Design
Wie weit müssen Sie gehen?
Event Storming
Ein Domänenmodell zum Priorisieren einsetzen
Ein kombiniertes Modell
Teams reorganisieren
Sich verändernde Strukturen
Es gibt nicht die eine Lösung für alle
Eine Änderung vornehmen
Veränderte Fähigkeiten
Woher wissen Sie, ob die Transformation funktioniert?
Regelmäßige Checkpoints
Quantitative Messgrößen
Qualitative Messwerte
Vermeiden Sie den Sunk-Cost-Effekt
Seien Sie offen für neue Ansätze
Zusammenfassung
3Den Monolithen aufteilen
Ändern wir den Monolithen, oder lassen wir es bleiben?
Ausschneiden, einfügen oder reimplementieren?
Den Monolithen refaktorieren
Migrations-Patterns
Pattern: Strangler Fig Application
Wie es funktioniert
Wo wir es einsetzen
Beispiel: HTTP Reverse Proxy
Daten?
Proxy-Optionen
Protokolle wechseln
Beispiel: FTP
Beispiel: Message Interception
Andere Protokolle
Andere Beispiele für das Strangler Fig Pattern
Verhaltensänderung während der Migration
Pattern: UI Composition
Beispiel: Page Composition
Beispiel: Widget Composition
Beispiel: Micro Frontends
Wo wir es einsetzen
Pattern: Branch by Abstraction
Wie es funktioniert
Als Fallback-Mechanismus
Wo wir es einsetzen
Pattern: Parallel Run
Beispiel: Preisbildung von Kreditderivaten
Beispiel: Homegate-Angebote
Verifikationstechniken
Spione einsetzen
Scientist von GitHub
Dark Launching und Canary Releasing
Wo wir es einsetzen
Pattern: Decorating Collaborator
Beispiel: Loyalty-Programm
Wo wir es einsetzen
Pattern: Change Data Capture
Beispiel: Loyalty-Karten ausgeben
Change Data Capture implementieren
Wo wir es einsetzen
Zusammenfassung
4Die Datenbank aufteilen
Pattern: Shared Database
Hilfreiche Patterns
Wo wir es einsetzen
Aber es geht nicht!
Pattern: Database View
Die Datenbank als öffentlicher Vertrag
Präsentations-Views
Grenzen
Ownership
Wo wir es einsetzen
Pattern: Database Wrapping Service
Wo wir es einsetzen
Pattern: Database-as-a-Service Interface
Eine Mapping Engine implementieren
Vergleich mit Views
Wo wir es einsetzen
Ownership transferieren
Pattern: Aggregate Exposing Monolith
Pattern: Change Data Ownership
Datensynchronisation
Pattern: Synchronize Data in Application
Schritt 1: Daten Bulk-synchronisieren
Schritt 2: Synchrones Schreiben, aus dem alten Schema lesen
Schritt 3: Synchrones Schreiben, aus dem neuen Schema lesen
Wo dieses Pattern genutzt werden kann
Wo wir es verwenden
Pattern: Tracer Write
Datensynchronisierung
Beispiel: Bestellungen bei Square
Wo wir es verwenden
Die Datenbank aufteilen
Physische versus logische Datenbanktrennung
Zuerst die Datenbank oder zuerst den Code aufteilen?
Zuerst die Datenbank aufteilen
Zuerst den Code aufteilen
Datenbank und Code gleichzeitig aufteilen
Was sollte ich also als Erstes aufteilen?
Beispiele zur Schemaaufteilung
Pattern: Split Table
Wo wir es verwenden
Pattern: Move Foreign-Key Relationship to Code
Den Join ersetzen
Datenkonsistenz
Wo wir es verwenden
Beispiel: Gemeinsam genutzte statische Daten
Transaktionen
ACID-Transaktionen
Weiterhin ACID, aber ohne Atomarität?
Zwei-Phasen-Commit
Verteilte Transaktionen: Sagen Sie einfach Nein!
Sagas
Fehlersituationen in Sagas
Sagas implementieren
Saga versus verteilte Transaktionen
Zusammenfassung
5Wachsende Probleme
Mehr Services – mehr Schmerzen
Ownership im großen Maßstab
Wie kann sich dieses Problem zeigen?
Wann kann sich das Problem zeigen?
Mögliche Lösungen
Disruptive Änderungen
Wie kann sich dieses Problem zeigen?
Wann kann sich das Problem zeigen?
Mögliche Lösungen
Reporting
Wann kann sich dieses Problem zeigen?
Mögliche Lösungen
Monitoring und Troubleshooting
Wann kann sich dieses Problem zeigen?
Wie kann sich das Problem zeigen?
Mögliche Lösungen
Lokale Entwicklung
Wie kann sich dieses Problem zeigen?
Wann kann sich das Problem zeigen?
Mögliche Lösungen
Zu viele Dinge laufen lassen
Wie kann sich dieses Problem zeigen?
Wann kann sich das Problem zeigen?
Mögliche Lösungen
End-to-End-Tests
Wie kann sich dieses Problem zeigen?
Wann kann sich das Problem zeigen?
Mögliche Lösungen
Globale versus lokale Optimierung
Wie kann sich dieses Problem zeigen?
Wann kann sich das Problem zeigen?
Mögliche Lösungen
Robustheit und Resilienz
Wie kann sich dieses Problem zeigen?
Wann kann sich das Problem zeigen?
Mögliche Lösungen
Verwaiste Services
Wie kann sich dieses Problem zeigen?
Wann kann sich das Problem zeigen?
Mögliche Lösungen
Zusammenfassung
Abschließende Worte
ALiteratur
BPattern-Index
Index