Pregled sadržaja[Sakriti][Pokazati]
WhatsApp je program za razmjenu društvenih poruka koji korisnicima omogućuje razmjenu poruka jedni s drugima.
Jeste li ikada razmišljali kako WhatsApp funkcionira?
Koji su koncepti koji podupiru njegovo stvaranje i djelovanje?
Ovaj članak govori o osnovama WhatsAppa dizajn sustava.
Također ćemo proći kroz opću arhitekturu WhatsAppa, koja se može koristiti za izgradnju bilo koje vrste softvera za chat.
Dakle, bez daljnjeg, pogledajmo dizajn sustava WhatsApp!
1. Ključni zahtjevi
WhatsApp je vrlo skalabilna tehnologija koju koriste mnogi ljudi diljem svijeta. Kao rezultat toga, trebao bi biti dobro dizajniran kako bi praktički uvijek bio pouzdan i funkcionalan.
Kao rezultat toga, određivanje kritičnih potreba sustava je kritično.
Ovo su minimalni zahtjevi za WhatsApp messenger:
- Sposoban za olakšavanje interakcije jedan na jedan.
- Moguće su i potvrda poruke i posljednji put viđen (poslano, dostavljeno i pročitano).
- Dopustite end-to-end enkripciju i medijsku podršku (slike/videozapisi).
Doznajmo koliki kapacitet zahtijeva naša potrebna usluga.
2. Procjena kapaciteta
Naš cilj je stvoriti platformu sposobnu podnijeti veliku količinu prometa. Pretpostavimo da se dnevno pošalje 10 milijardi SMS-ova. Imamo:
- Svaki dan milijarda ljudi pošalje 10 milijardi SMS-a.
- Na vrhuncu prometa (u sekundi) bilo je aktivno 700,000 ljudi (6X prosjek)
- Tijekom vršne upotrebe prenosi se 40 milijuna poruka u sekundi.
- Prosječna duljina poruke je 160 znakova: 10B * 160 = 1.6TB podataka generira se svaki dan.
- Uzmite deset godina radnog staža kao primjer: 10 * 1.6B * 365 PB
- Cijela će aplikacija biti sastavljena od mikroservisa, od kojih će svaka izvršavati specijalizirani zadatak. Pretpostavimo da slanje poruke traje 20 milisekundi i da postoji 100 istodobnih veza po poslužitelju. Kao rezultat, predviđeni broj potrebnih poslužitelja za chat = (kašnjenje poruka u sekundi)/ istodobne veze po poslužitelju = 40M * 20ms / 100 = 8000 poslužitelja.
3. Arhitektura visoke razine
Ovaj je sustav izgrađen na dvije osnovne usluge. Chat usluga i prolazna usluga, na primjer. Usluga chata obrađuje sav promet koji generiraju korisničke online poruke. Istovremeno, privremena usluga upravlja prometom kada je korisnik izvan mreže.
Ako je korisnik online, za isporuku poruka zadužena je chat usluga.
Provjerit će je li primatelj poruke online ili ne; ako je primatelj online, ova će usluga odmah isporučiti poruku; ako primatelj nije online, prolazna usluga će mu poslati poruku kada se vrati online.
Prolazna usluga čuva zasebno područje za pohranu za čuvanje privremeno dostupnih podataka dok se izvanmrežni korisnik ponovno ne poveže.
Dizajniranje API-ja visoke razine
Ova usluga ima dva funkcionalna API-ja visoke razine za slanje i čitanje poruka. Sustav se može implementirati pomoću REST arhitekture.
Parametri za slanje poruka
Ovaj API će se koristiti za prijenos poruka između dva korisnika.
Parametri razgovora
Ovaj API se koristi za prikaz chatova s nitima. Smatrajte da je ovo prva stvar koju vidite kada otvorite WhatsApp. Željeli bismo dobiti samo nekoliko poruka za jednog korisnika u jednom API upitu. Da biste to riješili, potrebni su parametri odstupanja i broja poruka.
Koje su funkcije značajki kao što su zadnje viđenje, jednostruka kvačica i dvostruka kvačica?
Važna uloga u implementaciji ovih usluga je usluga potvrde. Ove su značajke razvijene jer ova usluga nastavlja generirati i provjeravati odgovore na potvrdu.
- Jedan krpelj: Kada poruka od korisnika A stigne do korisnika B, poslužitelj šalje jednu kvačicu potvrđujući da je poruka poslana.
- Dvostruka kvačica: Nakon što je poruka poslužitelja poslana korisniku B putem odgovarajuće veze, korisnik B će potvrditi primitak poruke poslužitelju. Poslužitelj će tada korisniku A dati još jednu potvrdu. Kao rezultat, pojavit će se duplikat kvačice.
- Plava krpelja: Korisnik B će poslati još jednu potvrdu poslužitelju nakon provjere poruke. Poslužitelj će zatim poslati korisniku A dodatnu poruku potvrde. Nakon toga na ekranu korisnika A pojavit će se plava kvačica.
- Zadnji put viđen: Mehanizam otkucaja srca u potpunosti je odgovoran za posljednju viđenu značajku. Svakih 5 sekundi, otkucaj srca se prenosi na poslužitelj, koji prati posljednji viđeni status svakog korisnika u tablici kojoj svaki drugi korisnik može lako pristupiti.
4. Projektiranje ključnih značajki
Personalizirana interakcija
Ovo je neophodan dio usluge Chat. Korisnik može jednostavno slati poruke drugom korisniku koristeći ovu uslugu. Pogledajmo kako ovo funkcionira:
Pretpostavimo da Jay želi komunicirati s Aayushom. Jay je povezan s poslužiteljem za razgovor s kojim prima poruku. Jay prima potvrdu od poslužitelja za razgovor da je poruka poslana. Poslužitelj za čavrljanje sada traži informacije iz pohrane podataka o chat poslužitelju na koji je Aayush povezan. Jayev poslužitelj za čavrljanje sada šalje poruku Aayushovom chat poslužitelju, a Aayush prima poruku putem push mehanizma. Aayush sada šalje potvrdu Jayevom poslužitelju za razgovor, koji obavještava Jaya da je poruka isporučena. Ako je Aayush ponovno pročitao poruku, Jayu je dostavljena nova potvrda da je poruka pročitana.
Status aktivnosti korisnika
Zadnji put kada je osoba bila aktivna uobičajena je značajka instant messengera.
Sustav za održavanje veze između klijenta i poslužitelja prikazan je na ovom dijagramu. Web utičnice su korištene za uspostavljanje dvosmjerne veze između poslužitelja i klijenta. Ove veze šalju otkucaje srca, koji se koriste za praćenje statusa aktivnosti korisnika.
Privatnost od kraja do kraja
Enkripcija od kraja do kraja ključna je značajka koja osigurava da samo korisnici koji razgovaraju mogu čitati komunikaciju. Javni ključ se dijeli među svim korisnicima uključenim u komunikaciju i ključan je za održavanje end-to-end enkripcije. Pretpostavimo da na kanalu postoje dva korisnika, Jay i Aayush, koji međusobno komuniciraju.
Jay ima Aayushov javni ključ, a Aayush ima Jayev javni ključ kao i njihov nedijeljeni privatni ključ. Kao rezultat toga, kada Jay odašilje poruku, on je šifrira Aayushevim javnim ključem, koji se može dekodirati samo Aayushevim privatnim ključem.
Slično, Jay će moći dekodirati samo Aayushovu komunikaciju. Kao rezultat, samo će Jay i Aaysuh moći vidjeti međusobnu komunikaciju, a poslužitelj će samo funkcionirati kao pristupnik u cijelom procesu.
5. Uska grla
Svaki sustav je sklon kvaru. Kako bi upravljala tako velikom količinom prometa, usluga mora uvijek ostati operativna i tolerantna na greške kako bi se izbjegla uska grla. Budući da se naša usluga u potpunosti oslanja na Chat i Transient poslužitelje, moramo riješiti sve probleme koji proizlaze iz njihovog rada.
Kvar poslužitelja za razgovor: Ovo je srce našeg sustava. Kada su korisnici online, odgovorni su za upravljanje i isporuku poruka. Kao rezultat toga, ovaj sustav održava veze sa svojim korisnicima.
Kao rezultat toga, ako ova usluga ne uspije, cijela arhitektura će patiti. Postoje dva pristupa upravljanju neuspjehom poslužitelja za razgovor. Jedna metoda je prebacivanje TCP veza na drugi poslužitelj, dok je druga dopustiti korisnicima da automatski započnu veze u slučaju gubitka veze.
Neuspjeh privremene pohrane: Još jedna komponenta sklona kvarovima koja bi na kraju mogla oštetiti cijelu uslugu je prolazna pohrana. Poruke na putu izvanmrežnim korisnicima gube se ako ova usluga ne uspije.
Gubitak poruke možemo spriječiti repliciranjem privremene memorije svakog korisnika. Kao rezultat toga, replika se može koristiti za obradu funkcija kad god se korisnik vrati online. Ako izvorni poslužitelj postane dostupan, i izvorna i replika instance korisnikove prolazne pohrane kombiniraju se u jednu pohranu.
6. Tehnike optimizacije
skrivenost: Kako bi pružila besprijekorno i poboljšano korisničko iskustvo, usluga glasnika mora biti u stvarnom vremenu. Kao rezultat toga, kašnjenje se mora smanjiti keširanjem dijela podataka kojima se često pristupa. Možemo predmemorirati status aktivnosti korisnika i nedavne razgovore u memoriji koristeći distribuiranu predmemoriju kao što je Redis.
Dostupnost: Trebamo da naša usluga bude dostupna većinu vremena. Naš sustav mora biti otporan na greške, tako da možemo zadržati nekoliko kopija prolaznih poruka tako da se svaka izgubljena poruka može brzo oporaviti iz svojih duplikata. Kao rezultat toga, dostupnost sustava ne može biti ugrožena.
Zaključak
Naš sustav sada podržava samo nekoliko mogućnosti, ali ga lako možemo proširiti i dodati grupne razgovore za distribuciju poruka nekoliko pojedinaca. Također možete omogućiti video i telefonske pozive. Ovaj se sustav također može razviti tako da korisnici mogu objavljivati ažuriranja statusa ili priče i čitati jedni druge.
Naporno sam radio kako bih vam pružio pregled na visokoj razini dizajna sustava WhatsApp. Nadam se da ste uživali i da ćete ga dobro iskoristiti.
Ostavi odgovor