Sadržaj[Sakrij][Prikaži]
WhatsApp je program za razmjenu društvenih poruka koji korisnicima omogućava razmjenu poruka jedni s drugima.
Jeste li ikada razmišljali kako WhatsApp funkcionira?
Koji su koncepti koji podupiru njegovo stvaranje i rad?
Ovaj članak govori o osnovama WhatsApp-a dizajn sistema.
Takođe ćemo proći kroz opštu arhitekturu WhatsApp-a, koja se može koristiti za pravljenje bilo koje vrste softvera za ćaskanje.
Dakle, bez daljeg odlaganja, pogledajmo dizajn WhatsApp sistema!
1. Ključni zahtjevi
WhatsApp je visoko skalabilna tehnologija koju koriste mnogi ljudi širom svijeta. Kao rezultat toga, trebao bi biti dobro dizajniran kako bi bio gotovo uvijek pouzdan i funkcionalan.
Kao rezultat toga, određivanje kritičnih potreba sistema je kritično.
Ovo su minimalni zahtjevi za WhatsApp messenger:
- Sposoban da olakša interakcije jedan na jedan.
- Moguća je i potvrda poruke i posljednje viđenje (Poslano, Isporučeno i Pročitano).
- Dozvolite end-to-end enkripciju i podršku za medije (slike/video).
Hajde da saznamo koliki kapacitet je potreban našoj potrebnoj usluzi.
2. Procjena kapaciteta
Naš cilj je stvoriti platformu sposobnu za rukovanje velikom količinom prometa. Pretpostavimo da se dnevno pošalje 10 milijardi SMS-a. Imamo:
- Svakog dana milijardu ljudi pošalje 10 milijardi SMS-ova.
- Na vrhuncu prometa (u sekundi), 700,000 ljudi je bilo aktivno (6X prosjek)
- Tokom vršne upotrebe, 40 miliona poruka se prenosi u sekundi.
- Prosječna dužina poruke je 160 karaktera: 10B * 160 = 1.6TB podataka se generiše svaki dan.
- Uzmite deset godina radnog staža kao primjer: 10 * 1.6B * 365 PB
- Cijela aplikacija će se sastojati od mikroservisa, od kojih će svaki izvršavati specijalizirani zadatak. Pretpostavimo da slanje poruke traje 20 milisekundi i da postoji 100 istovremenih veza po serveru. Kao rezultat, predviđeni broj potrebnih servera za ćaskanje = (kašnjenje poruka u sekundi)/ istovremene veze po serveru = 40M * 20ms / 100 = 8000 servera.
3. Arhitektura visokog nivoa
Ovaj sistem je izgrađen na dvije osnovne usluge. Usluga ćaskanja i prolazna usluga, na primjer. Usluga ćaskanja obrađuje sav promet generiran korisničkim online porukama. Istovremeno, privremena usluga upravlja prometom kada je korisnik van mreže.
Ako je korisnik na mreži, za isporuku poruka je zadužena usluga za ćaskanje.
On će potvrditi da li je primalac poruke online ili ne; ako je primalac online, ova usluga će odmah isporučiti poruku; ako primalac nije na mreži, prolazna usluga će mu poslati poruku kada se vrati online.
Privremeni servis čuva odvojeno skladište za čuvanje privremeno dostupnih podataka dok se offline korisnik ponovo ne poveže.
Dizajniranje API-ja visokog nivoa
Ova usluga ima dva funkcionalna API-ja visokog nivoa za slanje i čitanje poruka. Sistem se može implementirati koristeći REST arhitekturu.
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 sa 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 bi se ovo riješilo, potrebni su parametri pomaka i broja poruka.
Koje su funkcije funkcija kao što su posljednji put viđeno, jednokratno i dvostruko?
Važna uloga u implementaciji ovih usluga je usluga potvrde. Ove karakteristike su razvijene jer ova usluga nastavlja da generiše i provjerava odgovore na potvrde.
- Jedan krpelj: Kada poruka od korisnika A stigne do korisnika B, server šalje jednu oznaku koja potvrđuje da je poruka poslana.
- Dvostruka oznaka: Nakon što je poruka servera poslana korisniku B putem odgovarajuće veze, korisnik B će potvrditi prijem poruke na server. Server će tada korisniku A dati još jednu potvrdu. Kao rezultat, pojavit će se duplikat.
- Plava krpelja: Korisnik B će poslati još jednu potvrdu serveru nakon provjere poruke. Server će zatim poslati korisniku A dodatnu poruku potvrde. Nakon toga će se na ekranu korisnika A pojaviti plava kvačica.
- Posljednji put viđen: Mehanizam otkucaja srca je u potpunosti odgovoran za posljednju viđenu funkciju. Svakih 5 sekundi, otkucaj srca se prenosi na server, koji vodi evidenciju o posljednjem viđenom statusu svakog korisnika u tabeli kojoj svaki drugi korisnik može lako pristupiti.
4. Dizajniranje ključnih karakteristika
Personalizovana 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 sa serverom za ćaskanje sa kojim prima poruku. Jay prima potvrdu od chat servera da je poruka poslana. Chat server sada traži informacije iz skladišta podataka o chat serveru na koji je Aayush povezan. Jayov chat server sada šalje poruku Aayushovom chat serveru, a Aayush prima poruku putem push mehanizma. Aayush sada šalje potvrdu Jayovom serveru za ćaskanje, koji obavještava Jaya da je poruka isporučena. Ako je Aayush ponovo pročitao poruku, Jayu je isporučeno novo priznanje da je poruka pročitana.
Status aktivnosti korisnika
Zadnji put kada je osoba bila aktivna je uobičajena karakteristika instant messengera.
Sistem za održavanje veze između klijenta i servera je prikazan na ovom dijagramu. Web utičnice su korištene za uspostavljanje dvosmjerne veze između servera i klijenta. Ove veze šalju otkucaje srca, koji se koriste za praćenje statusa aktivnosti korisnika.
Privatnost od kraja do kraja
Enkripcija s kraja na kraj je ključna karakteristika koja osigurava da samo korisnici koji razgovaraju mogu čitati komunikaciju. Javni ključ se dijeli između svih korisnika uključenih 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 prenese poruku, on je šifrira Aayushovim javnim ključem, koji se može dekodirati samo Aayushovim privatnim ključem.
Slično, Jay će moći samo dekodirati Aayushovu komunikaciju. Kao rezultat toga, samo Jay i Aaysuh će moći vidjeti međusobnu komunikaciju, a server će samo funkcionirati kao gateway u cijelom procesu.
5. Uska grla
Svaki sistem je sklon kvaru. Da bi upravljala tako velikim obimom saobraćaja, usluga mora ostati operativna i tolerantna na greške u svakom trenutku kako bi se izbjegla uska grla. Budući da se naša usluga u potpunosti oslanja na Chat i Transient servere, moramo riješiti sve probleme koji proizlaze iz njihovog rada.
Kvar čet servera: Ovo je srce našeg sistema. Kada su korisnici na mreži, on je odgovoran za upravljanje i isporuku poruka. Kao rezultat, ovaj sistem održava veze sa svojim korisnicima.
Kao rezultat toga, ako ova usluga ne uspije, cijela arhitektura će patiti. Postoje dva pristupa upravljanju neuspjehom chat servera. Jedna metoda je prebacivanje TCP konekcija na drugi server, dok je druga omogućavanje korisnicima da automatski započnu veze u slučaju gubitka veze.
Greška privremene memorije: Još jedna komponenta sklona kvaru koja bi eventualno mogla oštetiti cijelu uslugu je prolazna pohrana. Poruke na putu do offline korisnika se gube 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 na mrežu. Ako originalni server postane dostupan, i originalna i replika instance korisničkog prolaznog skladišta se kombinuju u jednu prodavnicu.
6. Tehnike optimizacije
latentnost: Da bi pružila besprijekorno i poboljšano iskustvo klijenta, usluga glasnika mora biti u realnom vremenu. Kao rezultat toga, kašnjenje se mora smanjiti keširanjem dijela podataka kojima se često pristupa. Možemo keširati status aktivnosti korisnika i nedavne razgovore u memoriji koristeći distribuiranu keš memoriju kao što je Redis.
dostupnost: Potrebno nam je da naša usluga bude dostupna većinu vremena. Naš sistem mora biti tolerantan 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 sistema ne može biti ugrožena.
zaključak
Naš sistem sada podržava samo nekoliko mogućnosti, ali ga lako možemo proširiti da bismo dodali grupne razgovore za distribuciju poruka nekoliko pojedinaca. Također možete omogućiti video i telefonske pozive. Ovaj sistem se također može razviti tako da korisnici mogu objavljivati ažuriranja statusa ili narative i čitati jedni druge.
Naporno sam radio da vam pružim pregled na visokom nivou dizajna WhatsApp sistema. Nadam se da ste uživali i da ćete ga dobro iskoristiti.
Ostavite odgovor