Heim  >  Artikel  >  Java  >  WhatsApp-Systemdesign: Eine humorvolle Reise durch High-Level- und Low-Level-Architektur

WhatsApp-Systemdesign: Eine humorvolle Reise durch High-Level- und Low-Level-Architektur

Patricia Arquette
Patricia ArquetteOriginal
2024-11-15 10:22:02625Durchsuche

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 のアーキテクチャは次のとおりです。

  • Client-Anwendungen (iOS, Android, Web)
  • API-Gateway
  • Load Balancer (ausgleichen das Chaos von Millionen von Nachrichten)
  • Anwendungsserver (wo die Magie passiert)
  • Datenbankschicht (da Daten irgendwo leben müssen)
  • Dateispeicherung (für diese Katzen-GIFs)
  • Nachrichtenwarteschlangen (Kafka-ähnliche Systeme für Echtzeitnachrichten)
  • Benachrichtigungsserver (müssen Sie benachrichtigen, wenn Ihr Schwarm antwortet)

Kernelemente von HLD:

  1. Client-Anwendungen: WhatsApp funktioniert auf Mobilgeräten (iOS/Android), Web- und Desktop-Apps, die alle eine Verbindung zu denselben Backend-Servern herstellen. Der Client ist für UI/UX, das Senden/Empfangen von Nachrichten, die Verschlüsselung/Entschlüsselung (dazu kommen wir gleich) und die Wiederherstellung der Verbindung verantwortlich, wenn Ihr WLAN eine Kaffeepause einlegt.
  2. API-Gateway: Dies ist der Mittelsmann, der Anfragen von Kunden bearbeitet und sie an den entsprechenden Backend-Dienst weiterleitet. Das API-Gateway prüft, ob Sie ordnungsgemäß authentifiziert sind, protokolliert Ihre Nachrichtenanfragen und sendet Sie an den richtigen Server.
  3. Load Balancer: Da Millionen von Benutzern online sind, benötigen Sie einen Orchesterdirigenten (oder zwei), um sicherzustellen, dass kein Server überlastet wird. Load Balancer verteilen Anfragen auf viele Anwendungsserver, was eine Überlastung verhindert und die Arbeit superschnell macht.
  4. Anwendungsserver: Diese bösen Jungs sind das Gehirn von WhatsApp. Sie verarbeiten Nachrichten, verwalten Benutzersitzungen und führen Verschlüsselung durch. Der Schlüssel hier ist Skalierbarkeit; Wenn mehr Benutzer beitreten, fügen wir weitere Server hinzu.
  5. Datenbankschicht: Wohin gehen all Ihre Nachrichten und Medien? Hier kommen Datenbanken ins Spiel:
    • NoSQL-Datenbanken (Cassandra): Zum Speichern umfangreicher Daten wie Benutzerprofile, Nachrichtenverlauf usw.
    • SQL-Datenbanken: In seltenen Fällen, in denen relationale Daten erforderlich sind (z. B. Finanzunterlagen).
  6. Dateispeicherung: Alle Ihre Fotos, Videos und Sprachnotizen werden in skalierbaren verteilten Dateispeichersystemen gespeichert. Denken Sie an S3 (aber WhatsApp hat wahrscheinlich etwas Angepasstes entwickelt – weil sie so cool sind).
  7. Nachrichtenwarteschlangen (Kafka/Redis): Für Echtzeitnachrichten nutzt WhatsApp Nachrichtenwarteschlangen, um die Nachrichtenübermittlung über verschiedene Server hinweg zu verwalten. Wenn ein Benutzer offline ist, wird die Nachricht in einer Warteschlange gespeichert, bis er zurückkommt.
  8. Benachrichtigungsserver: Wenn der Bildschirm Ihres Telefons ausgeschaltet ist, sendet WhatsApp eine Benachrichtigung über Dienste wie APNs (Apple Push Notification Service) und Firebase Cloud Messaging für Android.

HLD フローチャート:

これは、WhatsApp でのクライアント、バックエンド サービス、データベース間の対話を視覚化するための基本的なフローチャートです。

                   +---------------+               +--------------+
Client (Mobile) -->| API Gateway    |---> LB --->   | Application  |
(Client (Web)) --> | (Rate limiting)|               | Servers      |
                   +---------------+               +--------------+
                           |                             |
                           |                             |
                           V                             V
                    +-------------+               +--------------+
                    | Message     |               | Notification |
                    | Queues      |               | Servers      |
                    +-------------+               +--------------+
                           |
                           V
                   +---------------+
                   |   Databases    | (Cassandra, File Storage)
                   +---------------+


2. 低レベル アーキテクチャ (LLD): 要点の詳細

LLD では、個々のコンポーネントの実装と技術的な詳細に焦点を当てます。ここでは、アルゴリズム、データベース シャーディング、暗号化方法、ネットワーク プロトコルについて詳しく説明します。

LLD の主要な概念:

  1. メッセージ配信システム:
    • WhatsApp は、リアルタイムのメッセージ配信に XMPP プロトコルを使用します。これは、1 対 1 とグループのメッセージングの両方を処理する軽量で効率的なプロトコルです。
    • 受信者がオフラインの場合、メッセージは一時的に保存され、オンラインになると配信されます。
  2. エンドツーエンド暗号化:
    WhatsApp のエンドツーエンド暗号化は、シグナル プロトコル に基づいています。このアイデアはシンプルですが天才的です:

    • すべてのメッセージには独自の一意の暗号化キーがあります。
    • 送信者と受信者だけが必要なキーを保持しているため、WhatsApp も第三者もあなたのメッセージを読むことはできません。

    もし WhatsApp がスパイ小説だったら、間違った人がそれを読もうとすると、メッセージは自動的に破壊されてしまいます!

  3. データストレージとレプリケーション:

    • Cassandra (NoSQL データベース) は、チャット メッセージの保存に使用されます。なぜ?分散型で可用性が高く、複数のデータセンターにわたるレプリケーションを処理できます。 Cassandra は、サーバーがクラッシュしても (サーバーが仮眠が必要だと判断したときに発生します)、データが失われないようにします。
    • メディア ファイル (写真やビデオなど) はテキスト メッセージとは別に、多くの場合クラウドベースのファイル ストレージ システムに保存されます。
  4. オフライン ユーザーの処理:

    • メッセージを送信し、受信者がオフラインの場合、メッセージは Kafka/Redis などのシステムを使用してキューに入れられます。これは、誰かが家にいないときに家のドアにメモを残すようなものですが、そのメモは列の中に安全に保管されます。
  5. データベースシャーディング:

    • WhatsApp には何百万ものユーザーがおり、全員のデータを 1 つの巨大なデータベースに保存することはできません。それは、世界中の人々を 1 台のエレベーターに乗せようとするようなものです。
    • 代わりに、WhatsApp はデータベースをシャーディングします。シャーディングは、エレベーターを 100 の小さなエレベーターに分割し、それぞれが独自のユーザー グループを担当するようなものです。

LLD フローチャート:

これは、リアルタイム メッセージングとメッセージ キューに焦点を当てた簡略化された LLD フローチャートです。

      +------------------+   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:用于发送和接收实时消息的消息协议。
  • Kafka/Redis:负责在接收者离线时对消息进行排队。
  • Cassandra:存储消息、用户数据和聊天历史记录的 NoSQL 数据库。
  • 信号协议:为消息隐私提供端到端加密。
  • 分片:将数据库划分为更小、更易于管理的部分,以处理数百万用户。

5. 为什么使用这些组件?

为什么是卡桑德拉?

  • 由于 WhatsApp 需要高可用性、低延迟以及处理多个位置的分布式数据库的能力,因此 Cassandra 是完美的选择。另外,它的设计永不宕机,WhatsApp 非常喜欢这种可靠性。

为什么选择XMPP?

  • XMPP 轻量级、高效,专为实时消息传递而设计。非常适合您不能迟到的系统,例如告诉您的朋友电影 5 分钟后开始。

为什么选择卡夫卡/Redis?

  • 消息队列可确保消息不会丢失,即使收件人在没有 Wi-Fi 的区域度假也是如此。 Kafka 和 Redis 可靠、快速且可扩展。

为什么使用信号协议进行加密?

  • WhatsApp 不想阅读您的消息(我保证)。通过端到端加密,他们实际上无法读取它们,因为只有您和您的收件人拥有密钥。

6. 有趣的事实和 WhatsApp 特定优化

  1. 多设备支持:WhatsApp 允许用户在多个设备上使用同一帐户。这需要仔细的会话管理和消息同步。
  2. 高效媒体存储:WhatsApp 通过对不同聊天中共享的相同媒体文件进行重复数据删除来优化媒体存储(因为我们都有一个朋友向每个群组发送相同的表情包)。

结论:将所有内容整合在一起

现在您已经了解了 WhatsApp 的系统设计之旅!我们探索了高层架构(HLD),深入研究了底层设计(LLD),甚至加入了一些幽默,让旅程变得有趣。从 XMPP 协议到 Kafka 队列、Cassandra 数据库和 Signal 加密,WhatsApp 是可扩展的实时消息传递的杰作,让我们的群聊保持活力!

Das obige ist der detaillierte Inhalt vonWhatsApp-Systemdesign: Eine humorvolle Reise durch High-Level- und Low-Level-Architektur. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn