Spis treści[Ukryć][Pokazać]
WhatsApp to program do przesyłania wiadomości społecznościowych, który umożliwia użytkownikom wymianę wiadomości między sobą.
Czy zastanawiałeś się kiedyś, jak działa WhatsApp?
Jakie koncepcje leżą u podstaw jego tworzenia i działania?
W tym artykule omówimy podstawy WhatsApp projekt systemu.
Omówimy również ogólną architekturę WhatsApp, której można użyć do zbudowania dowolnego oprogramowania do czatowania.
Tak więc, bez zbędnych ceregieli, spójrzmy na projekt systemu WhatsApp!
1. Kluczowe wymagania
WhatsApp to wysoce skalowalna technologia, z której korzysta wiele osób na całym świecie. W rezultacie powinien być dobrze zaprojektowany, aby praktycznie zawsze był niezawodny i działał.
W rezultacie określenie krytycznych potrzeb systemu ma kluczowe znaczenie.
Oto minimalne wymagania dla komunikatora WhatsApp:
- Zdolny do ułatwienia interakcji jeden na jeden.
- Możliwe jest zarówno potwierdzenie wiadomości, jak i ostatnio widziana (Wysłana, Dostarczona i Odczytana).
- Zezwalaj na kompleksowe szyfrowanie i obsługę multimediów (obrazy/filmy).
Dowiedzmy się, jakiej przepustowości wymaga nasza niezbędna usługa.
2. Szacowanie pojemności
Naszym celem jest stworzenie platformy zdolnej obsłużyć duży ruch. Załóżmy, że każdego dnia wysyłanych jest 10 miliardów SMS-ów. Mamy:
- Każdego dnia miliard ludzi wysyła 10 miliardów SMS-ów.
- W szczytowym ruchu (na sekundę) aktywnych było 700,000 6 osób (średnia XNUMXX)
- Podczas szczytowego obciążenia przesyłanych jest 40 milionów wiadomości na sekundę.
- Średnia długość wiadomości to 160 znaków: 10B * 160 = 1.6 TB danych jest generowanych każdego dnia.
- Weźmy jako przykład dziesięć lat służby: 10 * 1.6 B * 365 PB
- Cała aplikacja będzie się składać z mikroserwisów, z których każdy będzie wykonywał wyspecjalizowane zadanie. Załóżmy, że wysłanie wiadomości zajmuje 20 milisekund i że na serwer przypada 100 jednoczesnych połączeń. W rezultacie przewidywana liczba wymaganych serwerów czatu = (wiadomości czatu na sekundę Opóźnienie)/jednoczesnych połączeń na serwer = 40M * 20ms / 100 = 8000 serwerów.
3. Architektura wysokiego poziomu
Ten system jest zbudowany na dwóch podstawowych usługach. Na przykład usługa czatu i usługa przejściowa. Usługa czatu obsługuje cały ruch generowany przez wiadomości online użytkowników. Jednocześnie usługa tymczasowa obsługuje ruch, gdy użytkownik jest offline.
Jeśli użytkownik jest online, za dostarczanie wiadomości odpowiada usługa czatu.
Zweryfikuje, czy odbiorca wiadomości jest online, czy nie; jeśli odbiorca jest online, ta usługa natychmiast dostarczy wiadomość; jeśli odbiorca nie jest online, usługa przejściowa wyśle do niego wiadomość, gdy powróci do trybu online.
Usługa przejściowa utrzymuje oddzielny obszar przechowywania do przechowywania tymczasowo dostępnych danych, dopóki użytkownik offline nie połączy się ponownie.
Projektowanie interfejsów API wysokiego poziomu
Ta usługa ma dwa działające interfejsy API wysokiego poziomu do wysyłania i odczytywania wiadomości. System może zostać zaimplementowany z wykorzystaniem architektury REST.
Parametry wysyłania wiadomości
Ten interfejs API będzie używany do przesyłania wiadomości między dwoma użytkownikami.
Parametry rozmowy
Ten interfejs API służy do wyświetlania czatów z wątkami. Rozważ to jako pierwszą rzecz, którą zobaczysz po otwarciu WhatsApp. Chcielibyśmy uzyskać tylko kilka komunikatów dla jednego użytkownika w jednym zapytaniu API. Aby sobie z tym poradzić, potrzebne są parametry przesunięcia i liczby komunikatów.
Jakie są funkcje funkcji, takich jak ostatnio widziany, pojedynczy tik i podwójny tik?
Ważną rolą we wdrażaniu tych usług jest usługa potwierdzenia. Te funkcje zostały opracowane, ponieważ ta usługa nadal generuje i weryfikuje odpowiedzi potwierdzające.
- Pojedynczy tik: Kiedy wiadomość od Użytkownika A dociera do Użytkownika B, serwer wysyła pojedynczy tik potwierdzający, że wiadomość została przesłana.
- Podwójne zaznaczenie: Po wysłaniu wiadomości serwera do użytkownika B przez odpowiednie połączenie, użytkownik B potwierdzi otrzymanie wiadomości na serwerze. Następnie serwer przekaże Użytkownikowi A kolejne potwierdzenie. W rezultacie pojawi się zduplikowany znacznik.
- Niebieski kleszcz: Użytkownik B wyśle kolejne potwierdzenie do serwera po sprawdzeniu wiadomości. Następnie serwer wyśle użytkownikowi A dodatkową wiadomość potwierdzającą. Następnie na ekranie Użytkownika A pojawi się niebieski znacznik wyboru.
- Ostatnio widziany: Mechanizm bicia serca jest całkowicie odpowiedzialny za ostatnio widzianą cechę. Co 5 sekund puls jest przesyłany do serwera, który śledzi ostatni status każdego użytkownika w tabeli, do której każdy inny użytkownik ma łatwy dostęp.
4. Projektowanie kluczowych funkcji
Spersonalizowana interakcja
Jest to niezbędna część usługi Czat. Użytkownik może po prostu wysyłać wiadomości do innego użytkownika za pomocą tej usługi. Przyjrzyjmy się, jak to działa:
Załóżmy, że Jay chce komunikować się z Aayushem. Jay jest połączony z serwerem czatu, za pomocą którego otrzymuje wiadomość. Jay otrzymuje potwierdzenie z serwera czatu, że wiadomość została wysłana. Serwer czatu żąda teraz informacji z magazynu danych o serwerze czatu, z którym połączony jest Aayush. Serwer czatu Jaya przesyła teraz wiadomość do serwera czatu Aayush, a Aayush odbiera wiadomość za pośrednictwem mechanizmu push. Aayush wysyła teraz potwierdzenie do serwera czatu Jaya, który powiadamia Jaya, że wiadomość została dostarczona. Jeśli Aayush przeczytał wiadomość ponownie, Jay otrzymał nowe potwierdzenie, że wiadomość została przeczytana.
Stan aktywności użytkownika
Ostatni czas, kiedy dana osoba była aktywna, jest stałą cechą komunikatorów internetowych.
Na tym diagramie przedstawiono system utrzymywania połączenia między klientem a serwerem. Gniazda sieciowe zostały wykorzystane do ustanowienia dwukierunkowego połączenia między serwerem a klientem. Te połączenia wysyłają sygnały pulsu, które są używane do monitorowania stanu aktywności użytkownika.
Pełna prywatność
Szyfrowanie od końca do końca jest kluczową funkcją, która zapewnia, że tylko rozmawiający użytkownicy mogą czytać komunikację. Klucz publiczny jest współdzielony przez wszystkich użytkowników zaangażowanych w komunikację i ma kluczowe znaczenie dla zachowania pełnego szyfrowania. Załóżmy, że na kanale jest dwóch użytkowników, Jay i Aayush, którzy komunikują się ze sobą.
Jay ma klucz publiczny Aayusha, a Aayush ma klucz publiczny Jaya, a także ich niewspółdzielony klucz prywatny. W rezultacie, gdy Jay przesyła wiadomość, szyfruje ją kluczem publicznym Aayusha, który można odkodować tylko za pomocą klucza prywatnego Aayusha.
Podobnie Jay będzie w stanie rozszyfrować tylko komunikację Aayusha. W rezultacie tylko Jay i Aaysuh będą mogli zobaczyć swoją komunikację, a serwer będzie funkcjonował jako brama w całym procesie.
5. Wąskie gardła
Każdy system jest podatny na awarie. Aby zarządzać tak dużym natężeniem ruchu, usługa musi przez cały czas działać i być odporna na awarie, aby uniknąć wąskich gardeł. Ponieważ nasza usługa jest całkowicie zależna od serwerów Chat i Transient, musimy rozwiązać wszystkie problemy wynikające z ich działania.
Awaria serwera czatu: To serce naszego systemu. Gdy użytkownicy są online, odpowiada za zarządzanie i dostarczanie wiadomości. W rezultacie system ten utrzymuje powiązania z użytkownikami.
W rezultacie, jeśli ta usługa zawiedzie, ucierpi na tym cała architektura. Istnieją dwa podejścia do zarządzania awarią serwera czatu. Jedną z metod jest przeniesienie połączeń TCP na inny serwer, a drugą umożliwienie użytkownikom automatycznego rozpoczynania połączeń w przypadku utraty połączenia.
Awaria pamięci przejściowej: Innym komponentem podatnym na awarie, który może ostatecznie uszkodzić całą usługę, jest pamięć przejściowa. Wiadomości w drodze do użytkowników offline zostaną utracone, jeśli ta usługa ulegnie awarii.
Możemy zapobiec utracie wiadomości, replikując pamięć tymczasową każdego użytkownika. W rezultacie replika może zostać wykorzystana do przetwarzania funkcji za każdym razem, gdy użytkownik powróci do trybu online. Jeśli oryginalny serwer stanie się dostępny, zarówno oryginalne, jak i repliki przejściowej pamięci masowej użytkownika zostaną połączone w jeden magazyn.
6. Techniki optymalizacyjne
Utajenie: Aby zapewnić bezproblemową i ulepszoną obsługę klienta, usługa komunikatora musi działać w czasie rzeczywistym. W rezultacie opóźnienie musi zostać zmniejszone poprzez buforowanie części często używanych danych. Możemy buforować status aktywności użytkownika i ostatnie rozmowy w pamięci za pomocą rozproszonej pamięci podręcznej, takiej jak Redis.
Dostępność: Potrzebujemy, aby nasza usługa była dostępna przez większość czasu. Nasz system musi być odporny na awarie, dlatego możemy przechowywać kilka kopii wiadomości przejściowych, aby każdą utraconą wiadomość można było szybko odzyskać z jej duplikatów. W rezultacie dostępność systemu nie może być zagrożona.
Wnioski
Nasz system obsługuje teraz tylko kilka funkcji, ale możemy go łatwo rozszerzyć, dodając czaty grupowe w celu dystrybucji wiadomości do kilku osób. Możesz także zapewnić możliwości połączeń wideo i telefonicznych. System ten można również opracować w taki sposób, aby użytkownicy mogli publikować aktualizacje statusu lub narracje i czytać się nawzajem.
Ciężko pracowałem, aby zapewnić ogólny przegląd projektu systemu WhatsApp. Mam nadzieję, że się podobało i dobrze to wykorzystasz.
Dodaj komentarz