Saturs[Paslēpt][Rādīt]
WhatsApp ir sociālā ziņojumapmaiņas programma, kas ļauj lietotājiem apmainīties ar ziņojumiem vienam ar otru.
Vai esat kādreiz domājis, kā darbojas WhatsApp?
Kādi ir jēdzieni, kas ir tā izveides un darbības pamatā?
Šajā rakstā tiks apskatīti WhatsApp pamati sistēmas projektēšana.
Mēs apskatīsim arī WhatsApp vispārējo arhitektūru, ko var izmantot, lai izveidotu jebkāda veida tērzēšanas programmatūru.
Tātad, bez papildu piepūles, apskatīsim WhatsApp sistēmas dizainu!
1. Galvenās prasības
WhatsApp ir ļoti mērogojama tehnoloģija, ko izmanto daudzi cilvēki visā pasaulē. Rezultātā tam jābūt labi izstrādātam, lai tas praktiski vienmēr būtu uzticams un funkcionējošs.
Rezultātā sistēmas kritisko vajadzību noteikšana ir ļoti svarīga.
Šīs ir minimālās prasības WhatsApp kurjeram:
- Spēj atvieglot savstarpēju mijiedarbību.
- Ir iespējams gan ziņojuma apstiprinājums, gan pēdējoreiz redzēts (nosūtīts, piegādāts un lasīts).
- Atļaut pilnīgu šifrēšanu un multivides atbalstu (attēli/videoklipi).
Noskaidrosim, cik lielu jaudu prasa mūsu nepieciešamais serviss.
2. Jaudas novērtēšana
Mūsu mērķis ir izveidot platformu, kas spēj apkalpot lielu trafika apjomu. Pieņemsim, ka dienā tiek nosūtīti 10 miljardi SMS. Mums ir:
- Katru dienu viens miljards cilvēku nosūta 10 miljardus SMS.
- Maksimālā satiksmē (sekundē) 700,000 6 cilvēku bija aktīvi (XNUMXX vidēji)
- Maksimālās lietošanas laikā sekundē tiek pārraidīti 40 miljoni ziņojumu.
- Ziņojuma vidējais garums ir 160 rakstzīmes: katru dienu tiek ģenerēti 10 B * 160 = 1.6 TB datu.
- Kā piemēru ņemiet desmit darba gadus: 10 * 1.6 B * 365 PB
- Visa lietojumprogramma tiks veidota no mikropakalpojumiem, no kuriem katrs veiks specializētu uzdevumu. Pieņemsim, ka ziņojuma nosūtīšana aizņem 20 milisekundes un vienam serverim ir 100 vienlaicīgi savienojumi. Rezultātā paredzamais nepieciešamo tērzēšanas serveru skaits = (tērzēšanas ziņojumi sekundē Latentums)/ vienlaicīgi savienojumi vienam serverim = 40 miljoni * 20 ms / 100 = 8000 serveru.
3. Augsta līmeņa arhitektūra
Šī sistēma ir balstīta uz diviem galvenajiem pakalpojumiem. Piemēram, tērzēšanas pakalpojums un pagaidu pakalpojums. Tērzēšanas pakalpojums apstrādā visu trafiku, ko rada lietotāju tiešsaistes ziņojumi. Vienlaikus pagaidu pakalpojums apstrādā trafiku, kad lietotājs ir bezsaistē.
Ja lietotājs ir tiešsaistē, tērzēšanas pakalpojums ir atbildīgs par ziņojumu piegādi.
Tas pārbaudīs, vai ziņojuma adresāts ir tiešsaistē vai nav; ja adresāts ir tiešsaistē, šis pakalpojums nekavējoties piegādās ziņojumu; ja adresāts nav tiešsaistē, pagaidu pakalpojums viņam nosūtīs ziņojumu, kad viņi atgriezīsies tiešsaistē.
Pagaidu pakalpojums saglabā atsevišķu krātuves apgabalu īslaicīgi pieejamu datu glabāšanai, līdz bezsaistes lietotājs atkal izveido savienojumu.
Augsta līmeņa API projektēšana
Šim pakalpojumam ir divas augsta līmeņa funkcionējošas API ziņojumu sūtīšanai un lasīšanai. Sistēmu var ieviest, izmantojot REST arhitektūru.
Ziņu sūtīšanas parametri
Šī API tiks izmantota, lai pārsūtītu ziņojumus starp diviem lietotājiem.
Sarunas parametri
Šī API tiek izmantota, lai parādītu pavedienu tērzēšanu. Uzskatiet, ka šī ir pirmā lieta, ko redzat, atverot WhatsApp. Mēs vēlamies saņemt tikai dažus ziņojumus vienam lietotājam vienā API vaicājumā. Lai to paveiktu, ir nepieciešami nobīdes un ziņojumu skaita parametri.
Kādas ir funkcijas, piemēram, pēdējo reizi redzēts, viena atzīme un dubultā atzīme?
Šo pakalpojumu izvietošanā svarīga loma ir apstiprinājuma pakalpojumam. Šīs funkcijas tika izstrādātas, jo šis pakalpojums turpina ģenerēt un pārbaudīt apstiprinājuma atbildes.
- Vienu ķeksīti: Kad ziņojums no lietotāja A sasniedz lietotāju B, serveris nosūta vienu atzīmi, apstiprinot, ka ziņojums ir pārsūtīts.
- Dubultā ķeksītis: pēc tam, kad servera ziņojums ir nosūtīts lietotājam B, izmantojot pareizu savienojumu, lietotājs B apstiprinās ziņojuma saņemšanu serverim. Pēc tam serveris sniegs lietotājam A citu apstiprinājumu. Rezultātā parādīsies ķeksīša dublikāts.
- Zilā ērce: lietotājs B pēc ziņojuma pārbaudes nosūtīs serverim vēl vienu apstiprinājumu. Pēc tam serveris nosūtīs lietotājam A papildu apstiprinājuma ziņojumu. Pēc tam lietotāja A ekrānā parādīsies zila atzīme.
- Pēdējo reizi: Sirdsdarbības mehānisms ir pilnībā atbildīgs par pēdējo redzēto funkciju. Ik pēc 5 sekundēm sirdsdarbība tiek pārsūtīta uz serveri, kas izseko katra lietotāja pēdējo redzēto statusu tabulā, kurai var viegli piekļūt jebkurš cits lietotājs.
4. Galveno iezīmju projektēšana
Personalizēta mijiedarbība
Šī ir nepieciešama tērzēšanas pakalpojuma sastāvdaļa. Lietotājs var vienkārši nosūtīt ziņojumus citam lietotājam, izmantojot šo pakalpojumu. Apskatīsim, kā tas darbojas:
Pieņemsim, ka Džejs vēlas sazināties ar Ajušu. Džejs ir saistīts ar tērzēšanas serveri, ar kuru viņš saņem ziņojumu. Džejs saņem apstiprinājumu no tērzēšanas servera, ka ziņojums ir nosūtīts. Tērzēšanas serveris tagad pieprasa informāciju no datu krātuves par tērzēšanas serveri, kuram ir pievienots Aayush. Džeja tērzēšanas serveris tagad pārsūta ziņojumu uz Aayush tērzēšanas serveri, un Aayush saņem ziņojumu, izmantojot push mehānismu. Tagad Aayush nosūta apstiprinājumu Džeja tērzēšanas serverim, kas paziņo Džejam, ka ziņojums ir piegādāts. Ja Ajušs vēlreiz izlasīja ziņojumu, Džejam tika nosūtīts jauns apstiprinājums, ka ziņojums ir izlasīts.
Lietotāja aktivitātes statuss
Pēdējā reize, kad cilvēks bija aktīvs, ir tūlītēja ziņojumapmaiņas funkcija.
Šajā diagrammā ir attēlota sistēma savienojuma uzturēšanai starp klientu un serveri. Tīmekļa ligzdas tika izmantotas, lai izveidotu divvirzienu savienojumu starp serveri un klientu. Šie savienojumi sūta sirdspukstus, kas tiek izmantoti, lai uzraudzītu lietotāja aktivitātes statusu.
Pilnīga konfidencialitāte
Pilnīga šifrēšana ir galvenā funkcija, kas nodrošina, ka tikai sarunājošie lietotāji var lasīt saziņu. Publiskā atslēga tiek koplietota starp visiem saziņā iesaistītajiem lietotājiem, un tā ir ļoti svarīga pilnīgas šifrēšanas uzturēšanai. Pieņemsim, ka kanālā ir divi lietotāji, Džejs un Eiušs, kuri sazinās viens ar otru.
Jay ir Aayush publiskā atslēga, un Aayush ir Jay publiskā atslēga, kā arī viņu nekoplietotā privātā atslēga. Rezultātā, kad Džejs pārsūta ziņojumu, viņš to šifrē ar Aayush publisko atslēgu, kuru var atšifrēt tikai ar Aayush privāto atslēgu.
Tāpat Džejs varēs tikai atšifrēt Aayush komunikāciju. Rezultātā tikai Jay un Aaysuh varēs redzēt viens otra saziņu, un serveris darbosies tikai kā vārteja visā procesā.
5. Šaurās vietas
Katra sistēma ir pakļauta nepareizai darbībai. Lai pārvaldītu tik lielu trafika apjomu, pakalpojumam vienmēr ir jāpaliek darbotiesspējīgam un kļūmju tolerantam, lai izvairītos no sastrēgumiem. Tā kā mūsu pakalpojums ir pilnībā atkarīgs no tērzēšanas un pārejas serveriem, mums ir jāatrisina visas problēmas, kas rodas to darbības rezultātā.
Tērzēšanas servera kļūme: Tā ir mūsu sistēmas sirds. Kad lietotāji ir tiešsaistē, tas ir atbildīgs par ziņojumu pārvaldību un piegādi. Rezultātā šī sistēma uztur saites ar saviem lietotājiem.
Rezultātā, ja šis pakalpojums neizdosies, cietīs visa arhitektūra. Tērzēšanas servera kļūmes pārvaldībai ir divas pieejas. Viena metode ir pārslēgt TCP savienojumus uz citu serveri, savukārt cita ir ļaut lietotājiem automātiski sākt savienojumus savienojuma zuduma gadījumā.
Īslaicīgas uzglabāšanas kļūme: Vēl viens komponents, kuram ir tendence uz kļūmēm, kas galu galā var sabojāt visu pakalpojumu, ir īslaicīga krātuve. Ja šis pakalpojums neizdodas, ziņojumi ceļā bezsaistes lietotājiem tiek zaudēti.
Mēs varam novērst ziņojumu zudumu, atkārtojot katra lietotāja pagaidu krātuvi. Tā rezultātā reprodukciju var izmantot, lai apstrādātu funkcijas ikreiz, kad lietotājs atgriežas tiešsaistē. Ja sākotnējais serveris kļūst pieejams, lietotāja pagaidu krātuves oriģinālie un replikas gadījumi tiek apvienoti vienā veikalā.
6. Optimizācijas paņēmieni
Latentums: lai nodrošinātu netraucētu un uzlabotu klientu pieredzi, ziņojumapmaiņas pakalpojumam ir jābūt reāllaikā. Rezultātā latentums ir jāsamazina, kešatmiņā saglabājot daļu bieži pieejamo datu. Mēs varam kešatmiņā saglabāt lietotāja aktivitātes statusu un pēdējās sarunas, izmantojot izplatītu kešatmiņu, piemēram, Redis.
Darba / Zvanu laiks: Mums ir nepieciešams, lai mūsu pakalpojums būtu pieejams lielāko daļu laika. Mūsu sistēmai ir jābūt izturīgai pret kļūmēm, tādējādi varam saglabāt vairākas pārejas ziņojumu kopijas, lai jebkuru pazaudēto ziņojumu varētu ātri atgūt no tā dublikātiem. Tā rezultātā nevar tikt apdraudēta sistēmas pieejamība.
Secinājumi
Mūsu sistēma tagad atbalsta tikai dažas iespējas, taču mēs varam to viegli paplašināt, lai pievienotu grupas tērzēšanu, lai izplatītu ziņojumus vairākām personām. Varat arī nodrošināt video un tālruņa zvanu iespējas. Šo sistēmu var arī izstrādāt tā, lai lietotāji varētu publicēt statusa atjauninājumus vai stāstījumus un lasīt viens otru.
Es smagi strādāju, lai sniegtu jums augsta līmeņa pārskatu par WhatsApp sistēmas dizainu. Es ceru, ka jums tas patika un izmantosit to lietderīgi.
Atstāj atbildi