Een realtime-chatsysteem ontwerpen
Doorloop het systeemontwerp van een realtime-chatapplicatie, met aandacht voor verbindingen, berichtbezorging, opslag en schaalbaarheid.
Een realtime-chatsysteem ontwerpen is een gratis Basiskennis van systeemontwerp voor backendontwikkelaars-les op CoddyKit. Dit is les 4 van 4. Je kunt de volledige les hieronder gratis lezen en daarna in de browser praktisch oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject Basiskennis van systeemontwerp voor backendontwikkelaars. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus Basiskennis van systeemontwerp voor backendontwikkelaars bevat in totaal 4 lessen.
Het probleem
Ontwerp een chatsysteem zoals WhatsApp of Slack: gebruikers sturen berichten die direct op de apparaten van ontvangers verschijnen, met geschiedenis, online aanwezigheid en ontvangstbevestigingen — op een schaal van miljoenen gelijktijdige gebruikers.
Vereisten
Baken eerst het bereik af:
- Functioneel: chat tussen twee personen en in groepen, berichtgeschiedenis, aanwezigheid, ontvangst- en leesbevestigingen
- Niet-functioneel: lage latentie, hoge beschikbaarheid, geordende aflevering, horizontale schaalbaarheid
Waarom geen gewone HTTP?
Klassiek HTTP werkt volgens het verzoek-antwoordmodel — de server kan niets naar de client pushen. Polling verspilt middelen en voegt latentie toe. Realtimechat heeft een persistente, bidirectionele verbinding nodig.
WebSockets
WebSockets upgraden een HTTP-verbinding naar een langdurig, full-duplexkanaal. De server kan een bericht pushen zodra het binnenkomt. Dit vormt de ruggengraat van realtimechat.
GET /chat HTTP/1.1
Upgrade: websocket
Connection: Upgrade
# After upgrade: server can push frames anytimeVerbindingsservers
Een groep verbindingsservers houdt de geopende WebSockets bij. Omdat een afzender en ontvanger met verschillende servers verbonden kunnen zijn, heb je een manier nodig om een bericht van de ene server naar de andere te routeren.
Routeren tussen servers
Een opslag voor aanwezigheid en sessies (bijvoorbeeld Redis) koppelt elke gebruiker aan de verbindingsserver die diens socket beheert. Een berichtenbroker of pub/sub stuurt berichten door naar de juiste server, zodat die ze naar de ontvanger kan pushen.
user_to_server = {
'alice': 'conn-3',
'bob': 'conn-7'
}
# alice -> bob: route message to conn-7Berichten opslaan
Chat is schrijfintensief en heeft een enorm volume. Een wide-column-opslag zoals Cassandra is hiervoor geschikt: partitioneer op gespreks-ID en groepeer op tijdstempel, zodat recente geschiedenis snel en in de juiste volgorde kan worden opgehaald.
PRIMARY KEY ((conversation_id), message_ts)
WITH CLUSTERING ORDER BY (message_ts DESC)Bezorgingsgaranties
Gebruik een inboxwachtrij per gebruiker en bevestigingen. Markeer berichten als verzonden, afgeleverd en gelezen. Als een ontvanger offline is, plaats je het bericht in de wachtrij en lever je het af zodra die opnieuw verbinding maakt; herhalingen plus bericht-ID's houden het idempotent.
Volgorde
Berichten moeten in een consistente volgorde verschijnen. Voeg per gesprek een oplopend volgnummer of tijdstempel toe. Clients sorteren daarop, zodat zelfs berichten die in een andere netwerkvolgorde aankomen bij de weergave worden gecorrigeerd.
import time
base = int(time.time() * 1000)
seq = [base, base + 1, base + 2]
print('ordered message ids:', seq)Groepschat op grote schaal
Groepsberichten worden naar elk lid verspreid. Voor kleine groepen push je rechtstreeks; voor grote groepen schrijf je één keer naar het gesprek en laat je leden de berichten ophalen, of verspreid je ze asynchroon via de broker om een schrijfgolf te voorkomen.
Alles samenbrengen
Het volledige beeld: clients houden WebSockets naar verbindingsservers open, een opslag voor aanwezigheid routeert via pub/sub, berichten worden bewaard in een wide-column-opslag en wachtrijen plus bevestigingen verwerken offline aflevering en volgorde. Elk onderdeel schaalt horizontaal.
Korte toets
Toets je begrip van het ontwerpen van realtimechat.
Samenvatting
Je hebt een realtimechatsysteem ontworpen:
- WebSockets bieden persistente bidirectionele verbindingen
- Een opslag voor aanwezigheid plus pub/sub routeert berichten tussen verbindingsservers
- Een wide-column-opslag bewaart geordende geschiedenis
- Wachtrijen en bevestigingen verwerken offline aflevering; de volgorde gebruikt reeksen per gesprek
Leer Basiskennis van systeemontwerp voor backendontwikkelaars met een AI-tutor — gratis
Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.
- Cursussen
- 12
- Lessen
- 48
Veelgestelde vragen
Is de les “Een realtime-chatsysteem ontwerpen” gratis?
Ja — de volledige tekst van “Een realtime-chatsysteem ontwerpen” kun je hier gratis op het web lezen. Als je interactief wilt oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is, en de rest van de cursus Basiskennis van systeemontwerp voor backendontwikkelaars wilt ontgrendelen, kun je upgraden naar CoddyKit PRO. De cursus Basiskennis van systeemontwerp voor backendontwikkelaars bevat in totaal 4 lessen.
Wat leer ik in “Een realtime-chatsysteem ontwerpen”?
Doorloop het systeemontwerp van een realtime-chatapplicatie, met aandacht voor verbindingen, berichtbezorging, opslag en schaalbaarheid. Je oefent met Basiskennis van systeemontwerp voor backendontwikkelaars door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.
Heb ik ervaring nodig om met Basiskennis van systeemontwerp voor backendontwikkelaars te beginnen?
Ervaring vooraf is niet nodig. Basiskennis van systeemontwerp voor backendontwikkelaars op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 4 van 4.
Hoe lang duurt de les “Een realtime-chatsysteem ontwerpen”?
De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.
Kan ik code schrijven en uitvoeren in deze les over Basiskennis van systeemontwerp voor backendontwikkelaars?
Ja. Elke les over Basiskennis van systeemontwerp voor backendontwikkelaars bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.
Alle lessen in deze cursus
- Een URL-shortener ontwerpen
- Een socialmediafeed bouwen
- Een e-commerceplatform schalen
- Een realtime-chatsysteem ontwerpen