Phỏng vấn thiết kế hệ thống: Thiết kế Netflix
"Thiết kế Netflix" là một bài toán chủ yếu về đọc, bị chi phối bởi một thực tế: phục vụ video ở quy mô toàn cầu là bài toán về phân phối nội dung và lưu trữ nhiều hơn là một bài toán tính toán. Người phỏng vấn muốn thấy bạn tách control plane (duyệt, tìm kiếm, đề xuất) khỏi data plane (truyền tải byte thực sự) và suy luận về cách đưa dữ liệu quy mô petabyte đến gần người dùng.
Hãy tiến hành theo thứ tự: làm rõ yêu cầu, ước lượng quy mô, thiết kế pipeline tải lên/chuyển mã, sau đó là luồng phát qua CDN, và kết thúc với bitrate thích ứng cùng các đánh đổi. Hướng dẫn dưới đây theo đúng cấu trúc này để bạn luyện tập lập luận, không phải ghi nhớ một kiến trúc.
1. Làm rõ yêu cầu
Tách yêu cầu chức năng khỏi phi chức năng và xác định phạm vi chặt chẽ. Cốt lõi là: người dùng duyệt một danh mục và phát video mượt mà trên các thiết bị và điều kiện mạng khác nhau.
- Chức năng: duyệt/tìm kiếm danh mục, bắt đầu phát, chất lượng thích ứng, tiếp tục từ vị trí đã xem, nhiều thiết bị.
- Phi chức năng: tính khả dụng rất cao, độ trễ khởi động thấp, phát mượt mà (không giật hình), phạm vi toàn cầu.
- Ngoài phạm vi (hãy nói rõ): phần nội bộ của ML đề xuất, thanh toán, chi tiết DRM — nêu ra rồi gác lại.
2. Ước lượng quy mô
Các con số này củng cố thiết kế ưu tiên CDN. Giả sử có hàng trăm triệu người đăng ký và nhiều triệu luồng đồng thời vào giờ cao điểm. Một luồng đơn lẻ tiêu thụ vài Mbps, vì vậy tổng lưu lượng đầu ra lên đến hàng chục terabit mỗi giây — không thể phục vụ từ một vài trung tâm dữ liệu tập trung, điều này ngay lập tức thúc đẩy việc cache ở biên (edge).
3. Pipeline tiếp nhận và chuyển mã
Các bản gốc được tải lên sẽ được xử lý offline, không phải trên luồng phát. Mỗi tiêu đề được chuyển mã thành nhiều rendition — nhiều độ phân giải và bitrate — và được phân đoạn thành các phần nhỏ (vài giây mỗi phần) cho streaming thích ứng.
- Trang trại chuyển mã (transcoding farm): chuyển đổi bản gốc thành các rendition H.264/H.265/AV1 ở nhiều bitrate; đây là công việc theo lô dễ dàng song song hóa.
- Phân đoạn và đóng gói: chia mỗi rendition thành các đoạn ngắn kèm một manifest (HLS/DASH) mô tả chúng.
- Lưu các đầu ra vào object storage (dạng như S3) làm nguồn dữ liệu gốc, sau đó đẩy nội dung phổ biến ra biên (edge).
4. CDN và luồng phát
Việc phát được phục vụ từ biên (edge), không phải từ nguồn gốc (origin). Các đoạn video được cache trên các node CDN gần về mặt vật lý với người dùng (Netflix vận hành các thiết bị Open Connect riêng của mình bên trong các ISP). Client lấy manifest, sau đó kéo các đoạn từ node biên khỏe mạnh gần nhất.
Control plane (danh mục, tìm kiếm, hồ sơ người dùng, 'tiếp tục xem') là một tập hợp dịch vụ API không trạng thái riêng biệt, được hỗ trợ bởi cơ sở dữ liệu và cache riêng — nó chỉ trả về metadata và một URL manifest, và hoàn toàn tách biệt khỏi việc truyền tải byte nặng.
- Cache biên (CDN/Open Connect): phục vụ phần lớn byte; định vị trước nội dung phổ biến theo khu vực trước khi có nhu cầu.
- Lưu trữ gốc: object store hỗ trợ các trường hợp cache miss.
- API control plane: danh mục, cấp quyền phát, dấu trang — payload nhỏ, mở rộng theo chiều ngang, có cache phía trước.
5. Streaming bitrate thích ứng
Phát mượt mà trong điều kiện mạng thay đổi đến từ client, không phải server. Trình phát theo dõi thông lượng và mức buffer, và chuyển đổi chất lượng đoạn lên hoặc xuống giữa các đoạn bằng cách sử dụng danh sách rendition trong manifest — bitrate cao hơn trên kết nối nhanh, thấp hơn để tránh giật hình trên kết nối chậm.
6. Những đánh đổi cần nói ra
Kết thúc bằng những căng thẳng mà người phỏng vấn lắng nghe: chi phí lưu trữ của việc tính toán trước tất cả rendition so với độ trễ của chuyển mã theo thời gian thực (Netflix tính toán trước — lưu trữ rẻ hơn độ trễ khởi động); cache mọi thứ so với chỉ cache nội dung phổ biến ở biên (một danh mục đuôi dài không thể tồn tại toàn bộ ở mọi biên); và nhất quán mạnh so với nhất quán cuối cùng cho dữ liệu control plane như 'tiếp tục xem' (nhất quán cuối cùng là đủ). 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 Netflix 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.
