Sisällysluettelo[Piilottaa][Näytä]
WhatsApp on sosiaalinen viestintäohjelma, jonka avulla käyttäjät voivat vaihtaa viestejä keskenään.
Oletko koskaan miettinyt, miten WhatsApp toimii?
Mitkä ovat sen luomisen ja toiminnan taustalla olevat käsitteet?
Tässä artikkelissa käydään läpi WhatsAppin perusteet Järjestelmäsuunnittelu.
Käymme läpi myös WhatsAppin yleisen arkkitehtuurin, jota voidaan käyttää minkä tahansa chat-ohjelmiston rakentamiseen.
Joten, ilman pitkiä puheita, katsotaanpa WhatsAppin järjestelmäsuunnittelua!
1. Keskeiset vaatimukset
WhatsApp on erittäin skaalautuva tekniikka, jota käyttävät monet ihmiset ympäri maailmaa. Tämän seurauksena sen tulisi olla hyvin suunniteltu olemaan käytännöllisesti katsoen aina luotettava ja toimiva.
Tämän seurauksena järjestelmän kriittisten tarpeiden määrittäminen on kriittistä.
Nämä ovat WhatsApp Messengerin vähimmäisvaatimukset:
- Pystyy helpottamaan kahdenkeskistä vuorovaikutusta.
- Viestin kuittaus ja viimeksi nähty ovat molemmat mahdollisia (lähetetty, toimitettu ja luettu).
- Salli päästä päähän -salaus ja mediatuki (kuvat/videot).
Selvitetään kuinka paljon kapasiteettia tarvitsemme palvelumme.
2. Kapasiteetin arviointi
Tavoitteenamme on luoda alusta, joka pystyy käsittelemään suuren määrän liikennettä. Oletetaan, että 10 miljardia tekstiviestiä lähetetään päivässä. Meillä on:
- Miljardi ihmistä lähettää joka päivä 10 miljardia tekstiviestiä.
- Liikenteen ruuhkassa (sekunnissa) 700,000 6 ihmistä oli aktiivisia (XNUMXX keskiarvo)
- Huippukäytön aikana lähetetään 40 miljoonaa viestiä sekunnissa.
- Viestin keskimääräinen pituus on 160 merkkiä: 10 B * 160 = 1.6 Tt dataa luodaan joka päivä.
- Otetaan esimerkiksi kymmenen vuoden palvelusaika: 10 * 1.6 B * 365 PB
- Koko sovellus koostuu mikropalveluista, joista jokainen suorittaa erikoistehtävän. Oletetaan, että viestin lähettäminen kestää 20 millisekuntia ja että palvelinta kohden on 100 samanaikaista yhteyttä. Seurauksena on, että tarvittavien chat-palvelimien odotettu määrä = (chat-viestejä sekunnissa Latenssi)/ samanaikaiset yhteydet palvelinta kohti = 40M * 20ms / 100 = 8000 palvelinta.
3. Korkeatasoinen arkkitehtuuri
Tämä järjestelmä on rakennettu kahteen ydinpalveluun. Chat-palvelu ja tilapäispalvelu esimerkiksi. Chat-palvelu käsittelee kaiken käyttäjien verkkoviestien tuottaman liikenteen. Samalla väliaikainen palvelu käsittelee liikennettä käyttäjän ollessa offline-tilassa.
Jos käyttäjä on online-tilassa, chat-palvelu vastaa viestien toimittamisesta.
Se tarkistaa, onko viestin vastaanottaja online-tilassa vai ei; jos vastaanottaja on verkossa, tämä palvelu toimittaa viestin välittömästi; Jos vastaanottaja ei ole online-tilassa, tilapäispalvelu lähettää viestin hänelle, kun he palaavat verkkoon.
Väliaikainen palvelu pitää erillisen tallennusalueen tilapäisesti käytettävissä olevien tietojen säilyttämiseksi, kunnes offline-käyttäjä muodostaa yhteyden uudelleen.
Korkean tason API:iden suunnittelu
Tässä palvelussa on kaksi korkean tason toimivaa API:ta viestien lähettämiseen ja lukemiseen. Järjestelmä voidaan toteuttaa REST-arkkitehtuurilla.
Parametrit viestien lähettämiseen
Tätä API:ta käytetään viestien välittämiseen kahden käyttäjän välillä.
Keskustelun parametrit
Tätä sovellusliittymää käytetään ketjutettujen keskustelujen näyttämiseen. Pidä tätä ensimmäisenä asiana, jonka näet, kun avaat WhatsAppin. Haluaisimme saada vain muutaman viestin yhdelle käyttäjälle yhdessä API-kyselyssä. Tämän käsittelemiseksi tarvitaan offset- ja viestimääräparametreja.
Mitkä ovat ominaisuuksien, kuten viimeksi nähty, yksi rasti ja kaksoismerkki, toiminnot?
Näiden palveluiden käyttöönotossa tärkeä rooli on kuittauspalvelu. Nämä ominaisuudet kehitettiin, koska tämä palvelu jatkaa kuittausvastausten luomista ja tarkistamista.
- Yksi rasti: Kun viesti käyttäjältä A saavuttaa käyttäjän B, palvelin lähettää yhden rastin, joka vahvistaa, että viesti on lähetetty.
- Tupla rasti: Kun palvelimen viesti on lähetetty käyttäjälle B oikean yhteyden kautta, käyttäjä B kuittaa viestin vastaanottamisen palvelimelle. Palvelin antaa sitten käyttäjälle A toisen kuittauksen. Tämän seurauksena näkyviin tulee kaksoismerkki.
- Sininen punkki: Käyttäjä B lähettää uuden kuittauksen palvelimelle tarkistettuaan viestin. Palvelin lähettää sitten käyttäjälle A ylimääräisen kuittausviestin. Tämän jälkeen käyttäjän A näytölle ilmestyy sininen rasti.
- viimeksi nähty: Sydämenlyöntimekanismi on täysin vastuussa viimeksi nähdystä ominaisuudesta. Joka 5. sekunti, syke lähetetään palvelimelle, joka pitää kirjaa kunkin käyttäjän viimeksi nähdyn tilan taulukossa, johon kuka tahansa muu käyttäjä voi helposti päästä.
4. Keskeisten ominaisuuksien suunnittelu
Henkilökohtainen vuorovaikutus
Tämä on välttämätön osa Chat-palvelua. Käyttäjä voi yksinkertaisesti lähettää viestejä toiselle käyttäjälle tätä palvelua käyttämällä. Katsotaanpa, miten tämä toimii:
Oletetaan, että Jay haluaa kommunikoida Aayushin kanssa. Jay on linkitetty chat-palvelimeen, jonka kautta hän vastaanottaa viestin. Jay saa vahvistuksen chat-palvelimelta, että viesti on lähetetty. Chat-palvelin pyytää nyt tietoja tietovarastosta chat-palvelimesta, johon Aayush on yhteydessä. Jayn chat-palvelin lähettää nyt viestin Aayushin chat-palvelimelle, ja Aayush vastaanottaa viestin push-mekanismin kautta. Aayush lähettää nyt kuittauksen Jayn chat-palvelimelle, joka ilmoittaa Jaylle, että viesti on toimitettu. Jos Aayush luki viestin uudelleen, Jaylle toimitettiin uusi vahvistus siitä, että viesti oli luettu.
Käyttäjätoiminnan tila
Viimeinen kerta, kun henkilö oli aktiivinen, on pikaviestien säännöllinen ominaisuus.
Tässä kaaviossa on esitetty järjestelmä asiakkaan ja palvelimen välisen yhteyden ylläpitämiseksi. Web-socketteja käytettiin luomaan kaksisuuntainen yhteys palvelimen ja asiakkaan välille. Nämä yhteydet lähettävät sydämenlyöntejä, joiden avulla seurataan käyttäjän aktiivisuuden tilaa.
Päästä päähän -tietosuoja
Päästä päähän -salaus on keskeinen ominaisuus, joka varmistaa, että vain keskustelevat käyttäjät voivat lukea viestintää. Julkinen avain jaetaan kaikkien viestintään osallistuvien käyttäjien kesken, ja se on ratkaisevan tärkeä päästä päähän -salauksen ylläpitämiselle. Oletetaan, että kanavalla on kaksi käyttäjää, Jay ja Aayush, jotka kommunikoivat keskenään.
Jaylla on Aayushin julkinen avain ja Aayushilla Jayn julkinen avain sekä heidän ei-jaettu yksityinen avain. Tämän seurauksena, kun Jay lähettää viestin, hän salaa sen Aayushin julkisella avaimella, joka voidaan purkaa vain Aayushin yksityisellä avaimella.
Samoin Jay pystyy vain purkamaan Aayushin viestinnän. Tämän seurauksena vain Jay ja Aaysuh voivat nähdä toistensa viestinnän ja palvelin toimii vain yhdyskäytävänä koko prosessissa.
5. Pullonkaulat
Jokainen järjestelmä on altis toimintahäiriöille. Näin suuren liikenteen hoitamiseksi palvelun tulee pysyä toimintakuntoisena ja vikasietoisena koko ajan pullonkaulojen välttämiseksi. Koska palvelumme on täysin riippuvainen Chat- ja Transient-palvelimista, meidän on ratkaistava kaikki niiden toiminnasta aiheutuvat ongelmat.
Chat-palvelimen vika: Tämä on järjestelmämme sydän. Kun käyttäjät ovat verkossa, se on vastuussa viestien hallinnasta ja toimittamisesta. Tämän seurauksena tämä järjestelmä ylläpitää linkkejä käyttäjiinsä.
Tämän seurauksena, jos tämä palvelu epäonnistuu, koko arkkitehtuuri kärsii. Chat-palvelimen vian hallintaan on kaksi tapaa. Yksi tapa on siirtää TCP-yhteydet toiseen palvelimeen, kun taas toinen on antaa käyttäjien aloittaa yhteydet automaattisesti, jos yhteys katkeaa.
Väliaikaisen varastoinnin epäonnistuminen: Toinen komponentti, joka voi vahingoittaa koko palvelua, on väliaikainen tallennus. Viestit matkalla offline-käyttäjille menetetään, jos tämä palvelu epäonnistuu.
Voimme estää viestien katoamisen replikoimalla jokaisen käyttäjän väliaikaisen tallennustilan. Tämän seurauksena kopiota voidaan käyttää toimintojen käsittelemiseen aina, kun käyttäjä palaa verkkoon. Jos alkuperäinen palvelin tulee saataville, sekä alkuperäiset että kopiot käyttäjän väliaikaisesta tallennustilasta yhdistetään yhdeksi varastoksi.
6. Optimointitekniikat
Viive: Saumattoman ja paremman asiakaskokemuksen tarjoamiseksi messenger-palvelun on oltava reaaliaikainen. Tämän seurauksena latenssia on vähennettävä tallentamalla osa usein käytetyistä tiedoista välimuistiin. Voimme tallentaa käyttäjän toiminnan tilan ja viimeisimmät keskustelut muistiin hajautetun välimuistin, kuten Redisin, avulla.
Saatavuus: Tarvitsemme palvelumme olevan käytettävissä suurimman osan ajasta. Järjestelmämme on oltava vikasietoinen, joten voimme säilyttää useita kopioita tilapäisistä viesteistä, jotta kaikki kadonneet viestit voidaan nopeasti palauttaa kaksoiskappaleistaan. Tämän seurauksena järjestelmän käytettävyyttä ei voida vaarantaa.
Yhteenveto
Järjestelmämme tukee nyt vain muutamia ominaisuuksia, mutta voimme helposti laajentaa sitä lisäämään ryhmäkeskusteluja viestien jakamiseksi useille henkilöille. Voit myös tarjota video- ja puheluominaisuuksia. Tätä järjestelmää voidaan myös kehittää siten, että käyttäjät voivat julkaista tilapäivityksiä tai kertomuksia ja lukea toisiaan.
Tein kovasti töitä tarjotakseni sinulle korkean tason yleiskatsauksen WhatsApp-järjestelmän suunnittelusta. Toivottavasti pidit siitä ja käytät sitä hyvään käyttöön.
Jätä vastaus