Tartalomjegyzék[Elrejt][Előadás]
A WhatsApp egy közösségi üzenetküldő program, amely lehetővé teszi a felhasználók számára, hogy üzeneteket váltsanak egymással.
Gondolkodtál már azon, hogyan működik a WhatsApp?
Mik azok a fogalmak, amelyek létrehozását és működését támasztják alá?
Ez a cikk áttekinti a WhatsApp alapjait rendszertervezés.
Végignézzük a WhatsApp általános architektúráját is, amely bármilyen chatszoftver elkészítésére használható.
Tehát minden további nélkül nézzük meg a WhatsApp rendszertervet!
1. Főbb követelmények
A WhatsApp egy rendkívül méretezhető technológia, amelyet sok ember használ szerte a világon. Ennek eredményeként jól meg kell tervezni, hogy gyakorlatilag mindig megbízható és működőképes legyen.
Ennek eredményeként a rendszer kritikus igényeinek meghatározása kritikus.
Ezek a minimális követelmények a WhatsApp messengerhez:
- Képes az egy-egy interakciót elősegíteni.
- Az üzenet nyugtázása és az utoljára látott üzenet egyaránt lehetséges (elküldve, kézbesítve és olvasva).
- Engedélyezze a végpontok közötti titkosítást és a médiatámogatást (képek/videók).
Nézzük meg, mekkora kapacitást igényel a szükséges szolgáltatásunk.
2. Kapacitás becslése
Célunk egy olyan platform létrehozása, amely képes nagy mennyiségű forgalom kezelésére. Tegyük fel, hogy naponta 10 milliárd SMS-t küldenek. Megvan:
- Naponta 10 milliárd SMS-t küld egymilliárd ember.
- A csúcsforgalomban (másodpercenként) 700,000 6 ember volt aktív (átlag XNUMX-szoros)
- Csúcsforgalom idején másodpercenként 40 millió üzenet kerül továbbításra.
- Egy üzenet átlagos hossza 160 karakter: 10B * 160 = 1.6 TB adat generálódik naponta.
- Vegyünk például tíz év szolgálatot: 10 * 1.6 B * 365 PB
- A teljes alkalmazás mikroszolgáltatásokból áll majd, amelyek mindegyike egy-egy speciális feladatot fog végrehajtani. Tegyük fel, hogy egy üzenet elküldése 20 ezredmásodpercet vesz igénybe, és szerverenként 100 egyidejű kapcsolat van. Ennek eredményeként a szükséges csevegőkiszolgálók várható száma = (csevegési üzenetek másodpercenként késleltetés)/ egyidejű kapcsolatok szerverenként = 40 millió * 20 ms / 100 = 8000 szerver.
3. Magas szintű architektúra
Ez a rendszer két alapvető szolgáltatásra épül. Például chat szolgáltatás és átmeneti szolgáltatás. A chat szolgáltatás kezeli a felhasználók online üzenetei által generált összes forgalmat. Ezzel egyidejűleg az ideiglenes szolgáltatás kezeli a forgalmat, amikor a felhasználó offline állapotban van.
Ha a felhasználó online, a chat szolgáltatás felel az üzenetek kézbesítéséért.
Ellenőrzi, hogy az üzenet címzettje online-e vagy sem; ha a címzett online, ez a szolgáltatás azonnal kézbesíti az üzenetet; Ha a címzett nincs online, az átmeneti szolgáltatás elküldi neki az üzenetet, amikor visszatér az internetre.
Az átmeneti szolgáltatás külön tárolóterületet tart fenn az ideiglenesen elérhető adatok tárolására, amíg az offline felhasználó újra nem csatlakozik.
Magas szintű API-k tervezése
Ez a szolgáltatás két magas szintű működő API-val rendelkezik az üzenetek küldésére és olvasására. A rendszer REST architektúrával valósítható meg.
Üzenetek küldésének paraméterei
Ezt az API-t fogják használni két felhasználó közötti üzenetek továbbítására.
A beszélgetés paraméterei
Ez az API a szálas csevegések megjelenítésére szolgál. Tekintsd ezt az első dolognak, amit a WhatsApp megnyitásakor lát. Csak néhány üzenetet szeretnénk kapni egyetlen felhasználó számára egyetlen API-lekérdezésben. Ennek kezelésére az eltolás és az üzenetszám paraméterekre van szükség.
Mi a funkciója az olyan szolgáltatásoknak, mint az utoljára látott, az egyszeri tick és a kettős jelölés?
Ezeknek a szolgáltatásoknak a kiépítésében fontos szerepe van a nyugtázási szolgáltatásnak. Ezeket a funkciókat azért fejlesztették ki, mert ez a szolgáltatás továbbra is nyugtázó válaszokat generál és ellenőrzi.
- Egyetlen kullancs: Amikor az A felhasználó üzenete eléri B felhasználót, a szerver egyetlen pipát küld, nyugtázza, hogy az üzenetet elküldték.
- Dupla pipa: Miután a szerver üzenetét elküldték B felhasználónak a megfelelő kapcsolaton keresztül, B felhasználó visszaigazolja az üzenet fogadását a szervernek. A szerver ezután újabb nyugtát ad az A felhasználónak. Ennek eredményeként egy duplikált pipa jelenik meg.
- Kék kullancs: B felhasználó az üzenet ellenőrzése után újabb nyugtát küld a szervernek. A szerver ezután további nyugtázó üzenetet küld A felhasználónak. Ezt követően egy kék pipa jelenik meg A felhasználó képernyőjén.
- Utoljára: A szívverés mechanizmusa teljes mértékben felelős az utoljára látott funkcióért. 5 másodpercenként szívverés érkezik a szerverhez, amely minden felhasználó utoljára látott állapotát egy táblázatban követi, amelyhez bármely más felhasználó könnyen hozzáférhet.
4. A legfontosabb jellemzők tervezése
Személyre szabott interakció
Ez a Chat szolgáltatás elengedhetetlen része. A felhasználó egyszerűen üzeneteket küldhet egy másik felhasználónak ezzel a szolgáltatással. Nézzük meg, hogyan működik ez:
Tegyük fel, hogy Jay kommunikálni akar Aayush-val. Jay egy csevegőszerverhez kapcsolódik, amelyen megkapja az üzenetet. Jay megerősítést kap a csevegőszervertől, hogy az üzenetet elküldték. A csevegőszerver most információkat kér az adattártól arról a chat-kiszolgálóról, amelyhez az Aayush csatlakozik. Jay chat szervere most továbbítja az üzenetet Aayush chat szerverének, Aayush pedig push mechanizmuson keresztül kapja meg az üzenetet. Aayush most visszaigazolást küld Jay chat-szerverének, amely értesíti Jayt, hogy az üzenetet kézbesítették. Ha Aayush újra elolvasta az üzenetet, új visszaigazolást küldtek Jaynek, hogy az üzenetet elolvasták.
Felhasználói tevékenység állapota
Amikor egy személy utoljára volt aktív, az az azonnali üzenetküldők rendszeres jellemzője.
Ez a diagram egy, a kliens és a szerver közötti kapcsolatot fenntartó rendszert mutat be. Web socketeket használtak kétirányú kapcsolat létrehozására a szerver és a kliens között. Ezek a kapcsolatok szívveréseket küldenek, amelyek a felhasználó aktivitási állapotának figyelésére szolgálnak.
Teljes körű adatvédelem
A végpontok közötti titkosítás kulcsfontosságú funkció, amely biztosítja, hogy csak a beszélgető felhasználók tudják elolvasni a kommunikációt. A nyilvános kulcsot a kommunikációban részt vevő összes felhasználó megosztja, és kulcsfontosságú a végpontok közötti titkosítás fenntartásához. Tegyük fel, hogy két felhasználó van a csatornán, Jay és Aayush, akik kommunikálnak egymással.
Jay rendelkezik Aayush nyilvános kulcsával, Aayush pedig Jay nyilvános kulcsával, valamint nem megosztott privát kulcsával. Ennek eredményeként, amikor Jay továbbítja az üzenetet, azt Aayush nyilvános kulcsával titkosítja, amelyet csak Aayush privát kulcsával lehet dekódolni.
Hasonlóképpen, Jay csak Aayush kommunikációját tudja majd dekódolni. Ennek eredményeként csak Jay és Aaysuh láthatja majd egymás kommunikációját, a szerver pedig csak átjáróként fog működni az egész folyamatban.
5. Szűk keresztmetszetek
Minden rendszer hajlamos a meghibásodásokra. Egy ekkora forgalom lebonyolításához a szolgáltatásnak folyamatosan működőképesnek és hibatűrőnek kell maradnia a szűk keresztmetszetek elkerülése érdekében. Mivel szolgáltatásunk teljes mértékben a Chat és Transient szerverekre támaszkodik, meg kell oldanunk a működésükből adódó összes problémát.
A Chat szerver meghibásodása: Ez a rendszerünk szíve. Amikor a felhasználók online vannak, ő felelős az üzenetek kezeléséért és kézbesítéséért. Ennek eredményeként ez a rendszer kapcsolatot tart fenn felhasználóival.
Ennek eredményeként, ha ez a szolgáltatás meghibásodik, az egész architektúra szenved. A csevegőszerver meghibásodásának kezelésére kétféle megközelítés létezik. Az egyik módszer a TCP-kapcsolatok áthelyezése egy másik szerverre, a másik pedig az, hogy lehetővé teszi a felhasználók számára, hogy kapcsolatvesztés esetén automatikusan csatlakozzanak.
Az átmeneti tárolás meghibásodása: Egy másik meghibásodásra hajlamos összetevő, amely végül a teljes szolgáltatást károsíthatja, az átmeneti tárolás. Az offline felhasználóknak küldött üzenetek elvesznek, ha ez a szolgáltatás meghiúsul.
Megakadályozhatjuk az üzenetvesztést, ha replikáljuk az egyes felhasználók ideiglenes tárhelyét. Ennek eredményeként a replika felhasználható a függvények feldolgozására, amikor a felhasználó visszatér az internetre. Ha az eredeti kiszolgáló elérhetővé válik, a felhasználó átmeneti tárolójának eredeti és replikapéldánya is egyetlen tárolóba egyesül.
6. Optimalizálási technikák
Késleltetés: A zökkenőmentes és jobb ügyfélélmény biztosítása érdekében az üzenetküldő szolgáltatásnak valós idejűnek kell lennie. Ennek eredményeként a késleltetést csökkenteni kell a gyakran elért adatok egy részének gyorsítótárazásával. A felhasználói tevékenység állapotát és a legutóbbi beszélgetéseket a memóriában tárolhatjuk egy elosztott gyorsítótár segítségével, mint például a Redis.
Elérhetőség: Szükségünk van arra, hogy szolgáltatásunk az idő nagy részében elérhető legyen. Rendszerünknek hibatűrőnek kell lennie, így az átmeneti üzenetekről több másolatot is meg tudunk őrizni, így az elveszett üzeneteket gyorsan vissza lehet állítani a másolataiból. Ennek eredményeként a rendszer rendelkezésre állása nem kerülhet veszélybe.
Következtetés
Rendszerünk már csak néhány funkciót támogat, de egyszerűen kibővíthetjük csoportos csevegésekkel, amelyekkel több személyhez juttathatjuk el az üzeneteket. Videó- és telefonhívási lehetőségeket is biztosíthat. Ez a rendszer úgy is fejleszthető, hogy a felhasználók állapotfrissítéseket vagy narratívákat tegyenek közzé, és olvassák egymást.
Keményen dolgoztam, hogy magas szintű áttekintést nyújtsak a WhatsApp rendszertervezésről. Remélem tetszett és hasznosítani fogod.
Hagy egy Válaszol