Modul 14 von 16 · 📖 7 min Lesezeit · ⏱ 30 min gesamt
FI-AE 14 Backend-Architekturen — Monolith vs. Microservices
Inhaltsverzeichnis (6 Abschnitte)
FI-AE 14 Backend-Architekturen — Monolith vs. Microservices
In diesem Modul erkunden Sie die grundlegenden Backend-Architekturen der modernen Softwareentwicklung. Sie lernen die Vor- und Nachteile von monolithischen und microservices-basierten Systemen kennen und verstehen, wie diese Architekturen die Skalierbarkeit, Wartbarkeit und Entwicklungsgeschwindigkeit beeinflussen. Sie erhalten Einblicke in Schlüsselkonzepte wie API-Gateways, Service-Discovery und asynchrone Kommunikation über Queues und Events.
Konzepte und Hintergrund
- Monolithische Architektur
- Ein einzelnes, zusammenhängendes Anwendungssystem, bei dem alle Funktionen in einer Codebasis entwickelt und als Einheit bereitgestellt werden. Die Komponenten sind eng miteinander gekoppelt.
- Microservices-Architektur
- Ein Ansatz, bei dem eine Anwendung als Satz kleinerer, unabhängiger Dienste entwickelt wird, die über definierte Schnittstellen kommunizieren. Jeder Service ist eigenständig deploybar und skalierbar.
- API-Gateway
- Ein zentraler Einstiegspunkt für alle Client-Anfragen, der Anfragen an die entsprechenden Microservices weiterleitet, Authentifizierung durchführt und Lastverteilung übernimmt.
- Service-Discovery
- Ein Mechanismus, der es Microservices ermöglicht, die Netzwerkadressen anderer Dienste dynamisch zu ermitteln, ohne dass diese hartcodiert sein müssen.
- Asynchrone Kommunikation
- Eine Kommunikationsform, bei der der Absender nicht auf eine sofortige Antwort wartet. Sie erfolgt typischerweise über Message Queues (z.B. RabbitMQ, Kafka) oder Events (z.B. EventBus).
Architektur-Diagramm
flowchart TB Client[Client-Anwendung] --> APIGW[API-Gateway] APIGW --> Auth[Authentifizierung] APIGW --> Service1[Microservice 1] APIGW --> Service2[Microservice 2] APIGW --> Service3[Microservice 3] Service1 --> ServiceDiscovery[Service-Registry] Service2 --> ServiceDiscovery Service3 --> ServiceDiscovery Service1 --> MessageQueue[Message Queue] Service2 --> MessageQueue Service3 --> MessageQueue MessageQueue --> EventProcessor[Event Processor]
Praktische Schritte
- Definieren Sie die Domänengrenzen für Ihre Microservices basierend auf Geschäftsfunktionen. Dies stellt sicher, dass jeder Service eine klare Verantwortung hat.
- Implementieren Sie ein API-Gateway mit einem Framework wie Spring Cloud Gateway oder NGINX, um den Zugriff auf Ihre Services zu zentralisieren.
Installieren Sie die notwendigen Abhängigkeiten für Ihr Node.js-basiertes Microservice-Framework.npm install -g @nestjs/core @nestjs/common @nestjs/platform-express- Konfigurieren Sie eine Service-Registry wie Eureka oder Consul, damit Ihre Services sich gegenseitig finden können.
- Implementieren Sie eine Message Queue mit RabbitMQ oder Apache Kafka für asynchrone Kommunikation zwischen Services.
Starten Sie einen RabbitMQ-Container für die Nachrichtenverarbeitung.docker run -d --name rabbitmq -p 5672:5672 -p 15672:15672 rabbitmq:3-management- Definieren Sie klare Service-Verträge mit OpenAPI/Swagger-Spezifikationen, um die Kommunikation zwischen Frontend und Backend zu standardisieren.
- Implementieren Sie Circuit-Breaker-Muster in Ihren Services, um Ausfallkaskaden zu verhindern, wenn ein Dienst nicht verfügbar ist.
- Richten Sie ein Logging- und Monitoring-System wie ELK-Stack (Elasticsearch, Logstash, Kibana) oder Prometheus mit Grafana ein, um die Leistung Ihrer Services zu überwachen.
- Implementieren Sie CI/CD-Pipelines mit Tools wie Jenkins oder GitLab CI, um automatisierte Tests und Bereitstellungen für Ihre Microservices zu ermöglichen.
Häufige Fallstricke
Weiterführende Ressourancen
- Microservices.io - API Gateway Pattern
- Spring Cloud Gateway Dokumentation
- RabbitMQ Getting Started Guide
- Martin Fowler - Microservices
- Kubernetes - Working with Objects
Wissens-Check
Vier Fragen zur Selbstkontrolle. Klicken Sie jede Frage an, um die richtige Antwort und Erklärung zu sehen.
Was ist ein Hauptunterschied zwischen monolithischer und Microservices-Architektur?
- A) Monolithe verwenden immer SQL-Datenbanken, Microservices verwenden NoSQL
- B) In einer Microservices-Architektur sind Dienste eigenständig deploybar und skalierbar
- C) Monolithe sind immer langsamer als Microservices
- D) Microservices erfordern immer mehr Entwickler als Monolithe
Richtige Antwort: B. Die Unabhängigkeit der Dienste ist ein Kernmerkmal von Microservices. A ist falsch, da beide Architekturen verschiedene Datenbanktypen verwenden können. C ist falsch, da die Performance von der Implementierung abhängt. D ist falsch, da die Teamgröße nicht direkt von der Architektur abhängt.
Welche Funktion erfüllt ein API-Gateway in einer Microservices-Architektur?
- A) Es speichert die Daten aller Microservices zentral
- B) Es verwaltet die Berechtigungen für jeden Microservice einzeln
- C) Es ist ein zentraler Einstiegspunkt für Client-Anfragen und leitet diese weiter
- D) Es optimiert die Datenbankabfragen aller Microservices
Richtige Antwort: C. Das API-Gateway fungiert als Single Entry Point und verwaltet Anfragen. A ist falsch, da es keine Daten speichert. B ist falsch, da es Berechtigungen zentral verwaltet. D ist falsch, da es keine Datenbankabfragen optimiert.
Was ist der Zweck von Service-Discovery in einer Microservices-Architektur?
- A) Es überwacht die Systemleistung und alarmiert bei Problemen
- B) Es ermöglicht Microservices, die Adressen anderer Dienste dynamisch zu ermitteln
- C) Es sichert die Kommunikation zwischen Diensten durch Verschlüsselung
- D) Es verteilt die Last gleichmäßig auf alle verfügbaren Dienste
Richtige Antwort: B. Service-Discovery ermöglicht die dynamische Ermittlung von Dienstadressen. A beschreibt eher ein Monitoring-System. C ist Aufgabe der Sicherheitsmechanismen. D ist Aufgabe eines Load Balancers.
Welches ist ein Vorteil der asynchronen Kommunikation in Microservices-Architekturen?
- A) Sie reduziert die Komplexität des Systems
- B) Sie ermöglicht eine schnellere Antwortzeit für den Client
- C) Sie erhöht die Fehlertoleranz des Systems
- D) Sie eliminiert die Notwendigkeit von API-Gateways
Richtige Antwort: C. Asynchrone Kommunikation macht das System fehlertoleranter, da Dienste auch bei Ausfällen anderer Dienste funktionieren können. A ist falsch, da asynchrone Kommunikation die Komplexität erhöhen kann. B ist falsch, da die Antwortzeit für den Client möglicherweise länger wird. D ist falsch, da API-Gateways weiterhin benötigt werden.