Përmbajtje[Fshih][Shfaqje]
WhatsApp është një program i mesazheve sociale që lejon përdoruesit të shkëmbejnë mesazhe me njëri-tjetrin.
A keni menduar ndonjëherë se si funksionon WhatsApp?
Cilat janë konceptet që mbështesin krijimin dhe funksionimin e tij?
Ky artikull do të shqyrtojë bazat e WhatsApp dizajni i sistemit.
Ne gjithashtu do të kalojmë në arkitekturën e përgjithshme të WhatsApp, e cila mund të përdoret për të ndërtuar çdo lloj softueri bisede.
Pra, pa vonesë, le t'i hedhim një sy dizajnit të sistemit të WhatsApp!
1. Kërkesat kryesore
WhatsApp është një teknologji shumë e shkallëzueshme që përdoret nga shumë njerëz në të gjithë botën. Si rezultat, ai duhet të jetë i dizajnuar mirë që të jetë pothuajse gjithmonë i besueshëm dhe funksional.
Si rezultat, përcaktimi i nevojave kritike të sistemit është kritik.
Këto janë kërkesat minimale për mesazherin WhatsApp:
- Të aftë për të lehtësuar ndërveprimet një-në-një.
- Njohja e mesazhit dhe shikimi i fundit janë të dyja të mundshme (Dërguar, Dorëzuar dhe Lexuar).
- Lejo enkriptimin nga fundi në fund dhe mbështetjen e medias (imazhe/video).
Le të zbulojmë se sa kapacitet kërkon shërbimi ynë i nevojshëm.
2. Vlerësimi i Kapacitetit
Objektivi ynë është të krijojmë një platformë të aftë për të trajtuar një sasi të madhe trafiku. Supozoni se dërgohen 10 miliardë SMS në ditë. Ne kemi:
- Çdo ditë, 10 miliardë SMS dërgohen nga një miliard njerëz.
- Në kulmin e trafikut (për sekondë), 700,000 njerëz ishin aktivë (6X mesatarja)
- Gjatë përdorimit të pikut, 40 milionë mesazhe transmetohen në sekondë.
- Gjatësia mesatare e një mesazhi është 160 karaktere: 10B * 160 = 1.6 TB të dhëna gjenerohen çdo ditë.
- Merrni dhjetë vjet shërbim si shembull: 10 * 1.6B * 365 PB
- I gjithë aplikacioni do të përbëhet nga mikroshërbime, secila prej të cilave do të kryejë një detyrë të specializuar. Supozoni se dërgimi i një mesazhi zgjat 20 milisekonda dhe se ka 100 lidhje të njëkohshme për server. Si rezultat, numri i parashikuar i serverëve të bisedës që kërkohet = (mesazhet e bisedës për sekondë Vonesa)/ lidhjet e njëkohshme për server = 40M * 20ms / 100 = 8000 serverë.
3. Arkitektura e nivelit të lartë
Ky sistem është ndërtuar mbi dy shërbime kryesore. Shërbimi i bisedës dhe shërbimi kalimtar, për shembull. Shërbimi i bisedës trajton të gjithë trafikun e krijuar nga mesazhet në internet të përdoruesve. Njëkohësisht, shërbimi i përkohshëm trajton trafikun kur përdoruesi është jashtë linje.
Nëse përdoruesi është në linjë, shërbimi i bisedës është përgjegjës për dërgimin e mesazheve.
Ai do të verifikojë nëse marrësi i mesazhit është në linjë apo jo; nëse marrësi është në linjë, ky shërbim do të dërgojë mesazhin menjëherë; nëse marrësi nuk është në linjë, shërbimi kalimtar do t'i dërgojë mesazhin kur të kthehen në linjë.
Shërbimi kalimtar mban një zonë të veçantë ruajtjeje për mbajtjen e të dhënave përkohësisht të aksesueshme derisa përdoruesi jashtë linje të rilidhet.
Projektimi i API-ve të nivelit të lartë
Ky shërbim ka dy API funksionale të nivelit të lartë për dërgimin dhe leximin e mesazheve. Sistemi mund të zbatohet duke përdorur arkitekturën REST.
Parametrat për dërgimin e mesazheve
Ky API do të përdoret për të transmetuar mesazhe ndërmjet dy përdoruesve.
Parametrat e bisedës
Ky API përdoret për të shfaqur bisedat e filetuara. Konsideroni këtë gjënë e parë që shihni kur hapni WhatsApp. Do të dëshironim vetëm të merrnim disa mesazhe për një përdorues në një pyetje të vetme API. Për ta trajtuar këtë, nevojiten parametrat e kompensimit dhe numërimit të mesazheve.
Cilat janë funksionet e veçorive si për herë të fundit, tik-tak i vetëm dhe i dyfishtë?
Roli i rëndësishëm në vendosjen e këtyre shërbimeve është shërbimi i njohjes. Këto veçori u zhvilluan pasi ky shërbim vazhdon të gjenerojë dhe verifikojë përgjigjet e njohjes.
- Këpushë e vetme: Kur një mesazh nga përdoruesi A arrin në përdoruesin B, serveri dërgon një shenjë të vetme duke pranuar se mesazhi është transmetuar.
- Shënoni dyfish: Pasi mesazhi i serverit t'i jetë dërguar Përdoruesit B përmes lidhjes së duhur, Përdoruesi B do të konfirmojë marrjen e mesazhit në server. Më pas, serveri do t'i sigurojë përdoruesit A një tjetër konfirmim. Si rezultat, do të shfaqet një shenjë e kopjuar.
- Tip blu: Përdoruesi B do të dërgojë një tjetër konfirmim te serveri pasi të kontrollojë mesazhin. Serveri më pas do t'i dërgojë Përdoruesit A një mesazh konfirmimi shtesë. Pas kësaj, në ekranin e Përdoruesit A do të shfaqet një shenjë blu.
- Parë për herë të fundit: Mekanizmi i rrahjeve të zemrës është tërësisht përgjegjës për tiparin e parë të fundit. Çdo 5 sekonda, një rrahje zemre transmetohet në server, i cili mban gjurmët e statusit të parë të fundit të secilit përdorues në një tabelë që mund të aksesohet lehtësisht nga çdo përdorues tjetër.
4. Projektimi i veçorive kryesore
Ndërveprim i personalizuar
Kjo është një pjesë e domosdoshme e shërbimit Chat. Një përdorues thjesht mund t'i dërgojë mesazhe një përdoruesi tjetër duke përdorur këtë shërbim. Le të hedhim një vështrim se si funksionon kjo:
Supozoni se Jay dëshiron të komunikojë me Aayush. Jay është i lidhur me një server chat me të cilin ai merr mesazhin. Jay merr konfirmimin nga serveri i bisedës se mesazhi ishte dërguar. Serveri i bisedës tani po kërkon informacion nga dyqani i të dhënave në lidhje me serverin e bisedës me të cilin është lidhur Aayush. Serveri i bisedës së Jay-t tani e transmeton mesazhin në serverin e bisedës së Aayush dhe Aayush e merr mesazhin përmes një mekanizmi shtytës. Aayush tani dërgon një konfirmim në serverin e bisedës së Jay, i cili e njofton Jay se mesazhi është dorëzuar. Nëse Aayush e lexonte mesazhin përsëri, një pranim i ri se mesazhi ishte lexuar i dërgohej Jay.
Statusi i aktivitetit të përdoruesit
Hera e fundit që një person ishte aktiv është një veçori e rregullt e lajmëtarëve të çastit.
Një sistem për mbajtjen e një lidhjeje midis klientit dhe serverit është paraqitur në këtë diagram. Prizat në ueb u përdorën për të krijuar një lidhje dydrejtimëshe midis serverit dhe klientit. Këto lidhje dërgojnë rrahje zemre, të cilat përdoren për të monitoruar statusin e aktivitetit të përdoruesit.
Privatësia nga fundi në fund
Kriptimi nga fundi në fund është një veçori kryesore që siguron që vetëm përdoruesit që bisedojnë mund të lexojnë komunikimet. Një çelës publik ndahet midis të gjithë përdoruesve të përfshirë në komunikim dhe është kritik për ruajtjen e kriptimit nga fundi në fund. Supozoni se ka dy përdorues në kanal, Jay dhe Aayush, të cilët komunikojnë me njëri-tjetrin.
Jay ka çelësin publik të Aayush-it dhe Aayush ka çelësin publik të Jay-t si dhe çelësin e tyre privat jo të përbashkët. Si rezultat, kur Jay transmeton mesazhin, ai e kodon atë me çelësin publik të Aayush, i cili mund të deshifrohet vetëm me çelësin privat të Aayush.
Në mënyrë të ngjashme, Jay do të jetë në gjendje të dekodojë vetëm komunikimin e Aayush. Si rezultat, vetëm Jay dhe Aaysuh do të jenë në gjendje të shohin komunikimet e njëri-tjetrit dhe serveri do të funksionojë vetëm si një portë hyrëse në të gjithë procesin.
5. Grykat e ngushta
Çdo sistem është i prirur për keqfunksionim. Për të menaxhuar një volum kaq të madh trafiku, shërbimi duhet të qëndrojë operativ dhe tolerant ndaj gabimeve në çdo kohë për të shmangur pengesat. Për shkak se shërbimi ynë varet tërësisht nga serverët Chat dhe Transient, ne duhet të zgjidhim të gjitha çështjet që dalin nga funksionimi i tyre.
Dështimi i serverit të bisedës: Kjo është zemra e sistemit tonë. Kur përdoruesit janë në linjë, ai është përgjegjës për menaxhimin dhe dërgimin e mesazheve. Si rezultat, ky sistem mban lidhje me përdoruesit e tij.
Si rezultat, nëse ky shërbim dështon, e gjithë arkitektura do të vuajë. Ekzistojnë dy mënyra për të menaxhuar dështimin e serverit të bisedës. Një metodë është zhvendosja e lidhjeve TCP në një server tjetër, ndërsa një tjetër është të lejojë përdoruesit të fillojnë automatikisht lidhjet në rast të humbjes së lidhjes.
Dështimi i ruajtjes së përkohshme: Një komponent tjetër i prirur ndaj dështimit që mund të dëmtojë përfundimisht të gjithë shërbimin është ruajtja kalimtare. Mesazhet gjatë rrugës për përdoruesit jashtë linje humbasin nëse ky shërbim dështon.
Ne mund të parandalojmë humbjen e mesazhit duke riprodhuar ruajtjen e përkohshme të çdo përdoruesi. Si rezultat, kopja mund të përdoret për të përpunuar funksionet sa herë që përdoruesi kthehet në linjë. Nëse serveri origjinal bëhet i aksesueshëm, si rastet origjinale ashtu edhe ato të kopjeve të ruajtjes kalimtare të përdoruesit kombinohen në një dyqan të vetëm.
6. Teknikat e optimizmit
gjendje latente: Për të ofruar një përvojë të qetë dhe të përmirësuar të klientit, shërbimi i mesazheve duhet të jetë në kohë reale. Si rezultat, vonesa duhet të reduktohet duke ruajtur një pjesë të të dhënave të aksesuara shpesh. Ne mund të ruajmë në memorie statusin e aktivitetit të përdoruesit dhe bisedat e fundit duke përdorur një memorie të shpërndarë si Redis.
Disponueshmëri: Ne kemi nevojë që shërbimi ynë të jetë i disponueshëm shumicën e kohës. Sistemi ynë duhet të jetë tolerant ndaj gabimeve, kështu që ne mund të mbajmë disa kopje të mesazheve kalimtare në mënyrë që çdo mesazh i humbur të mund të rikuperohet shpejt nga dublikatat e tij. Si rezultat, disponueshmëria e sistemit nuk mund të rrezikohet.
Përfundim
Sistemi ynë tani mbështet vetëm disa aftësi, por ne mund ta zgjerojmë lehtësisht për të shtuar biseda në grup për të shpërndarë mesazhe te disa individë. Ju gjithashtu mund të ofroni aftësi video dhe thirrje telefonike. Ky sistem mund të zhvillohet gjithashtu në mënyrë që përdoruesit të mund të publikojnë përditësime të statusit ose tregime dhe të lexojnë njëri-tjetrin.
Kam punuar shumë për t'ju ofruar një përmbledhje të nivelit të lartë të dizajnit të sistemit WhatsApp. Shpresoj se ju ka pëlqyer dhe do ta përdorni mirë.
Lini një Përgjigju