Phỏng vấn thiết kế hệ thống: Thiết kế WhatsApp

"Thiết kế WhatsApp" kiểm tra khả năng truyền tin thời gian thực ở quy mô khổng lồ, lưu trữ tin nhắn bền vững, trạng thái hiện diện (online/lần truy cập cuối), và bài toán quản lý kết nối để giữ hàng trăm triệu thiết bị luôn hoạt động. Như mọi khi, người phỏng vấn muốn thấy cách bạn suy luận và những đánh đổi của bạn, không phải một bản sao của hệ thống thật.

Hãy tiến hành có phương pháp: làm rõ yêu cầu, ước lượng quy mô, thiết kế luồng kết nối và truyền tin, quyết định cách lưu trữ tin nhắn, sau đó xử lý chat nhóm và những phần khó như truyền tin khi offline và đảm bảo thứ tự. Hướng dẫn dưới đây theo đúng lộ trình đó.

1. Làm rõ yêu cầu

Trước tiên hãy cố định phạm vi. Cốt lõi là nhắn tin một-một với khả năng truyền tin đáng tin cậy; hãy làm rõ xem chat nhóm, media, và mã hóa đầu cuối có thuộc phạm vi của vòng này hay không.

  • Chức năng: gửi/nhận tin nhắn, xác nhận đã gửi + đã đọc, trạng thái online, chat nhóm, truyền tin offline khi người nhận bị mất kết nối.
  • Phi chức năng: độ trễ thấp, tính khả dụng cao, độ bền (không mất tin nhắn), đảm bảo thứ tự trong một cuộc trò chuyện.
  • Cần làm rõ: mã hóa đầu cuối và xử lý media — nêu ra rồi quyết định rõ ràng có đưa vào phạm vi hay không.

2. Ước lượng quy mô

Xác định các con số dẫn dắt thiết kế. Giả sử có khoảng 2 tỷ người dùng và hàng chục tỷ tin nhắn mỗi ngày; điều đó tương đương hàng trăm nghìn tin nhắn mỗi giây vào giờ cao điểm, và hàng trăm triệu thiết bị kết nối đồng thời — việc quản lý kết nối trở thành một bài toán hàng đầu.

3. Luồng kết nối và truyền tin

Nhắn tin cần một kết nối liên tục, không phải polling theo kiểu yêu cầu/phản hồi. Các thiết bị giữ một kết nối WebSocket mở tới một máy chủ gateway. Một thành phần trung tâm phải biết gateway nào đang giữ kết nối của mỗi người dùng để có thể định tuyến tin nhắn đến đúng máy chủ.

  • Gateway WebSocket: duy trì các kết nối trực tiếp của thiết bị, xử lý gửi/nhận.
  • Registry phiên/trạng thái: lưu ánh xạ người dùng → máy chủ gateway hiện tại (ví dụ trong Redis), được cập nhật khi kết nối/mất kết nối.
  • Định tuyến tin nhắn: gateway của người gửi tra cứu gateway của người nhận và chuyển tiếp; nếu người nhận offline, tin nhắn sẽ được đưa vào hàng đợi.

4. Lưu trữ tin nhắn và truyền tin khi offline

Tin nhắn phải tồn tại được dù người nhận bị mất kết nối. Lưu trữ bền vững mỗi tin nhắn và theo dõi trạng thái truyền tin theo từng người nhận; gửi ngay nếu người nhận đang online, nếu không thì lưu lại và chuyển tiếp khi họ kết nối lại (store-and-forward).

Một mẫu truy cập nặng về ghi, với khóa theo từng cuộc trò chuyện, phù hợp hơn với một kho lưu trữ cột rộng như Cassandra (thông lượng ghi cao, mở rộng theo chiều ngang) so với một cơ sở dữ liệu quan hệ đơn lẻ. Khi một tin nhắn được xác nhận đã truyền đến tất cả người nhận, nó có thể bị xóa hoặc hết hạn, vì WhatsApp không giữ lại các tin nhắn đã truyền phía máy chủ vô thời hạn.

5. Chat nhóm

Nhắn tin nhóm là một dạng fan-out: một lần gửi trở thành N lần truyền tin. Với kích thước nhóm thông thường, fan-out-on-write (đẩy vào luồng truyền tin của từng thành viên) đơn giản và đọc nhanh. Hãy lưu ý đánh đổi — các nhóm rất lớn khiến fan-out-on-write trở nên đắt đỏ, đó là lý do các nhóm phát sóng khổng lồ là một bài toán thiết kế khác.

6. Những đánh đổi cần nói ra

Kết thúc bằng những căng thẳng: thứ tự (số thứ tự theo từng cuộc trò chuyện so với thứ tự toàn cục), nhất quán so với tính khả dụng cho các xác nhận (nhất quán cuối cùng là ổn cho 'lần truy cập cuối', nhưng cần mạnh hơn cho việc truyền tin), và fan-out-on-write so với on-read cho nhóm. Nêu rõ những điều này là điều làm cho câu trả lời trở nên senior.

Luyện tập thiết kế hệ thống WhatsApp với trợ giúp theo thời gian thực

Trợ lý phỏng vấn thiết kế hệ thống của Natively có thể giúp bạn giữ cấu trúc mạch lạc trong một vòng phỏng vấn trực tiếp — gợi ý khía cạnh tiếp theo cần đề cập và hiển thị các đánh đổi theo thời gian thực, tất cả trên chính thiết bị của bạn.

Put it on your own machine.

A live-conversation assistant that runs locally. Nothing leaves your machine.

macOS 12+ · Windows 10/11

© 2026 Natively AI Private Limited

Source-available under the Natively Personal Use Source License v1.0 · IP geolocation by DB-IP