> Java > java지도 시간 > WhatsApp 시스템 설계: 상위 수준 및 하위 수준 아키텍처를 통한 유머러스한 여정

WhatsApp 시스템 설계: 상위 수준 및 하위 수준 아키텍처를 통한 유머러스한 여정

Patricia Arquette
풀어 주다: 2024-11-15 10:22:02
원래의
724명이 탐색했습니다.

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, 웹)
  • API 게이트웨이
  • 로드 밸런서(수백만 개의 메시지의 혼란스러운 균형을 유지함)
  • 애플리케이션 서버(마법이 일어나는 곳)
  • 데이터베이스 계층 (데이터는 어딘가에 있어야 하기 때문에)
  • 파일저장 (고양이 GIF용)
  • 메시지 대기열(Kafka와 유사한 실시간 메시징 시스템)
  • 알림 서버 (좋아하는 사람이 답장하면 알려줘야 함)

HLD의 핵심 요소:

  1. 클라이언트 애플리케이션: WhatsApp은 모바일(iOS/Android), 웹, 데스크톱 앱에서 작동하며 모두 동일한 백엔드 서버에 연결됩니다. 클라이언트는 UI/UX, 메시지 보내기/받기, 암호화/복호화(자세히 설명하겠습니다), Wi-Fi가 커피 휴식을 취하기로 결정할 때 다시 연결하는 작업을 담당합니다.
  2. API 게이트웨이: 이는 클라이언트의 요청을 처리하고 이를 적절한 백엔드 서비스로 전달하는 중개자입니다. API 게이트웨이는 귀하가 올바르게 인증되었는지 확인하고 메시지 요청을 기록한 후 올바른 서버로 보냅니다.
  3. 로드 밸런서: 수백만 명의 사용자가 온라인에 있는 경우 서버가 혼잡하지 않도록 오케스트라 지휘자(또는 두 명)가 필요합니다. 로드 밸런서는 요청을 여러 애플리케이션 서버에 분산시켜 과부하를 방지하고 작업 속도를 매우 빠르게 만듭니다.
  4. 애플리케이션 서버: 이 나쁜 소년들은 WhatsApp의 두뇌입니다. 메시지를 처리하고, 사용자 세션을 관리하고, 암호화를 수행합니다. 여기서 핵심은 확장성입니다. 더 많은 사용자가 참여하면 더 많은 서버를 추가합니다.
  5. 데이터베이스 계층: 모든 메시지와 미디어는 어디로 가나요? 데이터베이스가 들어오는 곳은 다음과 같습니다.
    • NoSQL 데이터베이스(Cassandra): 사용자 프로필, 메시지 기록 등과 같은 대규모 데이터를 저장하는 데 사용됩니다.
    • SQL 데이터베이스: 드물지만 관계형 데이터가 필요한 경우(예: 재무 기록).
  6. 파일 저장소: 모든 사진, 비디오 및 음성 메모는 확장 가능한 분산 파일 저장 시스템에 저장됩니다. S3를 생각해 보세요(하지만 WhatsApp은 아마도 맞춤형 제품을 만들었을 것입니다. 정말 멋지니까요).
  7. 메시지 대기열(Kafka/Redis): 실시간 메시징의 경우 WhatsApp은 메시지 대기열을 사용하여 여러 서버 간의 메시지 전달을 처리합니다. 사용자가 오프라인인 경우 메시지는 사용자가 돌아올 때까지 대기열에 저장됩니다.
  8. 알림 서버: 휴대전화 화면이 꺼져 있으면 WhatsApp은 APN(Apple 푸시 알림 서비스) 및 Android용 Firebase 클라우드 메시징과 같은 서비스를 통해 알림을 보냅니다.

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 프로토콜을 사용합니다. 이는 일대일 메시지와 그룹 메시지를 모두 처리하는 가볍고 효율적인 프로토콜입니다.
    • 메시지는 수신자가 오프라인인 경우 임시로 저장되었다가 온라인 상태가 되면 전달됩니다.
  2. 종단 간 암호화:
    WhatsApp의 엔드투엔드 암호화는 신호 프로토콜을 기반으로 합니다. 아이디어는 간단하지만 천재적입니다.

    • 모든 메시지에는 고유한 암호화 키가 있습니다.
    • 발신자와 수신자만이 필요한 키를 보유하고 있으므로 WhatsApp이나 제3자는 귀하의 메시지를 읽을 수 없습니다.

    WhatsApp이 스파이 소설이라면, 잘못된 사람이 읽으려고 하면 메시지가 자폭될 것입니다!

  3. 데이터 저장 및 복제:

    • Cassandra(NoSQL 데이터베이스)는 채팅 메시지를 저장하는 데 사용됩니다. 왜? 분산되어 있고 가용성이 높으며 여러 데이터 센터에서 복제를 처리할 수 있습니다. Cassandra는 서버가 충돌하더라도(서버가 낮잠이 필요하다고 판단하는 경우 발생) 데이터가 손실되지 않도록 합니다.
    • 미디어 파일(사진, 동영상 등)은 문자 메시지와 별도로 클라우드 기반 파일 저장 시스템에 저장되는 경우가 많습니다.
  4. 오프라인 사용자 처리:

    • 메시지를 보냈는데 수신자가 오프라인인 경우 메시지는 Kafka/Redis와 같은 시스템을 사용하여 대기열에 추가됩니다. 집에 없을 때 누군가의 문에 메모를 남겨 두는 것과 같습니다. 단, 메모는 대기열에 안전하게 보관되어 있습니다.
  5. 데이터베이스 샤딩:

    • 사용자 수가 수백만 명에 달하는 WhatsApp은 모든 사람의 데이터를 하나의 거대한 데이터베이스에 저장할 수 없습니다. 그것은 세상의 모든 사람을 엘리베이터 한 대에 태워버리려는 것과 같습니다.
    • 대신 WhatsApp은 데이터베이스를 분할합니다. 샤딩은 엘리베이터를 수백 개의 작은 엘리베이터로 분할하는 것과 같으며, 각 엘리베이터는 자체 사용자 그룹을 담당합니다.

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는 안정적이고 빠르며 확장 가능합니다.

암호화를 위한 신호 프로토콜이 필요한 이유

  • WhatsApp은 귀하의 메시지를 읽고 싶어하지 않습니다(약속합니다). 엔드투엔드 암호화를 사용하면 귀하와 귀하의 수신자만이 키를 갖고 있기 때문에 물리적으로 읽을 수 없습니다.

6. 재밌는 사실과 WhatsApp별 최적화

  1. 다중 장치 지원: WhatsApp을 통해 사용자는 여러 장치에서 동일한 계정을 사용할 수 있습니다. 이를 위해서는 세심한 세션 관리와 메시지 동기화가 필요합니다.
  2. 효율적인 미디어 저장: WhatsApp은 여러 채팅에서 공유된 동일한 미디어 파일을 중복 제거하여 미디어 저장을 최적화합니다(왜냐하면 우리 모두는 모든 그룹에 동일한 밈을 보내는 친구가 한 명 있기 때문입니다).

결론: 모든 것을 하나로 모으기

이제 WhatsApp 시스템 디자인을 둘러보실 수 있습니다! 우리는 HLD(고수준 아키텍처)를 탐구하고, LLD(저수준 디자인)를 탐구했으며, 여행을 재미있게 만들기 위해 유머도 추가했습니다. XMPP 프로토콜부터 Kafka 대기열, Cassandra 데이터베이스 및 신호 암호화에 이르기까지 WhatsApp은 그룹 채팅을 계속 유지하는 확장 가능한 실시간 메시징의 걸작입니다!

위 내용은 WhatsApp 시스템 설계: 상위 수준 및 하위 수준 아키텍처를 통한 유머러스한 여정의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:dev.to
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿