首页 > Java > java教程 > 正文

WhatsApp 系统设计:高层和低层架构的幽默之旅

Patricia Arquette
发布: 2024-11-15 10:22:02
原创
626 人浏览过

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   |  <--Store Msg---| Application      |
          | (Kafka/Redis)   |                 | Servers (XMPP)   |
          +----------------+                 +------------------+
                       |                               |
                       |   Offline/Store Msg            |
                       |------------------------------->
                       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中文网其他相关文章!

来源:dev.to
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板