歡迎來到 WhatsApp 系統設計的奇妙而混亂的世界!本文不僅會揭開WhatsApp 的高層(HLD)和低層(LLD)架構的神秘面紗,還會加入一些幽默(因為系統設計並不一定很無聊!)並為您繪製一些圖表(因為我們所有喜歡流程圖)。
所以,繫好安全帶,喝杯咖啡,讓我們開始一段旅程,伺服器、資料庫和訊息協定聯合起來,將數十億條訊息傳送到您的手機上。
目錄:
- 高層架構(HLD)
- 底層架構(LLD)
- 流程圖:設計英雄
- 核心組件分解
- 為什麼要使用這些組件?
- 有趣的事實和 WhatsApp 特定最佳化
1. 高層架構(HLD):大局
將 WhatsApp 想像成一首精心編排的交響樂,但我們有服務器而不是小提琴,我們有資料庫而不是大提琴。在較高層面上,我們正在設計一個支援以下功能的系統:
- 數十億用戶
- 即時訊息
- 多媒體分享
- 端對端加密
- 高可用性和低延遲(沒有人喜歡等待“打字...”)
HLD概述:
在HLD,我們像建築師一樣思考。您還不關心每個窗戶的形狀 - 您只想確保房子不會倒塌。
從 30,000 英尺的高度來看,WhatsApp 的架構包括:
-
Applications clientes (iOS, Android, Web)
- Passerelle API
-
Load Balancers (équilibrant le chaos de millions de messages)
-
Serveurs d'applications (là où la magie opère)
-
Couche de base de données (car les données doivent vivre quelque part)
-
Stockage de fichiers (pour ces GIF de chat)
-
Files d'attente de messages (systèmes de type Kafka pour la messagerie en temps réel)
-
Serveurs de notification (je dois vous informer lorsque votre béguin répond)
Éléments fondamentaux du DHN :
-
Applications client :
WhatsApp fonctionne sur les applications mobiles (iOS/Android), Web et de bureau, qui se connectent toutes aux mêmes serveurs backend. Le client est responsable de l'UI/UX, de l'envoi/réception des messages, du cryptage/déchiffrement (nous y reviendrons) et de la reconnexion lorsque votre Wi-Fi décide de prendre une pause-café.
-
Passerelle API :
Il s'agit de l'intermédiaire qui traite les demandes des clients et les transmet au service backend approprié. L'API Gateway vérifie si vous êtes correctement authentifié, enregistre vos demandes de messages et vous envoie au bon serveur.
-
Équilibreurs de charge :
Avec des millions d'utilisateurs en ligne, vous avez besoin d'un chef d'orchestre (ou deux) pour vous assurer qu'aucun serveur ne soit submergé. Les équilibreurs de charge répartissent les requêtes sur de nombreux serveurs d'applications, ce qui évite les surcharges et rend les choses très rapides.
-
Serveurs d'applications :
Ces mauvais garçons sont le cerveau de WhatsApp. Ils traitent les messages, gèrent les sessions utilisateur et effectuent le chiffrement. La clé ici est l’évolutivité ; si plus d'utilisateurs nous rejoignent, nous ajoutons plus de serveurs.
-
Couche de base de données :
Où vont tous vos messages et médias ? C'est là qu'interviennent les bases de données :
-
Bases de données NoSQL (Cassandra) : pour stocker des données à grande échelle telles que les profils utilisateur, l'historique des messages, etc.
-
Bases de données SQL : dans de rares cas, où des données relationnelles sont requises (comme les dossiers financiers).
-
Stockage de fichiers :
Toutes vos photos, vidéos et notes vocales sont stockées dans des systèmes de stockage de fichiers distribués évolutifs. Pensez à S3 (mais WhatsApp a probablement construit quelque chose de personnalisé, parce qu'ils sont cool comme ça).
-
Files d'attente de messages (Kafka/Redis) :
Pour la messagerie en temps réel, WhatsApp utilise des files d'attente de messages pour gérer la transmission des messages sur différents serveurs. Si un utilisateur est hors ligne, le message est stocké dans une file d'attente jusqu'à son retour.
-
Serveurs de notifications :
Lorsque l'écran de votre téléphone est éteint, WhatsApp envoie une notification via des services tels que les APN (Apple Push Notification Service) et Firebase Cloud Messaging pour Android.
Organigramme DHN :
Voici un organigramme de base pour visualiser l'interaction entre les clients, les services backend et les bases de données dans WhatsApp :
+---------------+ +--------------+
Client (Mobile) -->| API Gateway |---> LB ---> | Application |
(Client (Web)) --> | (Rate limiting)| | Servers |
+---------------+ +--------------+
| |
| |
V V
+-------------+ +--------------+
| Message | | Notification |
| Queues | | Servers |
+-------------+ +--------------+
|
V
+---------------+
| Databases | (Cassandra, File Storage)
+---------------+
Copier après la connexion
2. Architecture de bas niveau (LLD) : les moindres détails
Chez LLD, nous nous concentrons sur la mise en œuvre et les détails techniques des composants individuels. C'est là que nous approfondissons les algorithmes, le partitionnement de bases de données, les méthodes de cryptage et les protocoles réseau.
Concepts clés du LLD :
-
Système de transmission des messages :
- WhatsApp utilise un protocole XMPP pour la transmission des messages en temps réel. Il s'agit d'un protocole léger et efficace qui gère à la fois la messagerie individuelle et la messagerie de groupe.
- Les messages sont stockés temporairement si le destinataire est hors ligne et remis une fois en ligne.
-
Cryptage de bout en bout :
Le cryptage de bout en bout de WhatsApp est basé sur le Signal Protocol. L'idée est simple mais géniale :
- Chaque message possède sa propre clé de cryptage unique.
- Ni WhatsApp ni aucun tiers ne peuvent lire vos messages car seuls l'expéditeur et le destinataire détiennent les clés nécessaires.
Si WhatsApp était un roman d'espionnage, le message s'autodétruirait si la mauvaise personne essaie de le lire !
-
Stockage et réplication des données :
-
Cassandra (base de données NoSQL) est utilisée pour stocker les messages de discussion. Pourquoi? Il est distribué, hautement disponible et peut gérer la réplication sur plusieurs centres de données. Cassandra s'assure que même si un serveur tombe en panne (ce qui se produit lorsque les serveurs décident qu'ils ont besoin d'une sieste), les données ne sont pas perdues.
- Les fichiers multimédias (comme les images et les vidéos) sont stockés séparément des messages texte, souvent dans un système de stockage de fichiers basé sur le cloud.
-
Gestion des utilisateurs hors ligne :
- Si vous envoyez un message et que le destinataire est hors ligne, le message est mis en file d'attente à l'aide d'un système comme Kafka/Redis. C’est comme laisser un message sur la porte de quelqu’un lorsqu’il n’est pas à la maison, sauf que le message est rangé en toute sécurité dans une file d’attente.
-
Partage de base de données :
- Avec des millions d’utilisateurs, WhatsApp ne peut pas stocker les données de tout le monde dans une base de données géante. Ce serait comme essayer de faire entrer tous les gens du monde dans un seul ascenseur.
- Au lieu de cela, WhatsApp fragmente la base de données. Le partage, c'est comme diviser l'ascenseur en une centaine d'ascenseurs plus petits, chacun responsable de son propre groupe d'utilisateurs.
Organigramme LLD :
Voici un organigramme LLD simplifié axé sur la messagerie en temps réel et les files d'attente de messages :
+------------------+ Send Message +-------------------+
| Client App |---------------->| API Gateway |
+------------------+ +-------------------+
| |
| Authenticate User |
V V
+----------------+ +------------------+
| Message Queue | <--Store Msg---| Application |
| (Kafka/Redis) | | Servers (XMPP) |
+----------------+ +------------------+
| |
| Offline/Store Msg |
|------------------------------->
V
+-------------+
| Database | (Sharded Cassandra, File Storage)
+-------------+
Copier après la connexion
3. Flowcharts: Our Design Heroes
Let's add some diagrams to make things super clear. Imagine flowcharts as the architects' blueprints; they help us understand the system visually.
Message Sending Flow:
Client (Mobile App)
|
V
API Gateway ---> Authenticate ---> Forward to Application Server
|
V
Load Balancer ---> Routes to Least Busy Server
|
V
Message Queue ---> Holds the message if the user is offline
|
V
Database ---> Saves the message for future retrieval
Copier après la connexion
Message Retrieval Flow:
Client (Mobile App) ---> Sends Request to API Gateway
|
V
API Gateway ---> Validates Request ---> Passes to Application Server
|
V
Message Queue ---> Delivers the queued messages if the user was offline
|
V
Database ---> Fetches Message History
|
V
Client ---> Displays Messages
Copier après la connexion
4. Core Components Breakdown
Let’s break down some of the critical components in more detail:
-
XMPP: Das Messaging-Protokoll, das zum Senden und Empfangen von Echtzeitnachrichten verwendet wird.
-
Kafka/Redis: Verantwortlich für das Einreihen von Nachrichten in die Warteschlange, wenn der Empfänger offline ist.
-
Cassandra: NoSQL-Datenbank, die Nachrichten, Benutzerdaten und Chat-Verlauf speichert.
-
Signalprotokoll: Unterstützt die End-to-End-Verschlüsselung für den Datenschutz von Nachrichten.
-
Sharding: Teilt die Datenbank in kleinere, besser verwaltbare Teile auf, um Millionen von Benutzern zu verwalten.
5. Warum diese Komponenten?
Warum Kassandra?
- Da WhatsApp eine hohe Verfügbarkeit, geringe Latenz und die Fähigkeit benötigt, verteilte Datenbanken über mehrere Standorte hinweg zu verwalten, ist Cassandra die perfekte Lösung. Außerdem ist es so konzipiert, dass es niemals ausfällt, und WhatsApp liebt diese Zuverlässigkeit.
Warum XMPP?
- XMPP ist leichtgewichtig, effizient und für Echtzeit-Messaging konzipiert. Perfekt für ein System, bei dem Sie es sich nicht leisten können, zu spät zu kommen – zum Beispiel Ihren Freunden zu erzählen, dass der Film in 5 Minuten beginnt.
Warum Kafka/Redis?
- Nachrichtenwarteschlangen stellen sicher, dass keine Nachricht verloren geht, selbst wenn sich der Empfänger im Urlaub in einer Zone ohne WLAN befindet. Kafka und Redis sind zuverlässig, schnell und skalierbar.
Warum Signalprotokoll zur Verschlüsselung?
- WhatsApp möchte Ihre Nachrichten nicht lesen (ich verspreche es). Dank der Ende-zu-Ende-Verschlüsselung können sie sie physisch nicht lesen, da nur Sie und Ihr Empfänger über die Schlüssel verfügen.
6. Fun Facts und WhatsApp-spezifische Optimierungen
-
Unterstützung für mehrere Geräte: WhatsApp ermöglicht Benutzern die Verwendung desselben Kontos auf mehreren Geräten. Dies erfordert eine sorgfältige Sitzungsverwaltung und Nachrichtensynchronisierung.
-
Effiziente Medienspeicherung: WhatsApp optimiert die Medienspeicherung durch Deduplizierung identischer Mediendateien, die in verschiedenen Chats geteilt werden (weil wir alle diesen einen Freund haben, der an jede Gruppe das gleiche Meme sendet).
Fazit: Alles zusammenbringen
Da haben Sie es also – eine Tour durch das Systemdesign von WhatsApp! Wir haben uns mit High-Level-Architektur (HLD) beschäftigt, uns mit Low-Level-Design (LLD) beschäftigt und sogar etwas Humor hineingeworfen, damit die Reise Spaß macht. Von XMPP-Protokollen bis hin zu Kafka-Warteschlangen, Cassandra-Datenbanken und Signalverschlüsselung ist WhatsApp ein Meisterwerk des skalierbaren Echtzeit-Messaging, das unsere Gruppenchats am Leben hält!
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!