Innholdsfortegnelse[Gjemme seg][Forestilling]
WhatsApp er et sosialt meldingsprogram som lar brukere utveksle meldinger med hverandre.
Har du noen gang vurdert hvordan WhatsApp fungerer?
Hva er konseptene som underbygger opprettelsen og driften?
Denne artikkelen vil gå over det grunnleggende om WhatsApp system design.
Vi vil også gå gjennom WhatsApps generelle arkitektur, som kan brukes til å bygge alle slags chat-programvare.
Så, uten videre, la oss ta en titt på WhatsApps systemdesign!
1. Nøkkelkrav
WhatsApp er en svært skalerbar teknologi som brukes av mange mennesker over hele verden. Som et resultat bør den være godt utformet for å være praktisk talt alltid pålitelig og fungerende.
Som et resultat er det avgjørende å bestemme systemets kritiske behov.
Dette er minimumskravene for WhatsApp Messenger:
- Kan legge til rette for en-til-en interaksjoner.
- Meldingsbekreftelse og sist sett er begge mulige (Sendt, Levert og Lest).
- Tillat ende-til-ende-kryptering og mediestøtte (bilder/videoer).
La oss finne ut hvor mye kapasitet vår nødvendige tjeneste krever.
2. Anslå kapasitet
Vårt mål er å skape en plattform som kan håndtere store mengder trafikk. Anta at det sendes 10 milliarder SMS per dag. Vi har fått:
- Hver dag sendes 10 milliarder SMS fra én milliard mennesker.
- Ved topptrafikk (per sekund) var 700,000 6 personer aktive (XNUMXX gjennomsnittet)
- Ved høy bruk sendes det 40 millioner meldinger per sekund.
- Gjennomsnittlig lengde på en melding er 160 tegn: 10B * 160 = 1.6 TB med data genereres hver dag.
- Ta ti års tjeneste som et eksempel: 10 * 1.6B * 365 PB
- Hele applikasjonen vil bestå av mikrotjenester, som hver vil utføre en spesialisert oppgave. Anta at det tar 20 millisekunder å sende en melding og at det er 100 samtidige tilkoblinger per server. Som et resultat er det forventede antallet chat-servere som kreves = (chatmeldinger per sekund Latency)/ samtidige tilkoblinger per server = 40M * 20ms / 100 = 8000 servere.
3. Arkitektur på høyt nivå
Dette systemet er bygget på to kjernetjenester. Chat-tjeneste og midlertidig tjeneste, for eksempel. Chat-tjenesten håndterer all trafikk som genereres av brukernes nettbaserte meldinger. Samtidig håndterer den midlertidige tjenesten trafikk når brukeren er frakoblet.
Hvis brukeren er på nett, er det chattjenesten som har ansvaret for å levere meldinger.
Den vil bekrefte om mottakeren av meldingen er online eller ikke; hvis mottakeren er online, vil denne tjenesten levere meldingen umiddelbart; hvis mottakeren ikke er tilkoblet, vil overgangstjenesten sende meldingen til dem når de kommer tilbake på nettet.
Den midlertidige tjenesten holder et eget lagringsområde for å holde midlertidig tilgjengelige data til den frakoblede brukeren kobler seg til igjen.
Utforming av APIer på høyt nivå
Denne tjenesten har to funksjonelle API-er på høyt nivå for sending og lesing av meldinger. Systemet kan implementeres ved hjelp av REST-arkitekturen.
Parametere for å sende meldinger
Denne API-en vil bli brukt til å overføre meldinger mellom to brukere.
Parametre for samtale
Denne API-en brukes til å vise trådede chatter. Vurder dette som det første du ser når du åpner WhatsApp. Vi ønsker bare å få noen få meldinger for én bruker i en enkelt API-spørring. For å håndtere dette er parameterne for offset og meldingstelling nødvendig.
Hva er funksjonene til funksjoner som sist sett, enkeltmerking og dobbeltmerking?
Den viktige rollen i distribusjonen av disse tjenestene er bekreftelsestjenesten. Disse funksjonene ble utviklet siden denne tjenesten fortsetter å generere og bekrefte bekreftelsessvar.
- Enkelt flått: Når en melding fra bruker A når bruker B, sender serveren en enkelt hake som bekrefter at meldingen er overført.
- Dobbelthake: Etter at serverens melding er sendt til bruker B gjennom riktig tilkobling, vil bruker B bekrefte mottak av meldingen til serveren. Serveren vil da gi bruker A en ny bekreftelse. Som et resultat vil en duplikathake vises.
- Blå hake: Bruker B vil sende en ny bekreftelse til serveren etter å ha sjekket meldingen. Serveren vil da sende bruker A en ekstra bekreftelsesmelding. En blå hake vil vises på bruker A sin skjerm etter det.
- Sist sett: Hjerteslagmekanismen er helt og holdent ansvarlig for den sist sett funksjonen. Hvert 5. sekund sendes et hjerteslag til serveren, som holder styr på hver brukers sist sett status i en tabell som lett kan nås av alle andre brukere.
4. Designe nøkkelfunksjoner
Personlig samhandling
Dette er en nødvendig del av Chat-tjenesten. En bruker kan ganske enkelt sende meldinger til en annen bruker ved å bruke denne tjenesten. La oss ta en titt på hvordan dette fungerer:
Anta at Jay ønsker å kommunisere med Aayush. Jay er knyttet til en chat-server som han mottar meldingen med. Jay mottar bekreftelse fra chat-serveren på at meldingen ble sendt. Chat-serveren ber nå om informasjon fra datalageret om chat-serveren som Aayush er koblet til. Jays chat-server sender nå meldingen til Aayush sin chat-server, og Aayush mottar meldingen via en push-mekanisme. Aayush sender nå en bekreftelse til Jays chat-server, som varsler Jay om at meldingen er levert. Hvis Aayush leste meldingen igjen, ble en ny bekreftelse på at meldingen var lest levert til Jay.
Status for brukeraktivitet
Sist gang en person var aktiv, er et vanlig trekk ved instant messengers.
Et system for å opprettholde en forbindelse mellom klienten og serveren er avbildet i dette diagrammet. Web-sockets ble brukt for å etablere en toveis forbindelse mellom serveren og klienten. Disse forbindelsene sender hjerteslag, som brukes til å overvåke brukerens aktivitetsstatus.
End-to-end personvern
End-to-end-kryptering er en nøkkelfunksjon som sikrer at bare de samtalende brukerne kan lese kommunikasjonen. En offentlig nøkkel deles mellom alle brukere som er involvert i kommunikasjonen og er avgjørende for å opprettholde ende-til-ende-kryptering. Anta at det er to brukere på kanalen, Jay og Aayush, som kommuniserer med hverandre.
Jay har Aayushs offentlige nøkkel, og Aayush har Jays offentlige nøkkel så vel som deres ikke-delte private nøkkel. Som et resultat, når Jay overfører meldingen, krypterer han den med Aayushs offentlige nøkkel, som bare kan dekodes med Aayushs private nøkkel.
Tilsvarende vil Jay bare være i stand til å dekode Aayushs kommunikasjon. Som et resultat vil bare Jay og Aaysuh kunne se hverandres kommunikasjon, og serveren vil bare fungere som en gateway i hele prosessen.
5. Flaskehalser
Hvert system er utsatt for funksjonsfeil. For å håndtere et så stort trafikkvolum må tjenesten til enhver tid være operativ og feiltolerant for å unngå flaskehalser. Fordi tjenesten vår er helt avhengig av Chat og Transient-servere, må vi løse alle problemene som oppstår ved driften av dem.
Feil på chat-serveren: Dette er hjertet i systemet vårt. Når brukere er online, er det ansvarlig for å administrere og levere meldinger. Som et resultat opprettholder dette systemet koblinger med brukerne.
Som et resultat, hvis denne tjenesten mislykkes, vil hele arkitekturen lide. Det er to tilnærminger til å håndtere feilen på chat-serveren. En metode er å flytte TCP-tilkoblinger til en annen server, mens en annen er å la brukere starte tilkoblinger automatisk i tilfelle tilkobling taps.
Feil ved forbigående lagring: En annen komponent som er utsatt for feil som til slutt kan skade hele tjenesten er forbigående lagring. Meldinger på vei til frakoblede brukere går tapt hvis denne tjenesten mislykkes.
Vi kan forhindre tap av meldinger ved å replikere hver brukers midlertidige lagring. Som et resultat kan replikaen brukes til å behandle funksjonene hver gang brukeren kommer tilbake online. Hvis den opprinnelige serveren blir tilgjengelig, kombineres både den originale og replika-forekomsten av brukerens midlertidige lagring til en enkelt butikk.
6. Optimaliseringsteknikker
Ventetid: For å levere en sømløs og forbedret kundeopplevelse, må messenger-tjenesten være sanntid. Som et resultat må ventetiden reduseres ved å bufre deler av dataene du ofte får tilgang til. Vi kan cache brukeraktivitetsstatus og nylige samtaler i minnet ved å bruke en distribuert cache som Redis.
Tilgjengelighet: Vi trenger at tjenesten vår er tilgjengelig mesteparten av tiden. Systemet vårt må være feiltolerant, og derfor kan vi beholde flere kopier av midlertidige meldinger slik at enhver melding som går tapt raskt kan gjenopprettes fra duplikatene. Som et resultat kan systemets tilgjengelighet ikke settes i fare.
konklusjonen
Systemet vårt støtter nå bare noen få funksjoner, men vi kan enkelt utvide det for å legge til gruppechatter for å distribuere meldinger til flere individer. Du kan også tilby video- og telefonsamtaler. Dette systemet kan også utvikles slik at brukere kan publisere statusoppdateringer eller fortellinger og lese hverandre.
Jeg jobbet hardt for å gi deg en oversikt på høyt nivå over WhatsApp-systemdesignet. Jeg håper du likte den og vil bruke den godt.
Legg igjen en kommentar