Obsah[Skryť][Šou]
WhatsApp je program sociálnych správ, ktorý používateľom umožňuje vymieňať si správy medzi sebou.
Zamysleli ste sa niekedy nad tým, ako funguje WhatsApp?
Aké sú koncepty, ktoré sú základom jeho tvorby a fungovania?
Tento článok sa bude zaoberať základmi WhatsApp návrh systému.
Prejdeme si aj všeobecnú architektúru WhatsApp, ktorú možno použiť na vytvorenie akéhokoľvek softvéru na chatovanie.
Takže, bez ďalších okolkov, poďme sa pozrieť na dizajn systému WhatsApp!
1. Kľúčové požiadavky
WhatsApp je vysoko škálovateľná technológia, ktorú používa veľa ľudí na celom svete. V dôsledku toho by mal byť dobre navrhnutý, aby bol prakticky vždy spoľahlivý a funkčný.
V dôsledku toho je rozhodujúce určenie kritických potrieb systému.
Toto sú minimálne požiadavky na aplikáciu WhatsApp messenger:
- Schopný uľahčiť interakcie jeden na jedného.
- Potvrdenie správy a posledná videná sú možné (Odoslané, Doručené a Prečítané).
- Povoliť end-to-end šifrovanie a podporu médií (obrázky/videá).
Poďme zistiť, akú kapacitu si naša potrebná služba vyžaduje.
2. Odhad kapacity
Naším cieľom je vytvoriť platformu schopnú zvládnuť veľké množstvo dopravy. Predpokladajme, že sa denne odošle 10 miliárd SMS. Máme:
- Každý deň miliarda ľudí odošle 10 miliárd SMS.
- Pri špičkovej návštevnosti (za sekundu) bolo aktívnych 700,000 6 ľudí (XNUMXx priemer)
- Počas špičkového používania sa prenesie 40 miliónov správ za sekundu.
- Priemerná dĺžka správy je 160 znakov: 10B * 160 = 1.6TB dát sa vygeneruje každý deň.
- Vezmite si desať rokov služby ako príklad: 10 * 1.6B * 365 PB
- Celá aplikácia bude pozostávať z mikroslužieb, z ktorých každá bude vykonávať špecializovanú úlohu. Predpokladajme, že odoslanie správy trvá 20 milisekúnd a že na server existuje 100 súbežných pripojení. Výsledkom je, že predpokladaný počet požadovaných chat serverov = (chatové správy za sekundu latencia)/súbežné pripojenia na server = 40 miliónov * 20 ms / 100 = 8000 XNUMX serverov.
3. Architektúra na vysokej úrovni
Tento systém je postavený na dvoch základných službách. Napríklad chatová služba a prechodná služba. Chatová služba spracováva všetku návštevnosť generovanú online správami používateľov. Súčasne dočasná služba spracováva prevádzku, keď je používateľ offline.
Ak je používateľ online, doručovanie správ má na starosti chatovacia služba.
Overí, či je príjemca správy online alebo nie; ak je príjemca online, táto služba doručí správu okamžite; ak príjemca nie je online, prechodná služba mu pošle správu, keď sa vráti online.
Prechodná služba uchováva oddelený úložný priestor na uchovávanie dočasne dostupných údajov, kým sa offline používateľ znova nepripojí.
Navrhovanie API na vysokej úrovni
Táto služba má dve funkčné rozhrania API na vysokej úrovni na odosielanie a čítanie správ. Systém je možné implementovať pomocou architektúry REST.
Parametre pre odosielanie správ
Toto API sa bude používať na prenos správ medzi dvoma používateľmi.
Parametre rozhovoru
Toto rozhranie API sa používa na zobrazenie konverzácií s vláknami. Berte to ako prvú vec, ktorú uvidíte, keď otvoríte WhatsApp. Chceli by sme získať len niekoľko správ pre jedného používateľa v jednom dotaze API. Na zvládnutie tohto sú potrebné parametre offset a počet správ.
Aké sú funkcie funkcií, ako je naposledy videný, jednoduchý a dvojitý?
Dôležitú úlohu pri nasadzovaní týchto služieb zohráva potvrdzovacia služba. Tieto funkcie boli vyvinuté, pretože táto služba naďalej generuje a overuje odpovede na potvrdenie.
- Jedno zatrhnutie: Keď sa správa od používateľa A dostane k používateľovi B, server odošle jedno zaškrtnutie potvrdzujúce, že správa bola odoslaná.
- Dvojité zaškrtnutie: Po odoslaní správy zo servera používateľovi B prostredníctvom správneho pripojenia používateľ B potvrdí prijatie správy na server. Server potom poskytne používateľovi A ďalšie potvrdenie. V dôsledku toho sa objaví duplicitný kliešť.
- Modrý kliešť: Používateľ B pošle ďalšie potvrdenie na server po skontrolovaní správy. Server potom pošle používateľovi A dodatočnú správu s potvrdením. Potom sa na obrazovke používateľa A objaví modrá značka.
- Last seen: Mechanizmus srdcového tepu je plne zodpovedný za poslednú videnú funkciu. Každých 5 sekúnd sa na server odošle tlkot srdca, ktorý zaznamená posledný stav každého používateľa v tabuľke, ku ktorej môže mať ľahký prístup každý iný používateľ.
4. Navrhovanie kľúčových funkcií
Personalizovaná interakcia
Toto je nevyhnutná súčasť služby Chat. Používateľ môže pomocou tejto služby jednoducho posielať správy inému používateľovi. Poďme sa pozrieť, ako to funguje:
Predpokladajme, že Jay chce komunikovať s Aayushom. Jay je prepojený s chatovacím serverom, s ktorým dostane správu. Jay dostane potvrdenie z chatového servera, že správa bola odoslaná. Chatovací server teraz požaduje informácie z dátového úložiska o chatovacom serveri, ku ktorému je Aayush pripojený. Jayov chat server teraz odošle správu na Aayushov chat server a Aayush dostane správu prostredníctvom mechanizmu push. Aayush teraz pošle Jayovmu chatovaciemu serveru potvrdenie, ktoré Jayovi oznámi, že správa bola doručená. Ak si Aayush prečítal správu znova, Jayovi bolo doručené nové potvrdenie, že správa bola prečítaná.
Stav aktivity používateľa
Čas, kedy bol človek naposledy aktívny, je bežnou súčasťou instant messengerov.
V tomto diagrame je znázornený systém na udržiavanie spojenia medzi klientom a serverom. Webové sokety boli použité na vytvorenie obojsmerného spojenia medzi serverom a klientom. Tieto pripojenia odosielajú srdcové signály, ktoré sa používajú na sledovanie stavu aktivity používateľa.
Súkromie typu End-to-End
End-to-end šifrovanie je kľúčovou funkciou, ktorá zaisťuje, že iba konverzujúci používatelia môžu čítať komunikáciu. Verejný kľúč je zdieľaný medzi všetkými používateľmi zapojenými do komunikácie a je rozhodujúci pre udržanie end-to-end šifrovania. Predpokladajme, že na kanáli sú dvaja používatelia, Jay a Aayush, ktorí spolu komunikujú.
Jay má Aayushov verejný kľúč a Aayush má Jayov verejný kľúč, ako aj ich nezdieľaný súkromný kľúč. Výsledkom je, že keď Jay odošle správu, zašifruje ju Aayushovým verejným kľúčom, ktorý je možné dekódovať iba Aayushovým súkromným kľúčom.
Podobne bude Jay schopný dekódovať iba Aayushovu komunikáciu. Výsledkom je, že iba Jay a Aaysuh budú môcť vidieť vzájomnú komunikáciu a server bude v celom procese fungovať len ako brána.
5. Úzke miesta
Každý systém je náchylný na poruchu. Na riadenie takého veľkého objemu prevádzky musí služba zostať funkčná a odolná voči poruchám za každých okolností, aby sa predišlo úzkym miestam. Pretože naša služba je úplne závislá od serverov Chat a Transient, musíme vyriešiť všetky problémy, ktoré vyplývajú z ich prevádzky.
Zlyhanie chatového servera: Toto je srdce nášho systému. Keď sú používatelia online, je zodpovedný za správu a doručovanie správ. Výsledkom je, že tento systém udržiava spojenie so svojimi používateľmi.
V dôsledku toho, ak táto služba zlyhá, bude trpieť celá architektúra. Existujú dva prístupy k riadeniu zlyhania chatového servera. Jednou z metód je presunutie pripojení TCP na iný server, zatiaľ čo inou možnosťou je umožniť používateľom automaticky nadviazať pripojenie v prípade straty pripojenia.
Porucha prechodného úložiska: Ďalším komponentom náchylným na zlyhanie, ktorý môže nakoniec poškodiť celú službu, je prechodné úložisko. Ak táto služba zlyhá, správy na ceste k používateľom offline sa stratia.
Strate správ môžeme zabrániť replikáciou dočasného úložiska každého používateľa. Výsledkom je, že replika môže byť použitá na spracovanie funkcií vždy, keď sa používateľ vráti online. Ak sa pôvodný server stane prístupným, pôvodná aj replikovaná inštancia používateľského prechodného úložiska sa spoja do jedného úložiska.
6. Optimalizačné techniky
latencia: Na zabezpečenie bezproblémového a vylepšeného zážitku klienta musí byť služba messenger dostupná v reálnom čase. V dôsledku toho sa musí latencia znížiť ukladaním časti často používaných údajov do vyrovnávacej pamäte. Stav aktivity používateľa a nedávne konverzácie môžeme uložiť do pamäte pomocou distribuovanej vyrovnávacej pamäte, ako je Redis.
Dostupnosť: Potrebujeme, aby bola naša služba dostupná väčšinu času. Náš systém musí byť odolný voči chybám, takže si môžeme ponechať niekoľko kópií prechodných správ, aby sa každá stratená správa mohla rýchlo obnoviť z jej duplikátov. V dôsledku toho nemôže byť ohrozená dostupnosť systému.
záver
Náš systém teraz podporuje len niekoľko funkcií, ale môžeme ho jednoducho rozšíriť a pridať skupinové chaty na distribúciu správ niekoľkým jednotlivcom. Môžete tiež poskytnúť možnosti videohovorov a telefonických hovorov. Tento systém môže byť tiež vyvinutý tak, aby používatelia mohli zverejňovať aktualizácie stavu alebo príbehy a navzájom sa čítať.
Tvrdo som pracoval, aby som vám poskytol prehľad o dizajne systému WhatsApp na vysokej úrovni. Dúfam, že sa vám páčil a dobre ho využijete.
Nechaj odpoveď