Sisukord[Peida][Näita]
WhatsApp on sotsiaalne sõnumsideprogramm, mis võimaldab kasutajatel üksteisega sõnumeid vahetada.
Kas olete kunagi mõelnud, kuidas WhatsApp töötab?
Millised on selle loomise ja toimimise aluseks olevad kontseptsioonid?
See artikkel käsitleb WhatsAppi põhitõdesid süsteemi disain.
Vaatame läbi ka WhatsAppi üldise arhitektuuri, mida saab kasutada igasuguse vestlustarkvara koostamiseks.
Niisiis, ilma pikema jututa, vaatame WhatsAppi süsteemikujundust!
1. Põhinõuded
WhatsApp on väga skaleeritav tehnoloogia, mida kasutavad paljud inimesed üle kogu maailma. Selle tulemusena peaks see olema hästi kujundatud, et see oleks peaaegu alati töökindel ja töötav.
Sellest tulenevalt on süsteemi kriitiliste vajaduste kindlaksmääramine kriitilise tähtsusega.
Need on WhatsApp Messengeri miinimumnõuded:
- Võimeline hõlbustama üks-ühele suhtlust.
- Võimalikud on nii sõnumi kinnitamine kui ka viimati nähtud (saadetud, tarnitud ja loetud).
- Luba täielik krüptimine ja meedia tugi (pildid/videod).
Uurime, kui palju võimsust meie vajalik teenus nõuab.
2. Võimsuse hindamine
Meie eesmärk on luua platvorm, mis on võimeline käsitlema suurt liiklust. Oletame, et päevas saadetakse 10 miljardit SMS-i. Meil on:
- Iga päev saadab üks miljard inimest 10 miljardit SMS-i.
- Tippliikluses (sekundis) oli aktiivseid 700,000 6 inimest (XNUMXX keskmine)
- Tippkasutuse ajal edastatakse 40 miljonit sõnumit sekundis.
- Sõnumi keskmine pikkus on 160 tähemärki: iga päev genereeritakse 10B * 160 = 1.6TB andmeid.
- Võtke näiteks kümme aastat tööstaaži: 10 * 1.6 B * 365 PB
- Kogu rakendus koosneb mikroteenustest, millest igaüks täidab spetsiifilist ülesannet. Oletame, et sõnumi saatmine võtab aega 20 millisekundit ja ühe serveri kohta on 100 samaaegset ühendust. Selle tulemusel nõutavate vestlusserverite eeldatav arv = (vestlussõnumeid sekundis Latentsus) / samaaegsed ühendused serveri kohta = 40 miljonit * 20 ms / 100 = 8000 serverit.
3. Kõrgetasemeline arhitektuur
See süsteem on üles ehitatud kahele põhiteenusele. Näiteks vestlusteenus ja ajutine teenus. Vestlusteenus käsitleb kogu kasutajate võrgusõnumite tekitatud liiklust. Samal ajal haldab ajutine teenus liiklust, kui kasutaja on võrguühenduseta.
Kui kasutaja on võrgus, vastutab sõnumite edastamise eest vestlusteenus.
See kontrollib, kas sõnumi saaja on võrgus või mitte; kui adressaat on võrgus, saadab see teenus sõnumi kohe; kui adressaat ei ole võrgus, saadab ajutine teenus talle sõnumi, kui nad võrku naasevad.
Ajutine teenus hoiab eraldi salvestusala ajutiselt juurdepääsetavate andmete hoidmiseks, kuni võrguühenduseta kasutaja uuesti ühenduse loob.
Kõrgetasemeliste API-de kujundamine
Sellel teenusel on kaks kõrgetasemelist toimivat API-d sõnumite saatmiseks ja lugemiseks. Süsteemi saab realiseerida kasutades REST arhitektuuri.
Parameetrid sõnumite saatmiseks
Seda API-t kasutatakse sõnumite edastamiseks kahe kasutaja vahel.
Vestluse parameetrid
Seda API-t kasutatakse keermestatud vestluste kuvamiseks. Pidage seda esimeseks asjaks, mida näete WhatsAppi avamisel. Tahaksime ühes API-päringus ühe kasutaja kohta saada vaid paar sõnumit. Selle käsitlemiseks on vaja parameetreid nihe ja sõnumite arv.
Milliseid funktsioone täidavad sellised funktsioonid nagu viimati nähtud, üks linnuke ja topeltmärk?
Nende teenuste juurutamisel on oluline roll tunnustusteenusel. Need funktsioonid töötati välja, kuna see teenus jätkab kinnituste vastuste genereerimist ja kontrollimist.
- Üksik linnuke: Kui kasutaja A sõnum jõuab kasutajani B, saadab server ühe linnukese, kinnitades, et sõnum on edastatud.
- Topelt linnuke: Kui serveri sõnum on õige ühenduse kaudu saadetud kasutajale B, kinnitab kasutaja B serverile sõnumi kättesaamist. Seejärel annab server kasutajale A uue kinnituse. Selle tulemusena ilmub korduv linnuke.
- sinine tikk: Kasutaja B saadab pärast sõnumi kontrollimist serverile uue kinnituse. Seejärel saadab server kasutajale A täiendava kinnitussõnumi. Pärast seda ilmub kasutaja A ekraanile sinine linnuke.
- Viimati nähtud: Südamelöögimehhanism vastutab täielikult viimati nähtud funktsiooni eest. Iga 5 sekundi järel edastatakse südamelöögid serverisse, mis jälgib iga kasutaja viimati nähtud olekut tabelis, millele on hõlpsasti juurdepääsetav mis tahes teine kasutaja.
4. Põhifunktsioonide kujundamine
Isikupärastatud suhtlus
See on vestlusteenuse vajalik osa. Kasutaja saab seda teenust kasutades lihtsalt teisele kasutajale sõnumeid saata. Vaatame, kuidas see toimib:
Oletame, et Jay tahab Aayushiga suhelda. Jay on lingitud vestlusserveriga, millega ta sõnumi saab. Jay saab vestlusserverist kinnituse, et sõnum on saadetud. Vestlusserver küsib nüüd andmesalvest teavet selle vestlusserveri kohta, millega Aayush on ühendatud. Jay vestlusserver edastab nüüd sõnumi Aayushi vestlusserverisse ja Aayush saab sõnumi tõukemehhanismi kaudu. Aayush saadab nüüd kinnituse Jay vestlusserverisse, mis annab Jayle teate, et sõnum on kohale toimetatud. Kui Aayush luges sõnumit uuesti, saadeti Jayle uus kinnitus, et sõnum on loetud.
Kasutajategevuse olek
Viimane kord, kui inimene oli aktiivne, on kiirsõnumite regulaarne funktsioon.
Sellel diagrammil on kujutatud süsteemi kliendi ja serveri vahelise ühenduse säilitamiseks. Serveri ja kliendi vahel kahesuunalise ühenduse loomiseks kasutati veebipesasid. Need ühendused saadavad südamelööke, mida kasutatakse kasutaja aktiivsuse oleku jälgimiseks.
Täielik privaatsus
Otsast lõpuni krüpteerimine on põhifunktsioon, mis tagab, et ainult vestlevad kasutajad saavad suhtlust lugeda. Avalikku võtit jagatakse kõigi suhtluses osalevate kasutajate vahel ja see on otspunktkrüptimise säilitamiseks ülioluline. Oletame, et kanalil on kaks kasutajat, Jay ja Aayush, kes suhtlevad omavahel.
Jayl on Aayushi avalik võti ja Aayushil on nii Jay avalik võti kui ka nende jagamata privaatvõti. Selle tulemusena krüpteerib Jay sõnumi edastades selle Aayushi avaliku võtmega, mida saab dekodeerida ainult Aayushi privaatvõtmega.
Samamoodi saab Jay ainult Aayushi suhtlust dekodeerida. Selle tulemusena näevad ainult Jay ja Aaysuh üksteise suhtlust ning server toimib kogu protsessis lihtsalt lüüsina.
5. Kitsaskohad
Iga süsteem on altid talitlushäiretele. Nii suure liiklusmahu haldamiseks peab teenus kitsaskohtade vältimiseks olema kogu aeg töökorras ja tõrketaluv. Kuna meie teenus sõltub täielikult vestlus- ja transient-serveritest, peame lahendama kõik nende tööst tulenevad probleemid.
Vestlusserveri rike: See on meie süsteemi süda. Kui kasutajad on võrgus, vastutab ta sõnumite haldamise ja edastamise eest. Selle tulemusena säilitab see süsteem oma kasutajatega sidemeid.
Selle tulemusel, kui see teenus ebaõnnestub, kannatab kogu arhitektuur. Vestlusserveri rikke haldamiseks on kaks lähenemisviisi. Üks meetod on TCP-ühenduste teisaldamine teise serverisse, teine aga võimaldab kasutajatel ühenduse katkemise korral ühendusi automaatselt alustada.
Ajutise salvestuse rike: Teine komponent, mis võib kahjustada kogu teenust, on ajutine salvestusruum. Kui see teenus ebaõnnestub, lähevad võrguühenduseta kasutajatele teel olevad sõnumid kaotsi.
Saame vältida sõnumite kadumist, kopeerides iga kasutaja ajutise salvestusruumi. Selle tulemusena saab koopiat kasutada funktsioonide töötlemiseks alati, kui kasutaja naaseb võrku. Kui algserver muutub juurdepääsetavaks, ühendatakse nii kasutaja ajutise salvestusruumi alg- kui ka koopiaeksemplarid üheks poeks.
6. Optimeerimisvõtted
Hilinemine: Sujuva ja parema kliendikogemuse pakkumiseks peab messengeri teenus olema reaalajas. Selle tulemusena tuleb latentsusaega vähendada, lisades osa sageli kasutatavatest andmetest vahemällu. Saame kasutaja tegevuse oleku ja hiljutised vestlused mällu salvestada, kasutades hajutatud vahemälu, nagu Redis.
Kättesaadavus: Meil on vaja, et meie teenus oleks suurema osa ajast saadaval. Meie süsteem peab olema tõrketaluv, seega saame säilitada ajutiste teadete mitu koopiat, et kõik kadunud sõnumid saaks kiiresti duplikaatidest taastada. Selle tulemusena ei saa süsteemi käideldavust ohtu seada.
Järeldus
Meie süsteem toetab nüüd vaid mõnda võimalust, kuid saame seda hõlpsasti laiendada, et lisada grupivestlusi, et sõnumeid mitmele inimesele jagada. Saate pakkuda ka video- ja telefonikõnede võimalusi. Seda süsteemi saab arendada ka selliselt, et kasutajad saaksid avaldada olekuvärskendusi või narratiive ja üksteist lugeda.
Tegin kõvasti tööd, et anda teile kõrgetasemeline ülevaade WhatsAppi süsteemikujundusest. Loodan, et teile meeldis ja kasutate seda hästi.
Jäta vastus