여행 동료 여러분, 놀랍고 혼란스러운 WhatsApp 시스템 디자인의 세계에 오신 것을 환영합니다! 이 기사에서는 WhatsApp의 상위 수준(HLD) 및 하위 수준(LLD) 아키텍처를 이해할 뿐만 아니라 유머를 추가하고(시스템 설계가 지루할 필요가 없기 때문에!) 몇 가지 다이어그램을 그릴 것입니다. 모든 사랑의 흐름도).
이제 안전 벨트를 매고 커피 한 잔을 들고 서버, 데이터베이스, 메시징 프로토콜이 통합되어 수십억 개의 메시지를 휴대전화로 전달하는 여정을 시작해 보세요.
목차:
- 고수준 아키텍처(HLD)
- 저수준 아키텍처(LLD)
- 플로우차트: 디자인 영웅
- 핵심 구성 요소 분석
- 이러한 구성 요소가 필요한 이유
- 재미있는 사실과 WhatsApp별 최적화
1. 고급 아키텍처(HLD): 전체 그림
WhatsApp을 잘 편성된 교향곡이라고 상상해 보세요. 하지만 바이올린 대신 서버가 있고, 첼로 대신 데이터베이스가 있습니다. 높은 수준에서 우리는 다음을 지원하는 시스템을 설계하고 있습니다.
- 수십억 명의 사용자
- 실시간 메시지
- 멀티미디어 공유
- 종단간 암호화
- 고가용성 및 짧은 대기 시간(아무도 "입력 중..."을 기다리는 것을 좋아하지 않음)
HLD 개요:
HLD에서는 건축가처럼 생각합니다. 아직 각 창문의 모양은 신경 쓰지 않고 집이 무너지지 않는지만 확인하고 싶을 뿐입니다.
30,000피트 높이에서 보는 WhatsApp의 아키텍처는 다음과 같이 구성됩니다.
-
클라이언트 애플리케이션(iOS, Android, 웹)
- API 게이트웨이
-
로드 밸런서(수백만 개의 메시지의 혼란스러운 균형을 유지함)
-
애플리케이션 서버(마법이 일어나는 곳)
-
데이터베이스 계층 (데이터는 어딘가에 있어야 하기 때문에)
-
파일저장 (고양이 GIF용)
-
메시지 대기열(Kafka와 유사한 실시간 메시징 시스템)
-
알림 서버 (좋아하는 사람이 답장하면 알려줘야 함)
HLD의 핵심 요소:
-
클라이언트 애플리케이션:
WhatsApp은 모바일(iOS/Android), 웹, 데스크톱 앱에서 작동하며 모두 동일한 백엔드 서버에 연결됩니다. 클라이언트는 UI/UX, 메시지 보내기/받기, 암호화/복호화(자세히 설명하겠습니다), Wi-Fi가 커피 휴식을 취하기로 결정할 때 다시 연결하는 작업을 담당합니다.
-
API 게이트웨이:
이는 클라이언트의 요청을 처리하고 이를 적절한 백엔드 서비스로 전달하는 중개자입니다. API 게이트웨이는 귀하가 올바르게 인증되었는지 확인하고 메시지 요청을 기록한 후 올바른 서버로 보냅니다.
-
로드 밸런서:
수백만 명의 사용자가 온라인에 있는 경우 서버가 혼잡하지 않도록 오케스트라 지휘자(또는 두 명)가 필요합니다. 로드 밸런서는 요청을 여러 애플리케이션 서버에 분산시켜 과부하를 방지하고 작업 속도를 매우 빠르게 만듭니다.
-
애플리케이션 서버:
이 나쁜 소년들은 WhatsApp의 두뇌입니다. 메시지를 처리하고, 사용자 세션을 관리하고, 암호화를 수행합니다. 여기서 핵심은 확장성입니다. 더 많은 사용자가 참여하면 더 많은 서버를 추가합니다.
-
데이터베이스 계층:
모든 메시지와 미디어는 어디로 가나요? 데이터베이스가 들어오는 곳은 다음과 같습니다.
-
NoSQL 데이터베이스(Cassandra): 사용자 프로필, 메시지 기록 등과 같은 대규모 데이터를 저장하는 데 사용됩니다.
-
SQL 데이터베이스: 드물지만 관계형 데이터가 필요한 경우(예: 재무 기록).
-
파일 저장소:
모든 사진, 비디오 및 음성 메모는 확장 가능한 분산 파일 저장 시스템에 저장됩니다. S3를 생각해 보세요(하지만 WhatsApp은 아마도 맞춤형 제품을 만들었을 것입니다. 정말 멋지니까요).
-
메시지 대기열(Kafka/Redis):
실시간 메시징의 경우 WhatsApp은 메시지 대기열을 사용하여 여러 서버 간의 메시지 전달을 처리합니다. 사용자가 오프라인인 경우 메시지는 사용자가 돌아올 때까지 대기열에 저장됩니다.
-
알림 서버:
휴대전화 화면이 꺼져 있으면 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의 주요 개념:
-
메시지 전달 시스템:
- WhatsApp은 실시간 메시지 전달을 위해 XMPP 프로토콜을 사용합니다. 이는 일대일 메시지와 그룹 메시지를 모두 처리하는 가볍고 효율적인 프로토콜입니다.
- 메시지는 수신자가 오프라인인 경우 임시로 저장되었다가 온라인 상태가 되면 전달됩니다.
-
종단 간 암호화:
WhatsApp의 엔드투엔드 암호화는 신호 프로토콜을 기반으로 합니다. 아이디어는 간단하지만 천재적입니다.
- 모든 메시지에는 고유한 암호화 키가 있습니다.
- 발신자와 수신자만이 필요한 키를 보유하고 있으므로 WhatsApp이나 제3자는 귀하의 메시지를 읽을 수 없습니다.
WhatsApp이 스파이 소설이라면, 잘못된 사람이 읽으려고 하면 메시지가 자폭될 것입니다!
-
데이터 저장 및 복제:
-
Cassandra(NoSQL 데이터베이스)는 채팅 메시지를 저장하는 데 사용됩니다. 왜? 분산되어 있고 가용성이 높으며 여러 데이터 센터에서 복제를 처리할 수 있습니다. Cassandra는 서버가 충돌하더라도(서버가 낮잠이 필요하다고 판단하는 경우 발생) 데이터가 손실되지 않도록 합니다.
- 미디어 파일(사진, 동영상 등)은 문자 메시지와 별도로 클라우드 기반 파일 저장 시스템에 저장되는 경우가 많습니다.
-
오프라인 사용자 처리:
- 메시지를 보냈는데 수신자가 오프라인인 경우 메시지는 Kafka/Redis와 같은 시스템을 사용하여 대기열에 추가됩니다. 집에 없을 때 누군가의 문에 메모를 남겨 두는 것과 같습니다. 단, 메모는 대기열에 안전하게 보관되어 있습니다.
-
데이터베이스 샤딩:
- 사용자 수가 수백만 명에 달하는 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별 최적화
-
다중 장치 지원: WhatsApp을 통해 사용자는 여러 장치에서 동일한 계정을 사용할 수 있습니다. 이를 위해서는 세심한 세션 관리와 메시지 동기화가 필요합니다.
-
효율적인 미디어 저장: WhatsApp은 여러 채팅에서 공유된 동일한 미디어 파일을 중복 제거하여 미디어 저장을 최적화합니다(왜냐하면 우리 모두는 모든 그룹에 동일한 밈을 보내는 친구가 한 명 있기 때문입니다).
결론: 모든 것을 하나로 모으기
이제 WhatsApp 시스템 디자인을 둘러보실 수 있습니다! 우리는 HLD(고수준 아키텍처)를 탐구하고, LLD(저수준 디자인)를 탐구했으며, 여행을 재미있게 만들기 위해 유머도 추가했습니다. XMPP 프로토콜부터 Kafka 대기열, Cassandra 데이터베이스 및 신호 암호화에 이르기까지 WhatsApp은 그룹 채팅을 계속 유지하는 확장 가능한 실시간 메시징의 걸작입니다!
위 내용은 WhatsApp 시스템 설계: 상위 수준 및 하위 수준 아키텍처를 통한 유머러스한 여정의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!