ホームページ > Java > &#&チュートリアル > WhatsApp システム設計: 高レベルと低レベルのアーキテクチャを巡るユーモラスな旅

WhatsApp システム設計: 高レベルと低レベルのアーキテクチャを巡るユーモラスな旅

Patricia Arquette
リリース: 2024-11-15 10:22:02
オリジナル
726 人が閲覧しました

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

  • クライアント アプリケーション (iOS、Android、Web)
  • API ゲートウェイ
  • ロードバランサー (数百万のメッセージの混乱のバランスをとる)
  • アプリケーションサーバー (魔法が起こる場所)
  • データベース層 (データはどこかに存在する必要があるため)
  • ファイルストレージ (猫のGIF用)
  • メッセージ キュー (リアルタイム メッセージング用の Kafka のようなシステム)
  • 通知サーバー (好きな人が返信したら知らせる必要があります)

HLD の中核要素:

  1. クライアント アプリケーション: WhatsApp は、同じバックエンド サーバーに接続するモバイル (iOS/Android)、Web、デスクトップ アプリで動作します。クライアントは、UI/UX、メッセージの送受信、暗号化/復号化 (これについては後ほど説明します)、および Wi-Fi がコーヒーブレイクを取ることを決定したときの再接続を担当します。
  2. API ゲートウェイ: これは、クライアントからのリクエストを処理し、それらを適切なバックエンド サービスに転送する仲介者です。 API ゲートウェイは、ユーザーが適切に認証されているかどうかを確認し、メッセージ リクエストを記録し、適切なサーバーに送信します。
  3. ロードバランサー: 何百万ものユーザーがオンラインにいるため、どのサーバーも混雑しないようにするには、オーケストラの指揮者 (または 2 人) が必要です。ロード バランサーはリクエストを多くのアプリケーション サーバーに分散するため、過負荷が防止され、処理が超高速になります。
  4. アプリケーションサーバー: これらの悪者たちは WhatsApp の頭脳です。これらはメッセージを処理し、ユーザー セッションを管理し、暗号化を実行します。ここで重要なのはスケーラビリティです。さらに多くのユーザーが参加すると、サーバーも追加されます。
  5. データベース層: あなたのメッセージやメディアはどこに行くのでしょうか?ここでデータベースが登場します。
    • NoSQL データベース (Cassandra): ユーザー プロファイル、メッセージ履歴などの大規模なデータの保存用
    • SQL データベース: まれに、リレーショナル データが必要な場合 (財務記録など)。
  6. ファイルストレージ: すべての写真、ビデオ、音声メモは、スケーラブルな分散ファイル ストレージ システムに保存されます。 S3 を考えてみましょう (ただし、WhatsApp はおそらくカスタマイズされたものを構築したでしょう。なぜなら、それはとてもクールだからです)。
  7. メッセージキュー (Kafka/Redis): リアルタイム メッセージングの場合、WhatsApp はメッセージ キューを使用して、さまざまなサーバー間でのメッセージ配信を処理します。ユーザーがオフラインの場合、メッセージはユーザーが戻るまでキューに保存されます。
  8. 通知サーバー: 携帯電話の画面がオフの場合、WhatsApp は APN (Apple Push Notification Service) や Android 用 Firebase Cloud Messaging などのサービスを通じて通知を送信します。

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 フローチャートです。

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

ログイン後にコピー
ログイン後にコピー

3. フローチャート: 私たちのデザインヒーロー

物事を非常に明確にするために、いくつかの図を追加しましょう。フローチャートを建築家の設計図として想像してください。これらはシステムを視覚的に理解するのに役立ちます。

メッセージ送信フロー:

      +------------------+   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)
                +-------------+

ログイン後にコピー

メッセージ取得フロー:

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

ログイン後にコピー

4. コアコンポーネントの内訳

重要なコンポーネントのいくつかをさらに詳しく見てみましょう:

  • XMPP: リアルタイム メッセージの送受信に使用されるメッセージング プロトコル。
  • Kafka/Redis: 受信者がオフラインのときにメッセージをキューに入れる責任を負います。
  • Cassandra: メッセージ、ユーザー データ、チャット履歴を保存する NoSQL データベース。
  • シグナル プロトコル: メッセージのプライバシーのためのエンドツーエンドの暗号化を強化します。
  • シャーディング: 何百万ものユーザーを処理できるように、データベースをより小さく管理しやすい部分に分割します。

5. これらのコンポーネントを使用する理由

なぜカサンドラなのか?

  • WhatsApp には高可用性、低遅延、および複数の場所に分散されたデータベースを処理する機能が必要なため、Cassandra が最適です。さらに、決してダウンしないように設計されており、WhatsApp はその信頼性を気に入っています。

XMPP を選ぶ理由

  • XMPP は軽量で効率的で、リアルタイム メッセージング用に設計されています。 5 分後に始まる映画について友達に教えるなど、遅刻するわけにはいかないシステムに最適です。

なぜ Kafka/Redis なのか?

  • メッセージ キューにより、受信者が休暇中で Wi-Fi のないゾーンにいる場合でも、メッセージが失われないことが保証されます。 Kafka と Redis は信頼性が高く、高速で、スケーラブルです。

暗号化に Signal プロトコルを使用する理由

  • WhatsApp はあなたのメッセージを読みたくありません (約束します)。エンドツーエンド暗号化では、あなたと受信者だけがキーを持っているため、物理的に暗号化を読み取​​ることができません。

6. 豆知識と WhatsApp 固有の最適化

  1. マルチデバイスのサポート: WhatsApp では、ユーザーが複数のデバイスで同じアカウントを使用できます。これには、慎重なセッション管理とメッセージ同期が必要です。
  2. 効率的なメディア ストレージ: WhatsApp は、異なるチャット間で共有される同一のメディア ファイルの重複を排除することでメディア ストレージを最適化します (なぜなら、私たち全員に同じミームをすべてのグループに送信する 1 人の友人がいるからです)。

結論: すべてをまとめる

これで、WhatsApp のシステム設計のツアーは終わりました。私たちは、ハイレベル アーキテクチャ (HLD) を探求し、ローレベル デザイン (LLD) を掘り下げ、さらには旅を楽しくするためにユーモアを加えてきました。 XMPP プロトコルから Kafka キュー、Cassandra データベース、Signal 暗号化に至るまで、WhatsApp はグループ チャットを活気づけ続けるスケーラブルなリアルタイム メッセージングの傑作です!

以上がWhatsApp システム設計: 高レベルと低レベルのアーキテクチャを巡るユーモラスな旅の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:dev.to
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート