搜尋
首頁Javajava教程WhatsApp 系統設計:高層與低層架構的幽默之旅

WhatsApp System Design: A Humorous Journey Through High-Level and Low-Level Architecture

歡迎來到 WhatsApp 系統設計的奇妙而混亂的世界!本文不僅會揭開WhatsApp 的高層(HLD)和低層(LLD)架構的神秘面紗,還會加入一些幽默(因為系統設計並不一定很無聊!)並為您繪製一些圖表(因為我們所有喜歡流程圖)。

所以,繫好安全帶,喝杯咖啡,讓我們開始一段旅程,伺服器、資料庫和訊息協定聯合起來,將數十億條訊息傳送到您的手機上。

目錄:

  1. 高層架構(HLD)
  2. 底層架構(LLD)
  3. 流程圖:設計英雄
  4. 核心組件分解
  5. 為什麼要使用這些組件?
  6. 有趣的事實和 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 :

  1. 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é.
  2. 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.
  3. É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.
  4. 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.
  5. 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).
  6. 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).
  7. 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.
  8. 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)
                   +---------------+


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 :

  1. 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.
  2. 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 !

  3. 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.
  4. 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.
  5. 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   |  
                       V
                +-------------+
                |   Database   | (Sharded Cassandra, File Storage)
                +-------------+


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

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


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

  1. 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.
  2. 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!

以上是WhatsApp 系統設計:高層與低層架構的幽默之旅的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
Java仍然是基於新功能的好語言嗎?Java仍然是基於新功能的好語言嗎?May 12, 2025 am 12:12 AM

Javaremainsagoodlanguageduetoitscontinuousevolutionandrobustecosystem.1)Lambdaexpressionsenhancecodereadabilityandenablefunctionalprogramming.2)Streamsallowforefficientdataprocessing,particularlywithlargedatasets.3)ThemodularsystemintroducedinJava9im

是什麼使Java很棒?關鍵特徵和好處是什麼使Java很棒?關鍵特徵和好處May 12, 2025 am 12:11 AM

Javaisgreatduetoitsplatformindependence,robustOOPsupport,extensivelibraries,andstrongcommunity.1)PlatformindependenceviaJVMallowscodetorunonvariousplatforms.2)OOPfeatureslikeencapsulation,inheritance,andpolymorphismenablemodularandscalablecode.3)Rich

前5個Java功能:示例和解釋前5個Java功能:示例和解釋May 12, 2025 am 12:09 AM

Java的五大特色是多態性、Lambda表達式、StreamsAPI、泛型和異常處理。 1.多態性讓不同類的對象可以作為共同基類的對象使用。 2.Lambda表達式使代碼更簡潔,特別適合處理集合和流。 3.StreamsAPI高效處理大數據集,支持聲明式操作。 4.泛型提供類型安全和重用性,編譯時捕獲類型錯誤。 5.異常處理幫助優雅處理錯誤,編寫可靠軟件。

Java的最高功能如何影響性能和可伸縮性?Java的最高功能如何影響性能和可伸縮性?May 12, 2025 am 12:08 AM

java'stopfeatureSnificallyenhanceItsperformanCandScalability.1)對象 - 方向clincipleslike-polymormormormormormormormormormormormorableableflexibleandscalablecode.2)garbageCollectionAutectionAutoctionAutoctionAutoctionAutoctionAutoctionAutoMenateMememorymanateMmanateMmanateMmanagementButCancausElatemention.3)

JVM內部:深入Java虛擬機JVM內部:深入Java虛擬機May 12, 2025 am 12:07 AM

JVM的核心組件包括ClassLoader、RuntimeDataArea和ExecutionEngine。 1)ClassLoader負責加載、鏈接和初始化類和接口。 2)RuntimeDataArea包含MethodArea、Heap、Stack、PCRegister和NativeMethodStacks。 3)ExecutionEngine由Interpreter、JITCompiler和GarbageCollector組成,負責bytecode的執行和優化。

什麼是使Java安全安全的功能?什麼是使Java安全安全的功能?May 11, 2025 am 12:07 AM

Java'ssafetyandsecurityarebolsteredby:1)strongtyping,whichpreventstype-relatederrors;2)automaticmemorymanagementviagarbagecollection,reducingmemory-relatedvulnerabilities;3)sandboxing,isolatingcodefromthesystem;and4)robustexceptionhandling,ensuringgr

必不可少的Java功能:增強您的編碼技巧必不可少的Java功能:增強您的編碼技巧May 11, 2025 am 12:07 AM

Javaoffersseveralkeyfeaturesthatenhancecodingskills:1)對象 - 方向 - 方向上的allowslowsmodelowsmodelingreal-worldentities

JVM最完整的指南JVM最完整的指南May 11, 2025 am 12:06 AM

thejvmisacrucialcomponentthatrunsjavacodebytranslatingitolachine特定結構,影響性能,安全性和便攜性。 1)theclassloaderloader,links andinitializesClasses.2)theexecutionEngineExecutionEngineExecutionEngineExecuteNexeCuteByteCuteByteCuteByTecuteByteCuteByteCuteBytecuteBytecuteByteCoDeinintolachineinstructionsions.3)Memo.3)Memo

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

SublimeText3 Linux新版

SublimeText3 Linux新版

SublimeText3 Linux最新版

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強大的PHP整合開發環境

SecLists

SecLists

SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

WebStorm Mac版

WebStorm Mac版

好用的JavaScript開發工具

PhpStorm Mac 版本

PhpStorm Mac 版本

最新(2018.2.1 )專業的PHP整合開發工具