Client-Server-Architektur
Architekturmuster, das Clients und Server in Rollen trennt und Kommunikations- sowie Skalierungsprinzipien für verteilte Systeme definiert.
Klassifikation
- KomplexitätMittel
- AuswirkungTechnisch
- EntscheidungstypArchitektur
- OrganisationsreifeFortgeschritten
Technischer Kontext
Prinzipien & Ziele
Use Cases & Szenarien
Kompromisse
- Überlastung von Servern ohne geeignete Skalierungsstrategie
- Sicherheitslücken in zentralen Diensten gefährden viele Clients
- Inkonsistenzen bei gleichzeitigem Zugriff ohne geeignete Koordination
- Verwende etablierte API-Standards (REST, gRPC) und Versionierung
- Redundante Server und Health-Checks implementieren
- Observability (Logging, Tracing, Metriken) von Anfang an einplanen
I/O & Ressourcen
- Client-Anfragen / Nutzerdaten
- Serverressourcen (CPU, Memory, Storage)
- Netzwerkverbindungen und Protokolle
- Antworten an Clients
- Persistente Datenspeicherung
- Operationales Monitoring und Logs
Beschreibung
Die Client-Server-Architektur trennt Funktionen zwischen Clients, die Dienste anfragen, und Servern, die Ressourcen bereitstellen. Sie definiert Kommunikationsmuster, Zuständigkeiten und Skalierungsmodelle für verteilte Systeme. Typische Einsatzbereiche sind Web-, Datenbank- und Anwendungsdienste; Entscheidungen müssen Latenz, Konsistenz, Sicherheit und Betriebskosten abwägen bei Entwurf und Betrieb.
✔Vorteile
- Zentrale Verwaltung von Ressourcen und Sicherheit
- Einfachere Skalierung der Serverkomponenten
- Wiederverwendbare Dienste für verschiedene Clients
✖Limitationen
- Single Point of Failure, wenn Server nicht redundant ausgelegt sind
- Netzwerklatenz und Bandbreitenabhängigkeit
- Potenzielle Skalierungskosten bei hohem Traffic
Trade-offs
Metriken
- Antwortzeit (p95)
Mindestgarantie der Antwortlatenz für 95% der Anfragen.
- Durchsatz (Anfragen/Sekunde)
Anzahl von verarbeiteten Anfragen pro Sekunde als Maß für Kapazität.
- Fehlerrate
Anteil fehlerhafter Antworten bezogen auf Gesamtanfragen.
Beispiele & Implementierungen
Typische Webarchitektur
Browser-Client kommuniziert mit REST-API, die auf einem Server läuft und eine relationale Datenbank nutzt.
Datenbank-Server-Architektur
Diverse Clients greifen über einen zentralen Datenbankserver auf gemeinsame Daten zu; Zugriffskontrolle zentral.
Microservice-gerechte Client-Server-Variante
Leichte Server-Services übernehmen spezialisierte Aufgaben, Clients koordinieren mehrere Services für Benutzerfunktionen.
Implementierungsschritte
Anforderungsanalyse und Rollenmodell festlegen
Schnittstellen (API-Verträge) designen
Serverkomponenten implementieren und testen
Betrieb, Skalierung und Monitoring einrichten
⚠️ Technische Schulden & Engpässe
Tech Debt
- Ad-hoc-Endpoints ohne API-Vertrag und Tests
- Fehlende Automatisierung für Skalierung und Deployment
- Keine Observability für kritische Pfade implementiert
Bekannte Engpässe
Beispiele für Missbrauch
- Alle Logik in einem zentralen Server, der zum Flaschenhals wird
- Unsichere APIs ohne Authentifizierung in Produktionsumgebungen
- Stateful Server ohne Strategie für Ausfallszenarien
Typische Fallen
- Unterschätzung der Netzwerk-Latenz bei verteilten Clients
- Fehlende Kapazitätsplanung führt zu plötzlichen Engpässen
- Vernachlässigte Sicherheits-Reviews vor Produktivsetzung
Erforderliche Fähigkeiten
Drivers (Architectural Drivers)
Constraints
- • Begrenzte Bandbreite und Latenzgrenzen
- • Legacy-Protokolle oder inkompatible Clients
- • Regulatorische Anforderungen an Datenspeicherung