Grundlæggende systemdesign for backendudviklere · Lektion

Design af et realtidschatsystem

Gennemgå systemdesignet for en realtidschatapplikation med fokus på forbindelser, meddelelseslevering, lagring og skalering.

Lektion 4 af 413 trin

Design af et realtidschatsystem er en gratis Grundlæggende systemdesign for backendudviklere-lektion på CoddyKit. Dette er lektion 4 af 4. Du kan læse hele lektionen gratis nedenfor — og derefter øve dig praktisk i browseren med en indbygget kodeeditor og en AI-vejleder, der er tilgængelig døgnet rundt. Den er en del af læringsforløbet i Grundlæggende systemdesign for backendudviklere, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Grundlæggende systemdesign for backendudviklere-kurset indeholder 4 lektioner i alt.

Problemet

Design et chatsystem som WhatsApp eller Slack: Brugere sender beskeder, der øjeblikkeligt vises på modtagernes enheder, med historik, onlinestatus og leveringskvitteringer — i en skala med millioner af samtidige brugere.

Krav

Afklar omfanget først:

  • Funktionelle: 1:1- og gruppechat, beskedhistorik, tilstedeværelse samt leverings- og læsekvitteringer
  • Ikke-funktionelle: lav latenstid, høj tilgængelighed, ordnet levering og horisontal skalering

Hvorfor ikke almindelig HTTP

Klassisk HTTP er baseret på forespørgsel-svar — serveren kan ikke skubbe data ud. Polling spilder ressourcer og øger latenstiden. Chat i realtid kræver en vedvarende, tovejs forbindelse.

WebSockets

WebSockets opgraderer en HTTP-forbindelse til en langvarig fuldduplekskanal. Serveren kan skubbe en besked ud, så snart den ankommer. Det er rygraden i chat i realtid.

GET /chat HTTP/1.1
Upgrade: websocket
Connection: Upgrade

# After upgrade: server can push frames anytime

Forbindelsesservere

En flåde af forbindelsesservere holder de åbne WebSockets. Da en afsender og modtager kan være forbundet til forskellige servere, skal du have en måde at dirigere en besked fra den ene server til den anden.

Dirigering mellem servere

Et lager for tilstedeværelse og sessioner (f.eks. Redis) knytter hver bruger til den forbindelsesserver, der holder deres socket. En meddelelsesmægler eller pub/sub videresender beskeder til den rigtige server, så den kan skubbe dem til modtageren.

user_to_server = {
  'alice': 'conn-3',
  'bob': 'conn-7'
}
# alice -> bob: route message to conn-7

Lagring af beskeder

Chat er skriveintensiv og har enorm volumen. Et lager med brede kolonner som Cassandra egner sig til det: partitionér efter samtale-id, og klynge efter tidsstempel, så det er hurtigt at hente den seneste historik i rækkefølge.

PRIMARY KEY ((conversation_id), message_ts)
WITH CLUSTERING ORDER BY (message_ts DESC)

Leveringsgarantier

Brug en indbakkekø pr. bruger og kvitteringer. Markér beskeder som sendt, leveret og læst. Hvis en modtager er offline, sættes beskeden i kø og leveres, når modtageren opretter forbindelse igen; gentagelser plus besked-id'er gør leveringen idempotent.

Rækkefølge

Beskeder skal vises i en konsistent rækkefølge. Tilknyt en monoton sekvens eller et tidsstempel pr. samtale. Klienterne sorterer efter den, så netværkslevering i forkert rækkefølge korrigeres ved visningen.

import time
base = int(time.time() * 1000)
seq = [base, base + 1, base + 2]
print('ordered message ids:', seq)

Gruppechat i stor skala

Gruppebeskeder distribueres til hvert medlem. For små grupper kan du skubbe dem direkte; for store grupper kan du skrive dem én gang til samtalen og lade medlemmerne hente dem, eller distribuere dem asynkront via mægleren for at undgå en skriveeksplosion.

Samlet overblik

Det samlede billede: Klienter holder WebSockets til forbindelsesservere, et lager for tilstedeværelse dirigerer via pub/sub, beskeder gemmes i et lager med brede kolonner, og køer plus kvitteringer håndterer offline-levering og rækkefølge. Hver del skalerer horisontalt.

Hurtigt tjek

Test din forståelse af design af chat i realtid.

Opsamling

Du har designet et chatsystem i realtid:

  • WebSockets giver vedvarende tovejsforbindelser
  • Et lager for tilstedeværelse plus pub/sub dirigerer beskeder mellem forbindelsesservere
  • Et lager med brede kolonner gemmer historik i rækkefølge
  • Køer og kvitteringer håndterer offline-levering; rækkefølge bruger sekvenser pr. samtale
Gratis at komme i gang

Lær Grundlæggende systemdesign for backendudviklere med en AI-underviser — gratis

Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.

Kurser
12
Lektioner
48

Ofte stillede spørgsmål

Er lektionen “Design af et realtidschatsystem” gratis?

Ja — hele teksten til “Design af et realtidschatsystem” kan læses gratis her på nettet. Hvis du vil øve dig interaktivt med en indbygget kodeeditor og en AI-vejleder døgnet rundt og få adgang til resten af Grundlæggende systemdesign for backendudviklere-kurset, skal du opgradere til CoddyKit PRO. Grundlæggende systemdesign for backendudviklere-kurset indeholder 4 lektioner i alt.

Hvad lærer jeg i “Design af et realtidschatsystem”?

Gennemgå systemdesignet for en realtidschatapplikation med fokus på forbindelser, meddelelseslevering, lagring og skalering. Du øver dig i Grundlæggende systemdesign for backendudviklere med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.

Skal jeg have erfaring for at begynde på Grundlæggende systemdesign for backendudviklere?

Der kræves ingen tidligere erfaring. Grundlæggende systemdesign for backendudviklere på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 4 af 4.

Hvor lang tid tager lektionen “Design af et realtidschatsystem”?

De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.

Kan jeg skrive og køre kode i denne Grundlæggende systemdesign for backendudviklere-lektion?

Ja. Alle Grundlæggende systemdesign for backendudviklere-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.

Alle lektioner i dette kursus

  1. Design af en URL-forkorter
  2. Opbygning af et feed til sociale medier
  3. Skalering af en e-handelsplatform
  4. Design af et realtidschatsystem
← Tilbage til Grundlæggende systemdesign for backendudviklere