Searching...
Deutsch
English
Español
简体中文
Français
Deutsch
日本語
Português
Italiano
한국어
Русский
Nederlands
العربية
Polski
हिन्दी
Tiếng Việt
Svenska
Ελληνικά
Türkçe
ไทย
Čeština
Română
Magyar
Українська
Bahasa Indonesia
Dansk
Suomi
Български
עברית
Norsk
Hrvatski
Català
Slovenčina
Lietuvių
Slovenščina
Српски
Eesti
Latviešu
فارسی
മലയാളം
தமிழ்
اردو
Building Microservices

Building Microservices

Designing Fine-Grained Systems
by Sam Newman 2015 280 pages
Technology
Programming
Computer Science
Hören

Wichtige Erkenntnisse

1. Microservices: Kleine, autonome Dienste, die zusammenarbeiten

Microservices sind kleine, autonome Dienste, die zusammenarbeiten.

Grundlagen der Microservices. Die Microservices-Architektur basiert auf dem Prinzip, Software als eine Suite von kleinen, unabhängigen Diensten zu entwickeln. Jeder Dienst konzentriert sich darauf, eine Sache gut zu machen, läuft in seinem eigenen Prozess und kommuniziert über leichte Mechanismen wie HTTP/REST-APIs. Dieser Ansatz ermöglicht eine größere Flexibilität, Skalierbarkeit und Wartbarkeit im Vergleich zu monolithischen Architekturen.

Vorteile und Herausforderungen. Wichtige Vorteile von Microservices umfassen:

  • Verbesserte Modularität
  • Einfachere Skalierung einzelner Komponenten
  • Technologische Vielfalt
  • Verbesserte Fehlerisolierung
  • Schnellere Bereitstellungszyklen

Allerdings bringen Microservices auch Herausforderungen mit sich, wie:

  • Erhöhte betriebliche Komplexität
  • Bedenken bei verteilten Systemen (z.B. Netzwerklatenz, Fehlertoleranz)
  • Datenkonsistenz über Dienste hinweg

2. Evolutionäre Architektur: Anpassung an sich ändernde Anforderungen

Die Rolle des Architekten besteht darin, das große Ganze zu betrachten und dieses Gleichgewicht zu verstehen.

Veränderungen annehmen. Evolutionäre Architektur betont die Notwendigkeit, dass Systeme sich im Laufe der Zeit an sich ändernde Anforderungen anpassen. Dieser Ansatz erkennt an, dass es unmöglich ist, alle zukünftigen Bedürfnisse vorherzusagen, und konzentriert sich stattdessen darauf, eine flexible Grundlage zu schaffen, die sich weiterentwickeln kann.

Wichtige Prinzipien:

  • Inkrementelle Veränderungen: Kleine, häufige Updates statt großer, seltener Änderungen
  • Geleitete Veränderungen: Prinzipien und Praktiken zur Steuerung architektonischer Entscheidungen nutzen
  • Mehrere Architekturen: Anerkennen, dass sich verschiedene Teile des Systems mit unterschiedlichen Geschwindigkeiten entwickeln können

Architekten in diesem Modell agieren eher wie Stadtplaner, die Richtlinien und Einschränkungen festlegen, anstatt jedes Detail zu diktieren. Dies ermöglicht es Teams, lokale Entscheidungen zu treffen und gleichzeitig die Kohärenz des Gesamtsystems zu gewährleisten.

3. Modellierung von Diensten: Definition von Grenzen und Kontexten

Wir konzentrieren unsere Dienstgrenzen auf Geschäftsgrenzen, sodass klar ist, wo der Code für eine bestimmte Funktionalität lebt.

Domänengetriebene Gestaltung. Eine effektive Modellierung von Diensten erfordert ein tiefes Verständnis der Geschäftsdomain. Domain-Driven Design (DDD) bietet wertvolle Konzepte zur Definition von Dienstgrenzen:

  • Begrenzte Kontexte: Bereiche der Domain mit klaren Grenzen
  • Allgegenwärtige Sprache: Eine gemeinsame Sprache, die von Entwicklern und Fachexperten geteilt wird
  • Aggregate: Cluster von Domain-Objekten, die als Einheit behandelt werden

Identifizierung von Dienstgrenzen:

  • Ausrichtung an Geschäftsfähigkeiten
  • Kapselung von Daten und Verhalten
  • Minimierung von Abhängigkeiten zwischen Diensten
  • Berücksichtigung der Teamstruktur und Kommunikationsmuster

Gut definierte Grenzen führen zu kohärenteren Diensten und einer lockereren Kopplung zwischen ihnen, was die unabhängige Entwicklung und Bereitstellung erleichtert.

4. Integrationsstrategien: Die richtige Kommunikationsmethode wählen

Seien Sie konservativ in dem, was Sie tun, und liberal in dem, was Sie von anderen akzeptieren.

Bedeutung der Integration. Eine effektive Integration ist entscheidend dafür, dass Microservices nahtlos zusammenarbeiten. Die Wahl der Integrationstechnologie hat erheblichen Einfluss auf die Flexibilität, Leistung und Wartbarkeit des Systems.

Wichtige Integrationsmuster:

  • Synchrone Kommunikation: REST, gRPC
  • Asynchrone Kommunikation: Nachrichtenwarteschlangen, Event-Streaming
  • API-Gateways: Für Anforderungsrouting und -zusammenstellung
  • Service-Mesh: Für die Handhabung der Dienst-zu-Dienst-Kommunikation

Best Practices:

  • Verwendung technologieunabhängiger Protokolle (z.B. HTTP)
  • Implementierung toleranter Leser, um Änderungen reibungslos zu handhaben
  • Design für Ausfälle mit Circuit Breakers und Bulkheads
  • Berücksichtigung ereignisgesteuerter Architekturen für lose Kopplung

Die richtige Integrationsstrategie hängt von Ihrem spezifischen Anwendungsfall, den Leistungsanforderungen und der Expertise Ihres Teams ab.

5. Den Monolithen aufteilen: Übergang zu Microservices

Betrachten Sie unseren Monolithen als einen Marmorblock. Wir könnten das Ganze in die Luft jagen, aber das endet selten gut. Es ist viel sinnvoller, ihn schrittweise abzutragen.

Inkrementeller Ansatz. Der Übergang von einer monolithischen Architektur zu Microservices erfolgt am besten schrittweise. Dies ermöglicht es den Teams, zu lernen und sich anzupassen, während das Risiko minimiert wird.

Schritte zur Aufteilung eines Monolithen:

  1. Identifizieren von Nähten im bestehenden Code
  2. Extrahieren begrenzter Kontexte in separate Module
  3. Refaktorisierung gemeinsamer Datenstrukturen und Datenbanken
  4. Erstellen von APIs für die Kommunikation zwischen Modulen
  5. Extrahieren von Modulen in separate Dienste
  6. Implementierung neuer Funktionen als Microservices

Zu berücksichtigende Herausforderungen:

  • Datenabhängigkeiten zwischen Diensten
  • Transaktionale Integrität über Dienstgrenzen hinweg
  • Leistungsbeeinträchtigung durch Netzwerkkommunikation
  • Betriebliche Komplexität bei der Verwaltung mehrerer Dienste

Beginnen Sie mit den einfachsten, am wenigsten riskanten Extraktionen, um Vertrauen und Erfahrung aufzubauen, bevor Sie sich komplexeren Teilen des Systems widmen.

6. Bereitstellungstechniken: Sicherstellung von Zuverlässigkeit und Skalierbarkeit

Wenn etwas richtig, aber schwierig ist, sollten wir bestrebt sein, es einfacher zu machen.

Automatisierte Bereitstellung. Zuverlässige und skalierbare Bereitstellung ist entscheidend für den Erfolg von Microservices. Continuous Integration und Continuous Delivery (CI/CD) Praktiken sind unerlässlich, um die erhöhte Bereitstellungskomplexität zu bewältigen.

Wichtige Bereitstellungstechniken:

  • Infrastruktur als Code (IaC)
  • Containerisierung (z.B. Docker)
  • Orchestrierungsplattformen (z.B. Kubernetes)
  • Blue-Green-Bereitstellungen
  • Canary-Releases

Bereitstellungsüberlegungen:

  • Dienstentdeckung und Konfigurationsmanagement
  • Überwachung und Protokollierung
  • Sicherheit und Zugriffskontrolle
  • Datenbankmigrationen und Datenkonsistenz

Investieren Sie in Tools und Automatisierung, um Bereitstellungen einfacher, schneller und zuverlässiger zu machen. Dies ermöglicht es den Teams, häufig mit Vertrauen bereitzustellen und die vollen Vorteile der Microservices-Architektur zu realisieren.

7. Testen von Microservices: Qualität in einem verteilten System aufrechterhalten

Je mehr bewegliche Teile, desto brüchiger können unsere Tests sein und desto weniger deterministisch sind sie.

Umfassende Teststrategie. Das Testen von Microservices erfordert einen mehrschichtigen Ansatz, um sowohl die Qualität einzelner Dienste als auch das Gesamtverhalten des Systems sicherzustellen.

Testpyramide für Microservices:

  • Unit-Tests: Schnelle, fokussierte Tests für einzelne Komponenten
  • Integrationstests: Überprüfung der Interaktionen zwischen Diensten
  • Vertragstests: Sicherstellen, dass Dienste vereinbarte Schnittstellen einhalten
  • End-to-End-Tests: Validierung des gesamten Systemverhaltens

Testherausforderungen:

  • Erhöhte Komplexität aufgrund der verteilten Natur
  • Verwaltung von Testdaten über Dienste hinweg
  • Simulation produktionsähnlicher Umgebungen
  • Handhabung asynchroner Interaktionen

Betonen Sie schnelle Feedback-Schleifen mit Unit- und Integrationstests, während Sie weniger, sorgfältig ausgewählte End-to-End-Tests verwenden, um kritische Pfade zu validieren. Erwägen Sie die Verwendung von verbrauchergesteuerten Verträgen, um Dienstabhängigkeiten effektiv zu verwalten.

8. Überwachung und Sicherheit: Microservices gesund und geschützt halten

Gute Protokollierung und insbesondere die Fähigkeit, Protokolle aus mehreren Systemen zu aggregieren, dient nicht der Prävention, kann aber bei der Erkennung und Wiederherstellung von schlechten Ereignissen helfen.

Ganzheitlicher Ansatz. Effektive Überwachung und Sicherheit sind entscheidend für die Aufrechterhaltung eines gesunden Microservices-Ökosystems. Diese Aspekte werden in verteilten Systemen herausfordernder und wichtiger.

Best Practices für die Überwachung:

  • Zentralisierte Protokollierung und Protokollaggregation
  • Verteiltes Tracing (z.B. mit Korrelations-IDs)
  • Echtzeit-Alarmierung und Dashboards
  • Application Performance Monitoring (APM)
  • Synthetische Überwachung für kritische Pfade

Sicherheitsüberlegungen:

  • Authentifizierung und Autorisierung von Dienst-zu-Dienst
  • API-Gateways für Edge-Sicherheit
  • Geheimnisverwaltung
  • Netzwerksegmentierung
  • Regelmäßige Sicherheitsüberprüfungen und Penetrationstests

Implementieren Sie eine Defense-in-Depth-Strategie, die sowohl den Perimeter als auch die einzelnen Dienste sichert. Nutzen Sie Automatisierung, um eine konsistente Anwendung von Sicherheitsrichtlinien über alle Dienste hinweg sicherzustellen.

9. Conways Gesetz: Organisation und Systemdesign ausrichten

Conways Gesetz hebt die Gefahren hervor, ein Systemdesign durchzusetzen, das nicht zur Organisation passt.

Organisatorische Auswirkungen. Conways Gesetz besagt, dass das Systemdesign die Kommunikationsstrukturen innerhalb einer Organisation widerspiegelt. Dieses Prinzip hat erhebliche Auswirkungen auf die Microservices-Architektur.

Ausrichtung von Teams und Diensten:

  • Organisieren Sie Teams um Geschäftsfähigkeiten
  • Ermächtigen Sie Teams mit End-to-End-Verantwortung für Dienste
  • Minimieren Sie Abhängigkeiten zwischen Teams
  • Fördern Sie eine Kultur der Zusammenarbeit und gemeinsamen Verantwortung

Überlegungen:

  • Teamgröße und -zusammensetzung
  • Kommunikationsmuster und -tools
  • Entscheidungsprozesse
  • Kompetenzentwicklung und Wissensaustausch

Erkennen Sie, dass Organisationsstruktur und Systemarchitektur miteinander verflochten sind. Entwickeln Sie beide im Einklang, um ein Umfeld zu schaffen, das den erfolgreichen Microservices-Entwicklung und -Betrieb fördert.

10. Skalierung von Microservices: Wachstum und Ausfälle bewältigen

In großem Maßstab, selbst wenn Sie die beste Ausrüstung und die teuerste Hardware kaufen, können Sie nicht vermeiden, dass Dinge ausfallen können und werden.

Design für Skalierung und Resilienz. Microservices-Architekturen müssen so gestaltet sein, dass sie sowohl Wachstum in der Nachfrage als auch unvermeidliche Ausfälle elegant bewältigen.

Skalierungsstrategien:

  • Horizontale Skalierung (Hinzufügen weiterer Instanzen)
  • Vertikale Skalierung (Erhöhung der Ressourcen pro Instanz)
  • Caching (In-Memory, verteilt)
  • Datenbank-Sharding und -Replikation
  • Asynchrone Verarbeitung und ereignisgesteuerte Architekturen

Resilienz-Muster:

  • Circuit Breakers zur Vermeidung von Kaskadenfehlern
  • Bulkheads für Fehlerisolierung
  • Timeouts und Wiederholungen mit exponentiellem Backoff
  • Gnadenvolle Degradierung der Funktionalität

CAP-Theorem-Überlegungen:

  • Konsistenz
  • Verfügbarkeit
  • Partitionstoleranz

Verstehen Sie, dass Kompromisse notwendig sind, wenn Sie verteilte Systeme skalieren. Priorisieren Sie basierend auf Ihren spezifischen Anforderungen und Einschränkungen. Implementieren Sie Beobachtbarkeit und Chaos-Engineering-Praktiken, um die Systemresilienz kontinuierlich zu verbessern.

Last updated:

Rezensionen

4.21 out of 5
Average of 4k+ ratings from Goodreads and Amazon.

Building Microservices erhält gemischte Bewertungen, wobei viele das umfassende Überblick über Microservices-Konzepte und die praktischen Ratschläge loben. Leser schätzen den vorsichtigen Ansatz des Autors und die realen Beispiele. Kritiker bemängeln die fehlende Tiefe bei einigen Themen und die potenzielle Überbewertung von Microservices. Viele finden es für Anfänger wertvoll, aber weniger nützlich für erfahrene Architekten. Das Buch behandelt verschiedene Aspekte von Microservices, einschließlich Design, Bereitstellung, Testen und Skalierung. Einige Leser wünschten sich konkretere Implementierungsdetails, während andere die hochrangige Perspektive auf Softwarearchitektur schätzten.

Über den Autor

Sam Newman ist ein renommierter Softwarearchitekt und Berater, der sich auf Microservices, Cloud-Computing und Continuous Delivery spezialisiert hat. Mit umfangreicher Erfahrung auf diesem Gebiet hat er mit zahlreichen Organisationen zusammengearbeitet, um deren Softwarearchitekturen zu implementieren und zu verbessern. Newman ist ein häufiger Redner auf Konferenzen und hat mehrere Bücher über Softwareentwicklung verfasst. Sein Schreibstil wird für seine Klarheit, Praxisnähe und Anschaulichkeit gelobt, da er aus seinen realen Erfahrungen schöpft. Als Vordenker im Bereich der Microservices hat Newmans Arbeit die Herangehensweise der Branche an den Aufbau verteilter Systeme maßgeblich beeinflusst. Seine Expertise geht über technische Aspekte hinaus und umfasst auch organisatorische und kulturelle Überlegungen in der Softwareentwicklung.

0:00
-0:00
1x
Create a free account to unlock:
Bookmarks – save your favorite books
History – revisit books later
Ratings – rate books & see your ratings
Listening – audio summariesListen to the first takeaway of every book for free, upgrade to Pro for unlimited listening.
Unlock unlimited listening
Your first week's on us
Today: Get Instant Access
Listen to full summaries of 73,530 books. That's 12,000+ hours of audio!
Day 5: Trial Reminder
We'll send you a notification that your trial is ending soon.
Day 7: Your subscription begins
You'll be charged on Sep 26,
cancel anytime before.
What our users say
“...I can 10x the number of books I can read...”
“...exceptionally accurate, engaging, and beautifully presented...”
“...better than any amazon review when I'm making a book-buying decision...”
Compare Features
Free Pro
Read full text summaries
Listen to full summaries
Unlimited Bookmarks
Unlimited History
Benefits
Get Ahead in Your Career
People who read at least 7 business books per year earn 2.3 times more on average than those who only read one book per year.
Unlock Knowledge Faster (or Read any book in 10 hours minutes)
How would your life change if we gave you the superpower to read 10 books per month?
Access 12,000+ hours of audio
Access almost unlimited content—if you listen to 1 hour daily, it’ll take you 33 years to listen to all of it.
Priority 24/7 AI-powered and human support
If you have any questions or issues, our AI can resolve 90% of the issues, and we respond in 2 hours during office hours: Mon-Fri 9 AM - 9 PM PT.
New features and books every week
We are a fast-paced company and continuously add more books and features on a weekly basis.
Fun Fact
2.8x
Pro users consume 2.8x more books than free users.
Interesting Stats
Reduced Stress: Reading for just 6 minutes can reduce stress levels by 68%
Reading can boost emotional development and career prospects by 50% to 100%
Vocabulary Expansion: Reading for 20 minutes a day are exposed to about 1.8 million words per year
Improved Cognitive Function: Reading can help reduce mental decline in old age by up to 32%.
Better Sleep: 50% of people who read before bed report better sleep.
Can I switch plans later?
Yes, you can easily switch between plans.
Is it easy to cancel?
Yes, it's just a couple of clicks. Simply go to Manage Subscription in the upper-right menu.
Save 62%
Yearly
$119.88 $44.99/yr
$3.75/mo
Monthly
$9.99/mo
Try Free & Unlock
7 days free, then $44.99/year. Cancel anytime.