Skip to content

Systemdesign-Methodik

Einleitung

Systemdesign ist kein Bauchgefühl beim Zeichnen von Architekturdiagrammen, sondern eine systematische Methodik. Egal ob es sich um eine Systemdesign-Aufgabe in einem Vorstellungsgespräch oder um eine echte Architekturplanung in der Praxis handelt — es gilt ein ähnlicher Denkrahmen: Zunächst das Problem verstehen, dann den Umfang abschätzen, anschließend einen Entwurf erstellen und schließlich vertiefend optimieren.

Was werden Sie in diesem Artikel lernen?

Nach Abschluss dieses Kapitels werden Sie Folgendes beherrschen:

  • Design-Prozess: Den Vier-Schritte-Rahmen des Systemdesigns beherrschen
  • Kapazitätsschätzung: Die Technik der „Umschlag-Rückseite-Schätzung" erlernen
  • Gängige Muster: Kernmuster wie Caching, Sharding, Nachrichtenwarteschlangen kennen
  • Abwägungsdenken: Das Trade-off-Denken im Architekturdesign verstehen
  • Praktische Fälle: Den Designprozess anhand von URL-Shortener, Feed-Stream und anderen Beispielen nachvollziehen
KapitelInhaltKernkonzepte
Kapitel 1Vier-Schritte-DesignAnforderungsklärung, Kapazitätsschätzung, Architekturentwurf, vertiefende Optimierung
Kapitel 2KapazitätsschätzungQPS, Speicher, Bandbreite, Umschlag-Rückseite-Schätzung
Kapitel 3Kern-EntwurfsmusterCaching, Sharding, Nachrichtenwarteschlangen, CDN
Kapitel 4AbwägungsdenkenKonsistenz vs. Verfügbarkeit, Leistung vs. Kosten
Kapitel 5Klassische FälleURL-Shortener, Feed-Stream, Flash-Sale-System

1. Vier-Schritte-Systemdesign

Systemdesign bedeutet nicht, sofort ein Architekturdiagramm zu zeichnen. Egal ob Vorstellungsgespräch oder Praxis — ein strukturierter Prozess sollte befolgt werden.

Four-Step System Design Method
Click each step to inspect the details
1
Clarify requirements
~5 min
2
Estimate capacity
~5 min
3
Design architecture
~15 min
4
Deep dive
~10 min
Clarify requirements
Do not rush into drawing architecture diagrams. First clarify the problem, scale, core features, and non-functional requirements.
What are the core features? (MVP scope)
Expected user scale? DAU / QPS
Read/write ratio?
Data volume? How much data must be stored?
Availability target? How many nines?
Latency target? What P99 latency is acceptable?
Example: designing a URL shortener
URL shortener: create short links (write) and redirect (read), roughly 100:1 read/write ratio, 100 million redirects per day, links never expire.

Warum zuerst die Anforderungen klären?

Viele fangen sofort an zu zeichnen und entwerfen ein System, das zwar „korrekt", aber nicht das ist, „das der Prüfer haben möchte". 5 Minuten für die Klärung der Anforderungen sparen 30 Minuten Nacharbeit.

Typische Klärungsfragen:

  • Was sind die Kernfunktionen des Systems? (Nicht alle Funktionen entwerfen)
  • Wie groß ist die Nutzerbasis? (Entscheidet über die Notwendigkeit verteilter Architektur)
  • Lese-/Schreibverhältnis? (Bestimmt die Caching-Strategie)
  • Wie lange müssen Daten aufbewahrt werden? (Bestimmt die Speicherlösung)

2. Kapazitätsschätzung: Die Kunst der Umschlag-Rückseite

Die „Back-of-Envelope-Schätzung" ist eine Kernkompetenz im Systemdesign. Keine exakten Berechnungen nötig — nur die Größenordnung muss bekannt sein.

Back-of-the-Envelope Estimator
Enter basic numbers to estimate system capacity requirements
Daily requests
2000.0 ten thousand
Average QPS
231
Peak QPS
693
Daily bandwidth
102.4 GB
Peak bandwidth
3.5 MB/s
Common estimation references
1 day86,400 seconds
1 month~2.5M seconds
QPS 1000~1 eight-core server
100M/day~1,200 QPS
Single MySQL node~5,000 QPS
Single Redis node~100,000 QPS

Gängige Umrechnungshilfen

GrößenordnungUmrechnungEselsbrücke
1 Tag86.400 Sekunden≈ 100.000 Sekunden
100 Mio. Anfragen/Tag≈ 1.200 QPSGeteilt durch 100.000
1 KB × 100 Mio.≈ 100 GB100 Mio. kleine Datensätze
1 MB × 1 Mio.≈ 1 TB1 Mio. Bilder

Die 80/20-Regel in der Schätzung

Die meisten Systeme folgen der 80/20-Regel: 20 % der Daten tragen 80 % der Anfragen. Das bedeutet:

  • Cache-Größe ≈ Gesamtdatenmenge × 20 %
  • Hot-Spot QPS ≈ Gesamt-QPS × 80 % konzentrieren sich auf 20 % der Schlüssel
  • Cache-Trefferrate Ziel ≈ 80 %+ (darunter liegt ein Problem mit der Caching-Strategie vor)

3. Kern-Entwurfsmuster

Im Systemdesign tauchen wiederholt bestimmte Muster auf. Wer diese beherrscht, kann die meisten Szenarien bewältigen.

3.1 Caching-Muster

MusterLesepfadSchreibpfadAnwendungsbereich
Cache-AsideErst Cache prüfen, bei Miss DB abfragen und Cache befüllenErst DB schreiben, dann Cache invalidierenUniversell, am häufigsten verwendet
Read-ThroughCache-Schicht lädt automatisch aus DBWie Cache-AsideErfordert Cache-Framework-Unterstützung
Write-BehindWie Cache-AsideErst in Cache schreiben, asynchron in DBSchreibintensiv, Datenverlust tolerierbar

Warum „Cache löschen" statt „Cache aktualisieren"?

Das Aktualisieren des Caches führt in并发-Szenarien leicht zu Dateninkonsistenzen: Thread A und B aktualisieren gleichzeitig, A schreibt zuerst in die DB, aber B aktualisiert zuerst den Cache — der Cache enthält nun Bs alten Wert. Das Löschen des Caches zwingt die nächste Leseanfrage, die Daten erneut aus der DB zu laden, was dieses Problem natürlicherweise vermeidet.

3.2 Sharding (Datenbank- und Tabellenaufspaltung)

Wenn eine einzelne Tabelle mehr als zehn Millionen Datensätze enthält oder das QPS einer einzelnen Datenbank ihren Flaschenhals erreicht, sollte eine Sharding-Strategie in Betracht gezogen werden.

StrategieVorgehenVorteileNachteile
Vertikale DatenbankaufspaltungDatenbanken nach Geschäftsdomäne aufteilenGeschäftsentkopplung, unabhängige SkalierungDatenbankübergreifende JOINs schwierig
Horizontale TabellenaufspaltungGleiche Tabelle nach Regel in mehrere aufteilenDatenmenge pro Tabelle kontrollierbarWahl des Shard-Schlüssels kritisch
Vertikale TabellenaufspaltungGroße Felder in separate Tabelle auslagernWeniger I/O, höhere AbfrageleistungZusätzliche JOINs erforderlich

Prinzipien der Shard-Schlüsselwahl:

  • Das am häufigsten abgefragte Feld wählen (z. B. user_id)
  • Gleichmäßige Datenverteilung sicherstellen, Hot-Spots vermeiden
  • Daten desselben Benutzers möglichst im selben Shard (shardübergreifende Abfragen reduzieren)

3.3 Nachrichtenwarteschlangen

Nachrichtenwarteschlangen sind die „Stoßdämpfer" verteilter Systeme. Ihre Kernfunktionen sind Entkopplung, Asynchronität und Lastspitzenabflachung.

SzenarioOhne WarteschlangeMit Warteschlange
Benachrichtigung nach BestellungBestell-API ruft synchron den Benachrichtigungsdienst auf; Benachrichtigungsfehler führt zu BestellfehlerNach erfolgreicher Bestellung Nachricht senden; Benachrichtigungsdienst verarbeitet asynchron
Flash-SaleSpontaner Traffic überlastet die DatenbankAnfragen zuerst in die Warteschlange; Backend verarbeitet nach Kapazität
DatensynchronisationService A ruft direkt die API von Service B aufService A sendet Ereignis; Service B abonniert und verarbeitet

4. Abwägungsdenken: Es gibt keine Silberkugel

Die Essenz des Architekturdesigns ist der Trade-off (Abwägung). Jede Entscheidung hat ihren Preis. Der Schlüssel liegt darin, die Kosten zu verstehen und die für die aktuelle Phase passende Wahl zu treffen.

AbwägungsdimensionOption AOption BEntscheidungsgrundlage
Konsistenz vs. VerfügbarkeitStark konsistent (CP)Hoch verfügbar (AP)Kann das Geschäft kurzfristige Inkonsistenz tolerieren?
Leistung vs. KostenVollständiges CachingBedarfsgesteuertes CachingDatenmenge und Budget
Einfachheit vs. FlexibilitätMonolithische ArchitekturMicroservicesTeamgröße und Geschäftskomplexität
Echtzeit vs. BatchStream-VerarbeitungBatch-VerarbeitungAnforderungen an Datenaktualität
Self-Hosted vs. ManagedEigenes MySQLCloud-Datenbank RDSBetriebsfähigkeiten und Kosten

Architecture Decision Records (ADR)

Jede wichtige Architekturentscheidung sollte dokumentiert werden: Was war der Hintergrund, welche Optionen wurden erwogen, warum wurde diese gewählt, welche Kosten entstehen. Dies dient nicht der Schuldzuweisung, sondern ermöglicht es späteren Teams zu verstehen, „warum damals so entschieden wurde".

Das Format ist einfach:

  • Titel: XXX durch YYY ersetzen
  • Hintergrund: Welches Problem lag vor
  • Entscheidung: Welche Option wurde gewählt
  • Begründung: Warum diese Option
  • Kosten: Nachteile und Risiken dieser Entscheidung

Häufige Abwägungsfehler

FehlerAusprägungRichtige Vorgehensweise
Frühzeitige OptimierungBei 1.000 DAU bereits Sharding betreibenZuerst Einzel-DB nutzen; bei Engpässen aufspalten
Technologiegetrieben„Ich will Kafka nutzen" statt „Ich brauche Asynchronität"Vom Problem ausgehen, nicht von der Technologie
Betriebskosten ignorierenOptimale Lösung gewählt, aber Team kann sie nicht wartenLösung muss zur Teamfähigkeiten passen
Perfekte Konsistenz erzwingenVerteilte Transaktionen in allen SzenarienEventuale Konsistenz reicht für die meisten Szenarien

5. Klassische Fälle

Drei klassische Fälle, die die zuvor gelernte Methodik verknüpfen.

5.1 URL-Shortener (TinyURL)

Der URL-Shortener ist eine klassische Systemdesign-Aufgabe — klein, aber mit allen wichtigen Aspekten.

Anforderungsklärung:

  • Kernfunktion: Lange URL → kurze URL (Schreiben), kurze URL → Weiterleitung (Lesen)
  • Lese-/Schreibverhältnis: ca. 100:1 (Lesen deutlich mehr als Schreiben)
  • Tägliche Weiterleitungen: 100 Millionen
  • Kurze URLs verfallen nie

Kapazitätsschätzung:

MetrikBerechnungErgebnis
Schreib-QPS100 Mio. / 100 / 86.400≈ 12 QPS
Lese-QPS100 Mio. / 86.400≈ 1.200 QPS
Spitzen-Lese-QPS1.200 × 3≈ 3.600 QPS
5 Jahre Speicher1 Mio./Tag × 365 × 5 × 100 B≈ 18 GB
Cache (20 %)18 GB × 20 %≈ 3,6 GB

Architekturdesign:

Schreibpfad: Client → API Server → ID-Generator → Base62-Kodierung → MySQL + Redis schreiben
Lesepfad: Client → CDN → API Server → Redis-Abfrage → 302-Weiterleitung
                                   ↓ (Cache Miss)
                                 MySQL-Abfrage → Redis befüllen

Schlüsseldesignentscheidungen:

  • Kurzcode-Generierung: Snowflake verteilte ID + Base62-Kodierung, vermeidet Hash-Kollisionen
  • Caching-Strategie: Cache-Aside, Hot-Spot-URLs über CDN beschleunigt
  • Datenbank: Einzelne Tabelle ausreichend (18 GB ist klein), Index auf Kurzcode

5.2 Feed-Stream-System

Der Feed-Stream sozialer Plattformen (Momente, Startseite von Sozials) ist eine weitere klassische Aufgabe.

Zentrale Herausforderung: Ein Nutzer veröffentlicht einen Beitrag — wie sehen ihn alle Follower?

AnsatzVorgehenVorteileNachteile
Pull-ModellBeim Lesen Echtzeit-Aggregation der Beiträge der GefolgtenEinfaches Schreiben, weniger SpeicherLangsames Lesen, hohe Latenz bei vielen Abonnements
Push-ModellBeim Veröffentlichen in alle Follower-Postfächer geschriebenSehr schnelles LesenStarke Schreibverteilung bei großen Accounts
Push-Pull-HybridNormale Nutzer Push, große Accounts PullBalance zwischen Lese- und SchreibleistungKomplexe Implementierung

Push-Pull-Hybrid-Ansatz:

  • Follower < 10.000: Beim Veröffentlichen in alle Follower-Feed-Caches pushen (Push-Modell)
  • Follower > 10.000: Kein Push; Follower lesen Echtzeit-Pull (Pull-Modell)
  • Beim Öffnen des Feeds: Push-Inhalte + Echtzeit-Pull großer Accounts zusammenführen und chronologisch sortieren

5.3 Flash-Sale-System

Die zentrale Herausforderung bei Flash-Sales: extrem hohe gleichzeitige Zugriffe + Bestand darf nicht überverkauft werden.

Traffic-Charakteristik:

  • Vor Aktionsbeginn: Viele Nutzer aktualisieren die Seite und warten
  • Bei Aktionsbeginn: QPS kann 100x über dem Normalwert liegen
  • Nach Aktionsende: Traffic fällt schnell ab

Mehrstufige Lastspitzenabflachung:

Nutzer-Anfrage → CDN (statische Seiten) → Gateway (Rate Limiting) → Nachrichtenwarteschlange (Peak Shaving) → Bestands-Service (Abzug)
StufeStrategieWirkung
FrontendButton deaktivieren + zufällige Verzögerung + CAPTCHABots filtern, Anfragen streuen
CDNStatische Ressourcen cachen90 % der Seitenanfragen reduzieren
GatewayToken-Bucket Rate LimitingNur Traffic durchlassen, den das System bewältigen kann
NachrichtenwarteschlangeAnfragen einreihen, asynchron verarbeitenPeak Shaving, Datenbank schützen
Bestands-ServiceRedis-Vorabzug + Lua-AtomoperationenÜberverkauf verhindern, Antwort im Millisekundenbereich

Kernprinzipien von Flash-Sales

  1. Möglichst upstream filtern: Was am CDN abgefangen werden kann, sollte nicht zur Anwendungsschicht gelangen
  2. Lesen/Schreiben trennen: Produktdetailseite über Cache, nur die Bestellung geht über die Datenbank
  3. Asynchrone Verarbeitung: Nach dem Klick auf „Kaufen" sofort „In der Warteschlange" zurückgeben; Hintergrund verarbeitet asynchron
  4. Fallback-Pläne: Rate Limiting, Circuit Breaker, Degradation — für jede Stufe gibt es einen Plan B

Zusammenfassung

Systemdesign ist eine sehr praxisorientierte Fähigkeit. Der Kern liegt im strukturierten Denken und im Treffen von Abwägungen.

Rückblick auf die wichtigsten Punkte dieses Kapitels:

  1. Vier-Schritte-Rahmen: Anforderungsklärung → Kapazitätsschätzung → Architekturentwurf → vertiefende Optimierung — kein Schritt darf übersprungen werden
  2. Umschlag-Rückseite-Schätzung: Keine Präzision nötig, nur die Größenordnung muss bekannt sein, um Architekturentscheidungen zu leiten
  3. Kernmuster: Caching, Sharding, Nachrichtenwarteschlangen, CDN, Rate Limiting/Circuit Breaker — dies sind die „Bausteine" des Systemdesigns
  4. Abwägungsdenken: Es gibt keine perfekte Lösung, nur die für die aktuelle Phase passende — den Grund und die Kosten jeder Entscheidung dokumentieren
  5. Klassische Fälle: URL-Shortener für Grundlagen, Feed-Stream für Push-Pull-Modelle, Flash-Sale für hohe Nebenläufigkeit — wer diese drei beherrscht, kann vieles ableiten

Weiterführende Literatur