Table of Contents[Ferstopje][Toanje]
WhatsApp is in sosjaal berjochtenprogramma wêrmei brûkers berjochten mei-inoar kinne útwikselje.
Hawwe jo oait betocht hoe't WhatsApp wurket?
Wat binne de begripen dy't har skepping en wurking ûnderstreke?
Dit artikel sil gean oer de basis fan WhatsApp systeem ûntwerp.
Wy sille ek de algemiene arsjitektuer fan WhatsApp trochgean, dy't kin wurde brûkt om elke soart chatsoftware te bouwen.
Dat, sûnder fierdere ado, lit ús it systeemûntwerp fan WhatsApp besjen!
1. Key Requirements
WhatsApp is in heul skalbere technology dy't wurdt brûkt troch in protte minsken oer de hiele wrâld. As resultaat moat it goed ûntworpen wêze om praktysk altyd betrouber en funksjonearjend te wêzen.
As gefolch is it bepalen fan de krityske behoeften fan it systeem kritysk.
Dit binne de minimale easken foar de WhatsApp-messenger:
- Yn steat om ien-op-ien ynteraksjes te fasilitearjen.
- Berjochterkenning en lêst sjoen binne beide mooglik (ferstjoerd, levere en lêzen).
- Tastean ein-oan-ein fersifering en media-stipe (ôfbyldings / fideo's).
Litte wy útfine hoefolle kapasiteit ús nedige tsjinst fereasket.
2. Estimating Kapasiteit
Us doel is om in platfoarm te meitsjen dat in grut bedrach fan ferkear kin behannelje. Stel dat 10 miljard sms per dei ferstjoerd wurde. Wy hawwe:
- Elke dei wurde 10 miljard sms ferstjoerd troch ien miljard minsken.
- By pykferkear (per sekonde) wiene 700,000 minsken aktyf (6X gemiddeld)
- Tidens pykgebrûk wurde 40 miljoen berjochten per sekonde ferstjoerd.
- De gemiddelde lingte fan in berjocht is 160 karakters: 10B * 160 = 1.6TB oan gegevens wurdt elke dei oanmakke.
- Nim tsien jier tsjinst as foarbyld: 10 * 1.6B * 365 PB
- De heule applikaasje sil opboud wurde út mikrotsjinsten, wêrfan elk in spesjalisearre taak sil útfiere. Stel dat it ferstjoeren fan in berjocht 20 millisekonden nimt en dat d'r 100 tagelyk ferbiningen per tsjinner binne. As gefolch, it ferwachte oantal petear tsjinners nedich = (petear berjochten per sekonde Wachttiid) / tagelyk ferbinings per tsjinner = 40M * 20ms / 100 = 8000 tsjinners.
3. Arsjitektuer op hege nivo
Dit systeem is boud op twa kearntsjinsten. Chat tsjinst en oergongstsjinst, bygelyks. De peteartsjinst behannelet al it ferkear dat wurdt generearre troch online berjochten fan brûkers. Tagelyk behannelet de tydlike tsjinst ferkear as de brûker offline is.
As de brûker online is, is de peteartsjinst ferantwurdlik foar it leverjen fan berjochten.
It sil kontrolearje oft de ûntfanger fan it berjocht online is of net; as de ûntfanger online is, sil dizze tsjinst it berjocht fuortendaliks leverje; as de ûntfanger net online is, sil de oergongstsjinst it berjocht nei har stjoere as se online weromkomme.
De oergongstsjinst hâldt in apart opslachgebiet foar it bewarjen fan tydlik tagonklike gegevens oant de offline brûker opnij ferbynt.
Untwerp fan hege nivo's API's
Dizze tsjinst hat twa funksjonearjende API's op heech nivo foar it ferstjoeren en lêzen fan berjochten. It systeem kin wurde ymplementearre mei de REST-arsjitektuer.
Parameters foar it ferstjoeren fan berjochten
Dizze API sil brûkt wurde om berjochten te ferstjoeren tusken twa brûkers.
Parameters fan petear
Dizze API wurdt brûkt om threaded chats te werjaan. Beskôgje dit it earste ding dat jo sjogge as jo WhatsApp iepenje. Wy wolle mar in pear berjochten krije foar ien brûker yn ien API-query. Om dit te behanneljen binne de parameters foar offset en berjochttelling nedich.
Wat binne de funksjes fan funksjes lykas lêst sjoen, single tick, en double tick?
De wichtige rol yn 'e ynset fan dizze tsjinsten is de erkenningstsjinst. Dizze funksjes binne ûntwikkele om't dizze tsjinst trochgiet mei it generearjen en ferifiearjen fan erkenningsantwurden.
- Ien tick: As in berjocht fan brûker A brûker B berikt, stjoert de tsjinner in inkele tikje om te erkennen dat it berjocht ferstjoerd is.
- Dûbele tikje: Neidat it berjocht fan de tsjinner is stjoerd nei brûker B fia de goede ferbining, sil brûker B de ûntfangst fan it berjocht oan de tsjinner erkenne. De tsjinner sil dan brûker A in oare erkenning jaan. As gefolch sil in dûbele tick ferskine.
- Blauwe tik: Brûker B sil in oare erkenning nei de tsjinner stjoere nei it kontrolearjen fan it berjocht. De tsjinner sil dan brûker A in ekstra befêstigingsberjocht stjoere. Dêrnei sil in blauwe tik op it skerm fan brûker A ferskine.
- Lêst sjoen: De hertslagmeganisme is folslein ferantwurdlik foar de lêste sjoen funksje. Elke 5 sekonden wurdt in hertslach oerbrocht nei de tsjinner, dy't de lêste sjoen status fan elke brûker byhâldt yn in tabel dy't maklik tagonklik is foar elke oare brûker.
4. Untwerp fan wichtige funksjes
Persoanlike ynteraksje
Dit is in needsaaklik diel fan 'e Chat tsjinst. In brûker kin gewoan berjochten stjoere nei in oare brûker mei dizze tsjinst. Litte wy ris sjen hoe't dit wurket:
Stel dat Jay mei Aayush kommunisearje wol. Jay is keppele oan in peteartsjinner wêrmei't hy it berjocht ûntfangt. Jay krijt befêstiging fan de peteartsjinner dat it berjocht ferstjoerd is. De peteartsjinner freget no ynformaasje oan by de gegevenswinkel oer de peteartsjinner wêrmei Aayush ferbûn is. De peteartsjinner fan Jay stjoert it berjocht no nei de peteartsjinner fan Aayush, en Aayush ûntfangt it berjocht fia in pushmeganisme. Aayush stjoert no in erkenning nei Jay's peteartsjinner, dy't Jay ynformearret dat it berjocht is levere. As Aayush it berjocht nochris lies, waard in nije erkenning dat it berjocht lêzen wie levere oan Jay.
Status fan brûkersaktiviteit
De lêste kear dat in persoan aktyf wie is in regelmjittich skaaimerk fan instant messengers.
In systeem foar it behâld fan in ferbining tusken de kliïnt en de tsjinner wurdt ôfbylde yn dit diagram. Web-sockets waarden brûkt om in bidirectionele ferbining te meitsjen tusken de tsjinner en de kliïnt. Dizze ferbiningen stjoere hertbeats, dy't wurde brûkt om de aktiviteitstatus fan 'e brûker te kontrolearjen.
End-to-End Privacy
End-to-end fersifering is in kaaifunksje dy't derfoar soarget dat allinich de petearende brûkers de kommunikaasje kinne lêze. In iepenbiere kaai wurdt dield ûnder alle brûkers belutsen by de kommunikaasje en is kritysk foar it ûnderhâlden fan End-to-End fersifering. Stel dat d'r twa brûkers op it kanaal binne, Jay en Aayush, dy't mei-inoar kommunisearje.
Jay hat de iepenbiere kaai fan Aayush, en Aayush hat de iepenbiere kaai fan Jay en ek har net-dielde privee kaai. As gefolch, as Jay it berjocht ferstjoert, fersiferet hy it mei de iepenbiere kaai fan Aayush, dy't allinich kin wurde dekodearre mei de priveekaai fan Aayush.
Likegoed sil Jay allinich de kommunikaasje fan Aayush kinne ûntsiferje. As resultaat sille allinich Jay en Aaysuh inoars kommunikaasje kinne sjen, en de tsjinner sil gewoan funksjonearje as in poarte yn it heule proses.
5. Knelpunten
Elk systeem is gefoelich foar malfunction. Om sa'n grutte folume ferkear te behearjen, moat de tsjinst altyd operasjoneel en fouttolerant bliuwe om knelpunten te foarkommen. Om't ús tsjinst folslein ôfhinklik is fan Chat- en Transient-tsjinners, moatte wy alle problemen oplosse dy't ûntsteane út har operaasje.
Mislearring fan de Chat Server: Dit is it hert fan ús systeem. As brûkers online binne, is it ferantwurdlik foar it behearen en leverjen fan berjochten. As gefolch, dit systeem ûnderhâldt keppelings mei syn brûkers.
As gefolch, as dizze tsjinst mislearret, sil de heule arsjitektuer lije. D'r binne twa oanpakken foar it behearen fan it mislearjen fan 'e peteartsjinner. Ien metoade is om TCP-ferbiningen nei in oare tsjinner te ferskowen, wylst in oare is om brûkers automatysk ferbiningen te begjinnen yn it gefal fan in ferbiningferlies.
Mislearring fan Transient Storage: In oare komponint dy't gefoelich is foar mislearring dy't úteinlik de heule tsjinst kin beskeadigje is transiente opslach. Berjochten ûnderweis nei offline brûkers geane ferlern as dizze tsjinst mislearret.
Wy kinne berjochtferlies foarkomme troch de tydlike opslach fan elke brûker te replikearjen. As resultaat kin de replika brûkt wurde om de funksjes te ferwurkjen as de brûker online weromkomt. As de orizjinele tsjinner tagonklik wurdt, wurde sawol de orizjinele as replika-eksimplaren fan 'e brûker syn oergongske opslach kombinearre yn ien winkel.
6. Optimaliseringstechniken
Latency: Om in naadleaze en ferbettere klantûnderfining te leverjen, moat de messenger-tsjinst real-time wêze. As gefolch moat de latency wurde fermindere troch it cache fan in diel fan 'e faak tagong ta gegevens. Wy kinne de status fan brûkersaktiviteit en resinte petearen yn it ûnthâld cache mei in ferspraat cache lykas Redis.
Beskikberens: Wy hawwe ús tsjinst nedich om it grutste part fan 'e tiid beskikber te wêzen. Us systeem moat flater-tolerant wêze, dus kinne wy ferskate kopyen fan oergongsberjochten hâlde, sadat elk berjocht dat ferlern is gau weromhelle wurde kin fan syn duplikaten. Dêrtroch kin de beskikberens fan it systeem net yn gefaar komme.
Konklúzje
Us systeem stipet no mar in pear mooglikheden, mar wy kinne it maklik útwreidzje om groepchats ta te foegjen om berjochten te fersprieden nei ferskate yndividuen. Jo kinne ek fideo- en telefoanyske mooglikheden leverje. Dit systeem kin ek sa ûntwikkele wurde dat brûkers statusupdates of narrativen kinne publisearje en inoar lêze.
Ik wurke hurd om jo in oersjoch op heech nivo te jaan fan it WhatsApp-systeemûntwerp. Ik hoopje dat jo it genoaten hawwe en it goed brûke sille.
Leave a Reply