Bỏ qua để đến nội dung
Knowledge Hub

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.
Tình huống

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ố.

Lag fan-out (bài thường)40 phút
Redis RSS mỗi node58 GB
Lần ghi timeline mỗi bài của @star5.000.000
p99 đọc feed45 ms

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.