Turinys[Slėpti][Rodyti]
WhatsApp yra socialinių pranešimų programa, leidžianti vartotojams keistis žinutėmis vieni su kitais.
Ar kada nors susimąstėte, kaip veikia „WhatsApp“?
Kokios yra jo kūrimo ir veikimo koncepcijos?
Šiame straipsnyje apžvelgsime „WhatsApp“ pagrindus sistemos projektavimas.
Taip pat peržiūrėsime bendrą „WhatsApp“ architektūrą, kurią galima naudoti kuriant bet kokią pokalbių programinę įrangą.
Taigi, nieko nelaukdami, pažvelkime į „WhatsApp“ sistemos dizainą!
1. Pagrindiniai reikalavimai
WhatsApp yra labai keičiamo dydžio technologija, kurią naudoja daugelis žmonių visame pasaulyje. Todėl jis turėtų būti gerai suprojektuotas, kad beveik visada būtų patikimas ir veiktų.
Dėl to labai svarbu nustatyti svarbiausius sistemos poreikius.
Tai yra minimalūs WhatsApp Messenger reikalavimai:
- Galintys palengvinti asmeninę sąveiką.
- Galimi ir pranešimo patvirtinimas, ir paskutinis matytas (išsiųstas, pristatytas ir skaitytas).
- Leisti šifravimą nuo galo iki galo ir medijos palaikymą (vaizdai / vaizdo įrašai).
Sužinokime, kiek pajėgumų reikalauja mūsų reikalinga paslauga.
2. Pajėgumų įvertinimas
Mūsų tikslas – sukurti platformą, galinčią valdyti didelį srautą. Tarkime, kad per dieną išsiunčiama 10 milijardų SMS. Mes turime:
- Kiekvieną dieną milijardas žmonių išsiunčia 10 milijardų SMS.
- Didžiausio srauto metu (per sekundę) 700,000 6 žmonių buvo aktyvūs (XNUMXX vidurkis)
- Didžiausio naudojimo metu per sekundę perduodama 40 milijonų pranešimų.
- Vidutinis pranešimo ilgis yra 160 simbolių: 10B * 160 = 1.6 TB duomenų sugeneruojama kiekvieną dieną.
- Kaip pavyzdį paimkite dešimties metų darbo stažą: 10 * 1.6 B * 365 PB
- Visą programą sudarys mikropaslaugos, kurių kiekviena atliks specializuotą užduotį. Tarkime, kad pranešimo siuntimas užtrunka 20 milisekundžių ir kad viename serveryje yra 100 vienu metu vykstančių ryšių. Dėl to numatomas reikalingų pokalbių serverių skaičius = (pokalbių pranešimai per sekundę, delsa) / vienu metu esantys ryšiai vienam serveriui = 40 mln. * 20 ms / 100 = 8000 serverių.
3. Aukšto lygio architektūra
Ši sistema sukurta remiantis dviem pagrindinėmis paslaugomis. Pavyzdžiui, pokalbių paslauga ir laikinoji paslauga. Pokalbių paslauga tvarko visą srautą, kurį generuoja vartotojų internetiniai pranešimai. Tuo pačiu metu laikinoji paslauga tvarko srautą, kai vartotojas neprisijungęs.
Jei vartotojas yra prisijungęs, pokalbių paslauga yra atsakinga už pranešimų pristatymą.
Jis patikrins, ar pranešimo gavėjas yra prisijungęs, ar ne; jei gavėjas prisijungęs, ši paslauga nedelsdama pristatys pranešimą; jei gavėjas neprisijungęs, pereinamojo laikotarpio tarnyba išsiųs jam pranešimą, kai jie grįš prisijungę.
Laikinoji paslauga turi atskirą saugyklą, skirtą laikinai pasiekiamiems duomenims saugoti, kol neprisijungęs vartotojas vėl prisijungs.
Aukšto lygio API projektavimas
Ši paslauga turi dvi aukšto lygio veikiančias API žinutėms siųsti ir skaityti. Sistema gali būti įdiegta naudojant REST architektūrą.
Parametrai žinučių siuntimui
Ši API bus naudojama pranešimams tarp dviejų vartotojų perduoti.
Pokalbio parametrai
Ši API naudojama srieginiams pokalbiams rodyti. Apsvarstykite tai pirmas dalykas, kurį pamatysite atidarę „WhatsApp“. Vienoje API užklausoje norėtume gauti tik kelis pranešimus vienam vartotojui. Norėdami tai padaryti, reikalingi poslinkio ir pranešimų skaičiaus parametrai.
Kokias funkcijas atlieka funkcijos, pvz., paskutinį kartą matytas, vienkartinis ir dvigubas žymėjimas?
Svarbus vaidmuo diegiant šias paslaugas yra pripažinimo paslauga. Šios funkcijos buvo sukurtos, nes ši paslauga ir toliau generuoja ir tikrina patvirtinimo atsakymus.
- Pavienė erkė: Kai pranešimas iš vartotojo A pasiekia vartotoją B, serveris išsiunčia vieną varnelę, patvirtindamas, kad pranešimas buvo perduotas.
- Dviguba varnelė: po to, kai serverio pranešimas bus išsiųstas vartotojui B per tinkamą ryšį, vartotojas B patvirtins pranešimo gavimą serveriui. Tada serveris pateiks vartotojui A kitą patvirtinimą. Dėl to pasirodys dublikatas.
- mėlynakis: Vartotojas B, patikrinęs pranešimą, serveriui išsiųs dar vieną patvirtinimą. Tada serveris išsiųs vartotojui A papildomą patvirtinimo pranešimą. Po to vartotojo A ekrane pasirodys mėlyna varnelė.
- Paskutinį kartą matytas: Širdies plakimo mechanizmas yra visiškai atsakingas už paskutinę matytą funkciją. Kas 5 sekundes širdies plakimas perduodamas serveriui, kuris seka kiekvieno vartotojo paskutinį kartą matytą būseną lentelėje, kurią gali lengvai pasiekti bet kuris kitas vartotojas.
4. Pagrindinių savybių projektavimas
Personalizuota sąveika
Tai būtina pokalbių paslaugos dalis. Vartotojas, naudodamasis šia paslauga, gali tiesiog siųsti pranešimus kitam vartotojui. Pažiūrėkime, kaip tai veikia:
Tarkime, Jay nori bendrauti su Aayush. Jay yra susietas su pokalbių serveriu, su kuriuo jis gauna pranešimą. Jay gauna patvirtinimą iš pokalbių serverio, kad pranešimas buvo išsiųstas. Pokalbių serveris dabar prašo informacijos iš duomenų saugyklos apie pokalbių serverį, prie kurio prijungtas Aayush. Jay pokalbių serveris dabar perduoda pranešimą į Aayush pokalbių serverį, o Aayush gauna pranešimą per stūmimo mechanizmą. Aayush dabar siunčia patvirtinimą Jay pokalbių serveriui, kuris praneša Jay, kad pranešimas buvo pristatytas. Jei Aayush dar kartą perskaitė pranešimą, Jay buvo pristatytas naujas patvirtinimas, kad pranešimas buvo perskaitytas.
Vartotojo veiklos būsena
Paskutinį kartą, kai asmuo buvo aktyvus, yra įprasta momentinių pasiuntinių funkcija.
Šioje diagramoje pavaizduota ryšio tarp kliento ir serverio palaikymo sistema. Žiniatinklio lizdai buvo naudojami dvikrypčiui ryšiui tarp serverio ir kliento užmegzti. Šie ryšiai siunčia širdies plakimus, kurie naudojami vartotojo veiklos būsenai stebėti.
Visiškas privatumas
Šifravimas nuo galo iki galo yra pagrindinė funkcija, užtikrinanti, kad tik besikalbantys vartotojai galėtų skaityti pranešimus. Viešasis raktas yra dalijamas visiems vartotojams, dalyvaujantiems komunikacijoje, ir yra labai svarbus siekiant išlaikyti šifravimą nuo galo iki galo. Tarkime, kad kanale yra du vartotojai, Jay ir Aayush, kurie bendrauja tarpusavyje.
Jay turi Aayush viešąjį raktą, o Aayush turi Jay viešąjį raktą ir jų nebendrinamą privatųjį raktą. Dėl to, kai Jay perduoda pranešimą, jis užšifruoja jį viešuoju Aayush raktu, kurį galima iššifruoti tik privačiu Aayush raktu.
Panašiai Jay galės tik iššifruoti Aayush bendravimą. Dėl to tik Jay ir Aaysuh galės matyti vienas kito ryšius, o serveris viso proceso metu veiks tik kaip vartai.
5. Kliūtys
Kiekviena sistema yra linkusi į gedimus. Kad būtų galima valdyti tokį didelį srautą, paslauga turi nuolat veikti ir būti atspari gedimams, kad būtų išvengta kliūčių. Kadangi mūsų paslauga visiškai priklauso nuo pokalbių ir pereinamųjų serverių, turime išspręsti visas problemas, kylančias dėl jų veikimo.
Pokalbių serverio gedimas: Tai yra mūsų sistemos širdis. Kai vartotojai yra prisijungę, jis yra atsakingas už pranešimų tvarkymą ir pristatymą. Dėl to ši sistema palaiko ryšius su savo vartotojais.
Dėl to, jei ši paslauga nepavyks, nukentės visa architektūra. Yra du pokalbių serverio gedimo valdymo būdai. Vienas iš būdų yra perkelti TCP ryšius į kitą serverį, o kitas – leisti vartotojams automatiškai pradėti ryšius nutrūkus ryšiui.
Laikinojo saugojimo gedimas: Kitas komponentas, kuris gali sugesti ir galiausiai gali sugadinti visą paslaugą, yra laikina saugykla. Jei ši paslauga nepavyksta, pranešimai pakeliui neprisijungusiems naudotojams prarandami.
Galime užkirsti kelią pranešimų praradimui pakartodami kiekvieno vartotojo laikinąją saugyklą. Dėl to replika gali būti naudojama funkcijoms apdoroti, kai vartotojas grįžta į internetą. Jei pradinis serveris tampa pasiekiamas, vartotojo laikinosios saugyklos originalas ir kopija sujungiami į vieną saugyklą.
6. Optimizavimo būdai
Uždelsimas: norint teikti sklandžią ir geresnę klientų patirtį, pranešimų siuntimo paslauga turi būti teikiama realiuoju laiku. Dėl to delsa turi būti sumažinta, talpinant dalį dažnai pasiekiamų duomenų. Galime talpykloje išsaugoti vartotojo veiklos būseną ir naujausius pokalbius atmintyje naudodami paskirstytą talpyklą, pvz., Redis.
Prieinamumas: Mums reikia, kad mūsų paslauga būtų pasiekiama didžiąją laiko dalį. Mūsų sistema turi būti atspari gedimams, todėl galime pasilikti kelias laikinųjų pranešimų kopijas, kad bet koks prarastas pranešimas būtų greitai atkurtas iš jo dublikatų. Dėl to negali kilti pavojus sistemos prieinamumui.
Išvada
Mūsų sistema dabar palaiko tik keletą galimybių, tačiau galime lengvai ją išplėsti, kad įtrauktume grupinius pokalbius, kad galėtume platinti pranešimus keliems asmenims. Taip pat galite suteikti vaizdo ir telefono skambučių galimybes. Šią sistemą taip pat galima sukurti taip, kad vartotojai galėtų skelbti būsenos atnaujinimus ar pasakojimus ir skaityti vieni kitus.
Sunkiai dirbau, kad pateikčiau jums aukšto lygio WhatsApp sistemos dizaino apžvalgą. Tikiuosi, kad jums patiko ir naudosite.
Palikti atsakymą