Tình huống: tài khoản 5 triệu follower đăng bài và mọi feed trễ 40 phút Nâng cao
Thời gian đọc ước tính: 1 phút
Fan-out on write đọc nhanh và trung bình thì rẻ. Tình huống này nói về phần đuôi: một tài khoản 5 triệu follower, và một feed đẩy mọi bài vào timeline của mọi follower. Mọi số năng lực đều là minh hoạ và nhất quán với nhau.
- Bốn bước: chẩn đoán, cầm máu, thiết kế lại, rồi xử lý edge case.
- Tính số lần ghi mỗi bài trước khi chọn; phần lớn đáp án sai bỏ qua con số này.
Một tài khoản 5 triệu follower đăng chuỗi bài, feed của mọi người trễ 40 phút
Bạn là backend on-call của feed. Timeline là sorted set trong Redis, được lấp bằng fan-out on write: mỗi bài được đẩy vào tl:{user} của từng follower. Mỗi lựa chọn hiện ngay hệ quả lên các chỉ số.
Bước 1/4 · Cái gì đang tồn đọng?
20:00, giờ cao điểm buổi tối. Lúc 19:55 tài khoản @star (5 triệu follower) đăng chuỗi 3 bài trong 5 phút. Từ đó, ticket hỗ trợ báo bài của bạn bè hiện lên feed trễ nửa tiếng.
Cảnh báo lag fan-out đang ở 40 phút. Các node Redis sát giới hạn 64 GB.
- lag fan-out
- 40 phút và đang tăng
- worker fan-out
- 8.000 lần ghi timeline/s, bận hết
- tải tối bình thường
- ~2.000 lần ghi timeline/s
- Redis RSS
- 58 GB / 64 GB
Bạn làm gì?
Chơi xong, đọc Thiết kế news feed để nắm ước lượng tải, mô hình dữ liệu và ngưỡng hybrid.