Ước lượng Twitter QPS và Storage Requirements
Nguồn tham khảo: System Design Interview — ví dụ estimate Twitter QPS và storage (số liệu dùng cho bài tập).
1) Mục tiêu bài viết
- Biết cách ước lượng nhanh write QPS cho bài toán mạng xã hội dạng Twitter.
- Tính được dung lượng lưu trữ media theo ngày và theo nhiều năm.
- Hiểu cách biến giả định sản phẩm thành con số hạ tầng có thể dùng để thiết kế.
2) Context
Bài toán giả lập với các giả định:
300 millionmonthly active users (MAU).50%người dùng hoạt động hằng ngày.- Mỗi DAU đăng trung bình
2 tweets/day. 10%tweets có media.- Dữ liệu lưu
5 years.
Lưu ý: đây là số giả định cho interview/exercise, không phải số liệu chính thức từ Twitter.
3) Kiến trúc tổng quan
Figure 2-7 — Input assumptions và công thức estimate
Inputs:
- MAU = 300,000,000
- DAU ratio = 50%
- Tweets per DAU per day = 2
- Media ratio = 10%
- Avg media size = 1 MB
Derived:
- DAU = MAU * DAU ratio
- Tweets/day = DAU * tweets per day
- Write QPS = Tweets/day / 86,400
- Peak QPS ≈ 2 * Write QPS
- Media storage/day = Tweets/day * media ratio * media size
- Media storage/5y = storage/day * 365 * 5
Figure 2-8 — Data path cho tweet write + media storage
[Client App]
|
v
[Tweet API]
|
+--> [Tweet Metadata Store]
| (tweet_id, text, author, timestamp)
|
+--> [Media Upload Service] --> [Object Storage]
(images/videos)
4) Request/Data flow
1) User gửi request tạo tweet.
2) API xác thực user và ghi metadata tweet.
3) Nếu có media, service upload media vào object storage.
4) API trả tweet_id và trạng thái thành công.
5) Monitoring ghi lại write throughput để so với QPS estimate.
Từ giả định, ta có:
DAU = 300M * 50% = 150MTweets/day = 150M * 2 = 300MWrite QPS = 300,000,000 / 86,400 ≈ 3,472 ≈ 3,500Peak QPS ≈ 2 * 3,500 ≈ 7,000
5) API / Data contract
Ví dụ API tạo tweet:
POST /api/v1/tweets
Content-Type: application/json
Request ví dụ:
{
"authorId": "u_1024",
"text": "Hello system design!",
"media": [
{
"type": "image/jpeg",
"sizeBytes": 1048576,
"objectKey": "uploads/2026/07/11/img-001.jpg"
}
]
}
Ví dụ response JSON:
{
"status": "ok",
"tweetId": "t_987654321",
"createdAt": "2026-07-11T10:15:30Z",
"storage": {
"metadataBytes": 204,
"mediaBytes": 1048576
}
}
Dung lượng media theo đề bài:
- Media tweets/day:
150M * 2 * 10% = 30M - Media storage/day:
30M * 1MB = 30TB/day - Media storage/5 years:
30TB * 365 * 5 = 54,750TB ≈ 55PB
6) Trade-offs
| Lựa chọn | Ưu điểm | Nhược điểm | Khi nào dùng |
|---|---|---|---|
| Lưu media bản gốc 1MB | Đơn giản pipeline | Tốn storage rất nhanh | MVP / yêu cầu chất lượng ảnh cao |
| Nén + resize nhiều kích thước | Giảm mạnh dung lượng và băng thông | Tăng CPU xử lý media | Feed lớn, đọc nhiều |
| Tách metadata DB và media object storage | Scale tốt theo từng workload | Vận hành phức tạp hơn | Quy mô từ trung bình đến lớn |
| Giữ dữ liệu 5 năm | Phục vụ compliance/analytics dài hạn | Chi phí lưu trữ cao | Sản phẩm có yêu cầu pháp lý, audit |
Ghi nhớ khi interview:
- Trình bày rõ giả định trước khi tính.
- Làm tròn hợp lý ở từng bước để giữ tốc độ.
- Nêu được peak factor và chi phí storage dài hạn là điểm cộng lớn.
7) Tóm tắt + bài học
- Với bộ giả định này, write throughput cỡ
~3.5K QPS, peak khoảng~7K QPS. - Phần tốn tài nguyên nhất không nằm ở metadata, mà ở media storage (
~30TB/day,~55PB/5 years). - Back-of-the-envelope estimation giúp định hình kiến trúc ban đầu rất nhanh: chọn đúng storage tier, chiến lược media pipeline, và kế hoạch capacity theo thời gian.