System Design · Modul 9: Fallstudien

Lektion 2 von 7Übung 18 Min.

Fallstudie: Chat-Anwendung

Lernziele
  • ein System mit vielen dauerhaften Verbindungen entwerfen
  • Zustellung, Reihenfolge und Zustellstatus zuverlässig gestalten
  • Präsenz, Push-Benachrichtigungen und Offline-Nutzer einplanen
  • Gruppen, Speicherung und Verschlüsselung abwägen

Chat-Anwendungen gehören zu den beliebtesten Entwurfsaufgaben, weil sie viele Themen dieses Kurses verbinden: dauerhafte Verbindungen, Echtzeit-Zustellung über mehrere Server, Reihenfolge und Zustellgarantien, Offline-Nutzer, Push-Benachrichtigungen und große Datenmengen. Gleichzeitig sind die Erwartungen der Nutzer hoch – eine Nachricht, die nicht sofort ankommt oder doppelt erscheint, fällt sofort auf. Diese Fallstudie entwirft eine Chat-Anwendung für Einzel- und Gruppengespräche, wie sie etwa ein Sportverein, eine Schule oder ein Unternehmen intern einsetzen könnte.

1. Anforderungen2. Überschlag3. API & Daten4. Architektur5. Vertiefung6. Abwägungen

1. Anforderungen

Funktional: Einzel- und Gruppenchats mit bis zu 500 Mitgliedern, Textnachrichten und Bilder, Zustell- und Lesestatus, Online-Anzeige, Push-Benachrichtigungen, Verlauf auf allen Geräten einer Person. Nicht funktional: Nachrichten erscheinen bei Online-Empfängern in unter einer Sekunde, gehen nie verloren, erscheinen in der richtigen Reihenfolge und nicht doppelt. Die Anwendung muss mit wackeligen Mobilverbindungen umgehen. Bewusst ausgeklammert werden zunächst Sprach- und Videoanrufe, die eigene Infrastruktur verlangen.

2. Überschlag

1. Anforderungen2. Überschlag3. API & Daten4. Architektur5. Vertiefung6. Abwägungen
RechnerÜberschlag für eine Chat-Anwendung

40.000

offene Verbindungen

93/s

Nachrichten

2

Verbindungsserver

876 GB

Nachrichten pro Jahr

40.000 gleichzeitige Verbindungen brauchen bei rund 50.000 Verbindungen je Server mindestens 2 Verbindungsserver. Im Schnitt 93 Nachrichten pro Sekunde, in Spitzen ein Vielfaches.

Die Zahlen zeigen, wo die Herausforderung liegt: nicht in der Zahl der Nachrichten, die eine gute Datenbank problemlos schreibt, sondern in der Zahl gleichzeitig offener Verbindungen. Jede Verbindung belegt Speicher und muss am Leben gehalten werden. Deshalb trennt man die Verbindungsserver, die nur Verbindungen halten und Nachrichten durchreichen, von den Diensten, die Nachrichten speichern und verarbeiten.

3. API und Datenmodell

1. Anforderungen2. Überschlag3. API & Daten4. Architektur5. Vertiefung6. Abwägungen

Über die WebSocket-Verbindung laufen wenige Nachrichtentypen: senden, empfangen, Zustellung bestätigen, Tippen anzeigen. Für den Verlauf gibt es eine normale HTTP-Schnittstelle, etwa GET /gespraeche/:id/nachrichten?vor=1234. Das Datenmodell: Gespräche, Mitgliedschaften und Nachrichten. Jede Nachricht erhält vom Server eine fortlaufende Nummer innerhalb ihres Gesprächs – so ist die Reihenfolge eindeutig, auch wenn Uhren von Geräten abweichen. Zusätzlich schickt der Client eine eigene, zufällige Kennung mit, damit ein wiederholtes Senden nach einem Verbindungsabbruch nicht zu einer doppelten Nachricht führt. Zu jeder Mitgliedschaft wird gespeichert, bis zu welcher Nummer gelesen wurde; daraus ergeben sich ungelesene Nachrichten und Lesestatus.

DemoDie Stationen einer Nachricht
Hast du morgen Zeit für einen Kaffee?
Wird gesendet: Die Nachricht liegt lokal in der Warteschlange des Geräts, noch ohne Bestätigung.

4. Architektur

1. Anforderungen2. Überschlag3. API & Daten4. Architektur5. Vertiefung6. Abwägungen
Abb. 2.1Architektur einer Chat-Anwendung
Abb. 2.1: Architektur einer Chat-Anwendung. Architektur einer Chat-Anwendung: Clients halten WebSocket-Verbindungen zu Verbindungsservern. Nachrichten werden im Nachrichtendienst gespeichert und über einen Nachrichtenkanal an die Verbindungsserver der Empfänger verteilt. Offline-Empfänger erhalten Push-Benachrichtigungen. Ein Präsenzdienst verwaltet den Online-Status.
Abb. 2.1Verbindungsserver halten nur Verbindungen. Gespeichert wird im Nachrichtendienst, verteilt über einen gemeinsamen Kanal. Wer offline ist, bekommt eine Push-Benachrichtigung.
Klick-GrafikEine Nachricht an eine Gruppe
AbsenderVerbindung 1NachrichtendienstKanalVerbindung 2PushOnline
Schritt 1/5 · Senden: Der Client schickt die Nachricht mit eigener Kennung und zeigt sie sofort als „wird gesendet“ an.

5. Vertiefung

1. Anforderungen2. Überschlag3. API & Daten4. Architektur5. Vertiefung6. Abwägungen

Wiederverbindung: Mobile Clients verlieren ständig die Verbindung. Beim Wiederverbinden schickt der Client je Gespräch die letzte bekannte Nummer und erhält alles Fehlende. Die Echtzeitverbindung ist damit nur ein Beschleuniger, nie die einzige Quelle. Präsenz: Der Online-Status wird in Redis mit kurzer Lebensdauer gehalten und durch regelmäßige Lebenszeichen der Clients erneuert; er muss nicht perfekt sein, sollte aber das System nicht belasten – bei großen Gruppen zeigt man ihn nur auf Anfrage. Große Gruppen: Eine Nachricht an 500 Mitglieder erzeugt 500 Zustellungen. Deshalb wird pro Gespräch, nicht pro Empfänger verteilt, und Push-Benachrichtigungen werden gebündelt. Bilder: Dateien gehen nicht über die WebSocket-Verbindung, sondern per signierter URL direkt in den Objektspeicher; in der Nachricht steht nur der Verweis.

In einem Chat entscheidet der Server über Reihenfolge und Speicherung – nicht die Uhr des Geräts und nicht die Echtzeitverbindung. Fortlaufende Nummern je Gespräch und Client-Kennungen gegen Duplikate sind das Fundament.

6. Abwägungen

1. Anforderungen2. Überschlag3. API & Daten4. Architektur5. Vertiefung6. Abwägungen
Tab. 2.1Entscheidungen und ihr Preis
EntscheidungGewinnPreis
getrennte Verbindungsserverunabhängig skalierbar, einfache Deploymentszusätzlicher Nachrichtenkanal nötig
Nummer je Gespräch statt globaleindeutige Reihenfolge ohne globalen Engpasskeine Reihenfolge über Gespräche hinweg
Präsenz mit kurzer Lebensdauergeringe LastStatus kann Sekunden hinterherhinken
Ende-zu-Ende-VerschlüsselungServer kann Inhalte nicht lesenkeine serverseitige Suche, aufwendige Schlüsselverwaltung

Die letzte Zeile verdient einen Hinweis. Ende-zu-Ende-Verschlüsselung ist für private Messenger heute Standard und für vertrauliche Kommunikation, etwa in einer Arztpraxis, sehr wünschenswert. Sie verändert aber die Architektur grundlegend: Suche, Moderation und Wiederherstellung auf neuen Geräten müssen anders gelöst werden. Für einen internen Vereins- oder Unternehmenschat genügt oft Transportverschlüsselung mit verschlüsselter Speicherung – die Entscheidung sollte bewusst und dokumentiert fallen.

7. Varianten der Aufgabe

Chat-Anwendungen gibt es in vielen Ausprägungen, und jede verschiebt die Schwerpunkte. Ein Kundenservice-Chat auf der Website eines Onlineshops hat wenige gleichzeitige Gespräche, aber Anforderungen an Zuweisung, Wartezeiten und Übergabe zwischen Beschäftigten im Kundendienst; oft beantwortet zuerst ein KI-Assistent und übergibt bei Bedarf an einen Menschen. Ein Chat in einer Lern-App für Schulklassen braucht Moderation, Meldefunktionen und besonders strenge Datenschutzregeln. Ein Live-Chat zu einem Sportereignis mit Zehntausenden Zuschauern in einem einzigen Raum verlangt ganz andere Techniken: Dort wird nicht jede Nachricht zuverlässig an jeden zugestellt, sondern ausgedünnt und gestreamt, weil niemand Hunderte Nachrichten pro Sekunde lesen kann.

Auch die Frage der Suche verändert den Entwurf. Sollen Nutzer ihren gesamten Verlauf durchsuchen können, braucht es einen Suchindex, der mit jeder neuen Nachricht aktualisiert wird und die Rechte berücksichtigt – niemand darf Treffer aus Gesprächen sehen, an denen er nicht beteiligt ist. Mit Ende-zu-Ende-Verschlüsselung muss diese Suche dagegen auf dem Gerät selbst stattfinden.

8. So präsentieren Sie den Entwurf

Bei einer Chat-Aufgabe erwarten Zuhörer vor allem eine Antwort auf drei Fragen: Wie kommt eine Nachricht zuverlässig an? Wie wird die Reihenfolge sichergestellt? Und was passiert mit Nutzern, die gerade offline sind? Wer diese drei Fragen früh und klar beantwortet, hat den Kern der Aufgabe gelöst. Details wie Präsenz, Tippanzeige oder Lesebestätigungen sind wichtig, aber zweitrangig. Hilfreich ist es, den Weg einer einzelnen Nachricht einmal vollständig durchzuerzählen – vom Tippen auf „Senden“ bis zum Häkchen beim Empfänger – und dabei auf jeder Station zu erklären, was passiert, wenn genau hier etwas schiefgeht. Dieser Blick auf Fehlerfälle unterscheidet einen durchdachten Entwurf von einer bloßen Skizze.

Quellen und weiterführende Literatur
  1. [1]Xu, A. (2020): System Design Interview – An Insider's Guide. Kap. 12: Design a Chat System.
  2. [2]IETF RFC 6455 (2011): The WebSocket Protocol.
  3. [3]Signal Foundation (2016): The Double Ratchet Algorithm. signal.org/docs.
  4. [4]Redis Ltd. (2026): Redis Pub/Sub Documentation.

Stand: September 2026. Kursmaterial der Klarwerk Akademie. Zahlen zu Latenzen und Kosten sind Größenordnungen zur Orientierung, keine Messwerte.

Abschlussquiz

Drei Fragen – dann ist die Lektion geschafft.

Frage 1 von 3

Wer legt die Reihenfolge der Nachrichten in einem Gespräch fest?