Khóa học nền tảng phỏng vấn thiết kế hệ thống

Khóa học có cấu trúc bao gồm lộ trình phỏng vấn, ước tính công suất, khả năng mở rộng, cơ sở dữ liệu, API, microservices, độ tin cậy, khả năng quan sát và bảo mật, kèm câu hỏi luyện tập liên quan.

Cấp độ: System Design Interview Độ khó: medium 5 bài học 75 phút
Tiến độ khóa học 0 / 5
Quay lại khóa học

Bạn sẽ học được

  • Giải thích lộ trình phỏng vấn thiết kế hệ thống và làm rõ yêu cầu.
  • Ước tính QPS, lưu trữ và công suất bằng phép tính đơn giản.
  • Áp dụng cân bằng tải, bộ nhớ đệm và CDN để mở rộng dịch vụ.
  • So sánh cơ sở dữ liệu, phân mảnh và nhất quán bằng CAP.
  • Thiết kế API, microservices, hàng đợi và hệ thống đáng tin cậy có thể quan sát.

Trước khi bắt đầu

  • Kiến thức lập trình cơ bản
  • Quen thuộc với HTTP, API và cơ sở dữ liệu
  • Không cần kinh nghiệm phỏng vấn thiết kế hệ thống trước đó

Bài học 1 Lộ trình phỏng vấn thiết kế hệ thống

Phỏng vấn thiết kế hệ thống kiểm tra cách bạn biến một ý tưởng sản phẩm rộng thành một kế hoạch kỹ thuật rõ ràng. Nhà phỏng vấn muốn thấy cấu trúc, giao tiếpý thức về đánh đổi, không phải một kiến trúc được học thuộc. Hãy bắt đầu mỗi câu trả lời bằng cách nhắc lại vấn đề và hỏi về người dùng, quy mô và ràng buộc.

Đầu tiên làm rõ yêu cầu: ai sử dụng hệ thống, mỗi giây có bao nhiêu thao tác đọc và ghi, độ trễ nào quan trọng, cần lưu trữ bao nhiêu dữ liệu và người dùng đến từ khu vực nào. Ghi lại những con số này vì chúng quyết định mọi quyết định tiếp theo.

Tiếp theo, hãy thực hiện các ước tính công suất đơn giản. Ước tính số người dùng hoạt động hằng ngày, số yêu cầu mỗi giây, tốc độ tăng lưu trữ và băng thông. Các phép tính gần đúng như QPS = DAU x số thao tác mỗi ngày / số giây đủ để chọn giữa thiết kế nhỏ và thiết kế lớn.

Sau đó vẽ thiết kế tổng quan: máy khách, bộ cân bằng tải, dịch vụ ứng dụng, bộ nhớ đệm, hàng đợi và cơ sở dữ liệu. Ghi chú từng thành phần và giải thích luồng yêu cầu chính trước khi đi vào chi tiết.

Chọn một hoặc hai lĩnh vực để đào sâu, chẳng hạn như mô hình dữ liệu, thiết kế API, chiến lược phân mảnh hoặc xử lý lỗi. Nêu rõ phương án đánh đổi bạn đang tối ưu và so sánh ít nhất một phương án thay thế trước khi quyết định.

Kết thúc bằng tóm tắt ngắn: các thành phần chính, rủi ro lớn nhất và những gì bạn sẽ theo dõi. Một kết thúc rõ ràng giúp nhà phỏng vấn theo kịp lập luận của bạn và làm câu trả lời đáng nhớ hơn.

Mẹo luyện tập Lộ trình phỏng vấn thiết kế hệ thống: Ôn lại bài học này trong các phiên ngắn mỗi ngày. Sau mỗi bài tập, hãy nêu quy tắc hoặc bước bạn đã dùng; nếu không nêu được, hãy ôn lại chủ đề đó trước khi tiếp tục. Kiên trì giúp ghi nhớ tốt hơn một buổi học dài.

Ví dụ

Câu hỏi phỏng vấn: "Thiết kế một dịch vụ rút gọn URL." Bắt đầu với yêu cầu: người dùng, số liên kết tạo mỗi ngày, số lần đọc mỗi liên kết, dung lượng lưu trữ và thời gian hết hạn. Sau đó nêu luồng chính: máy khách gửi URL dài, dịch vụ tạo ID ngắn, lưu ánh xạ và chuyển hướng các lần đọc bằng mã 301 hoặc 302.

Câu trả lời thực hành: QPS = 1 triệu liên kết/ngày / 86.400 giây ≈ 12 lần ghi/giây, với số lần đọc cao hơn khoảng 100 lần. Tốc độ ghi nhỏ này phù hợp với cơ sở dữ liệu quan hệ, trong khi các lần đọc được hưởng lợi từ bộ nhớ đệm và chuyển hướng thân thiện với CDN.

Đọc lại câu hỏi trước khi kết thúc và xác nhận câu trả lời đúng ý.

Bài học 2 Khả năng mở rộng, cân bằng tải và bộ nhớ đệm

Khả năng mở rộng là điều đầu tiên nhà phỏng vấn kiểm tra vì nó kết nối mọi thành phần. Mở rộng theo chiều dọc tăng sức mạnh cho một máy; mở rộng theo chiều ngang thêm nhiều máy và là lựa chọn thường dùng cho hệ thống web.

Bộ cân bằng tải đứng trước dịch vụ, kiểm tra sức khỏe và định tuyến lưu lượng bằng các chiến lược như vòng quay hoặc kết nối tối thiểu. Bộ cân bằng tải lớp 7 cũng có thể định tuyến theo đường dẫn URL và tiêu đề.

Bộ nhớ đệm lưu dữ liệu được đọc thường xuyên gần người gọi. Dùng cache-aside cho các lần đọc cơ sở dữ liệu: kiểm tra cache, tải từ cơ sở dữ liệu khi trượt, ghi lại và đặt TTL. Chọn chiến lược loại bỏ LRU và quyết định thời điểm vô hiệu hóa.

CDN phục vụ tài nguyên tĩnh từ các vị trí biên, giảm độ trễ cho người dùng trên toàn thế giới. Nó hoạt động tốt nhất cho hình ảnh, JavaScript, CSS và các nội dung bất biến khác.

Với khóa nóng, một mục phổ biến có thể làm quá tải một phân mảnh cache. Trải khóa trên nhiều phân mảnh hoặc thêm tính ngẫu nhiên vào khóa cache, đồng thời lưu cache các mức tổng hợp khác nhau riêng biệt.

Ví dụ: một feed đọc nhiều có thể đặt API sau bộ cân bằng tải, lưu cache các feed phổ biến trong Redis và phục vụ tệp tĩnh qua CDN. Điều này giữ số lần đọc cơ sở dữ liệu thấp và thời gian phản hồi ổn định.

Mẹo luyện tập Khả năng mở rộng, cân bằng tải và bộ nhớ đệm: Ôn lại bài học này trong các phiên ngắn mỗi ngày. Sau mỗi bài tập, hãy nêu quy tắc hoặc bước bạn đã dùng; nếu không nêu được, hãy ôn lại chủ đề đó trước khi tiếp tục. Kiên trì giúp ghi nhớ tốt hơn một buổi học dài.

Ví dụ

Quyết định thiết kế: một feed tin tức nhận 10.000 lần đọc mỗi giây. Đặt bộ cân bằng tải trước máy chủ API, lưu cache 1.000 feed hàng đầu trong Redis và phục vụ ảnh đại diện cùng hình ảnh từ CDN.

Câu hỏi tiếp theo: "Điều gì xảy ra khi một feed trở nên nóng?" Trải khóa cache trên các phân mảnh và đặt TTL ngắn để cơ sở dữ liệu không bị quá tải.

Đọc lại câu hỏi trước khi kết thúc và xác nhận câu trả lời đúng ý.

Bài học 3 Cơ sở dữ liệu, phân mảnh và nhất quán

Việc chọn cơ sở dữ liệu phụ thuộc vào mô hình truy cập. Cơ sở dữ liệu quan hệ phù hợp với giao dịch có cấu trúc và phép nối; kho NoSQL hỗ trợ lược đồ linh hoạt, khối lượng ghi lớn hoặc tập dữ liệu phân tán quy mô lớn.

Thêm chỉ mục cho các truy vấn phổ biến và phi chuẩn hóa mô hình đọc khi phép nối trở nên tốn kém. Bản sao đọc chuyển lưu lượng SELECT khỏi bản chính, còn failover giữ cho các thao tác ghi luôn khả dụng khi bản chính gặp sự cố.

Phân mảnh chia các dòng theo một khóa bằng phân vùng dải hoặc băm. Phân mảnh theo băm phân bố tải đều nhưng làm truy vấn dải khó hơn; phân mảnh theo dải hỗ trợ vùng dữ liệu nhưng có thể tạo phân mảnh nóng.

Định lý CAP cho biết hệ thống phân tán phải chọn giữa nhất quán và khả dụng khi xảy ra phân vùng. Nhất quán mạnh dễ suy luận hơn, còn nhất quán cuối cùng mở rộng tốt hơn và cần cơ chế đối chiếu.

Giao dịch phân tán rất tốn kém. Hãy dùng thao tác lũy đẳng, bảng outbox hoặc luồng công việc theo sự kiện thay vì cố làm mọi thao tác ghi nguyên tử trên nhiều dịch vụ.

Khi phỏng vấn, hãy nêu cơ sở dữ liệu, khóa phân mảnh, chiến lược bản sao và mô hình nhất quán. Bốn quyết định này cho thấy bạn hiểu dữ liệu ở quy mô lớn.

Mẹo luyện tập Cơ sở dữ liệu, phân mảnh và nhất quán: Ôn lại bài học này trong các phiên ngắn mỗi ngày. Sau mỗi bài tập, hãy nêu quy tắc hoặc bước bạn đã dùng; nếu không nêu được, hãy ôn lại chủ đề đó trước khi tiếp tục. Kiên trì giúp ghi nhớ tốt hơn một buổi học dài.

Ví dụ

Quyết định thiết kế: dịch vụ chat lưu tin nhắn theo conversation_id. Phân mảnh băm theo khóa này giữ một cuộc trò chuyện trong một phân mảnh, còn chỉ mục phụ hỗ trợ truy vấn hộp thư của người dùng.

Nhất quán: dùng nhất quán mạnh cho xác nhận tin nhắn và nhất quán cuối cùng cho biên nhận đã đọc, sau đó đối chiếu bằng dấu thời gian.

Đọc lại câu hỏi trước khi kết thúc và xác nhận câu trả lời đúng ý.

Bài học 4 REST API, microservices và hàng đợi tin nhắn

Thiết kế API sạch giúp hệ thống dễ xây dựng và bảo trì. REST dùng tài nguyên và động từ HTTP: GET để đọc, POST để tạo, PUT để thay thế, PATCH để cập nhật và DELETE để xóa. Dùng mã trạng thái như 201 cho đã tạo và 429 cho bị giới hạn tốc độ.

Dùng phân trang cho các tập dữ liệu lớn. Phân trang bằng con trỏ ổn định hơn khi dữ liệu thay đổi; phân trang theo offset đơn giản hơn nhưng có thể bỏ sót hoặc trùng dòng.

Giới hạn tốc độ bảo vệ API khỏi lạm dụng. Token bucket và cửa sổ trượt là các thuật toán phổ biến, và giới hạn thường áp dụng theo người dùng hoặc theo API key.

Microservices chia sản phẩm thành các dịch vụ triển khai độc lập với ranh giới rõ ràng. Tránh dùng chung một cơ sở dữ liệu và dùng API gateway để tập trung xác thực, định tuyến và giới hạn.

Hàng đợi tin nhắn tách rời nhà sản xuất và người tiêu dùng. Cơ chế giao ít nhất một lần có thể tạo trùng lặp, nên người tiêu dùng cần lũy đẳng; hàng đợi thư chết thu các tin nhắn thất bại nhiều lần.

Ví dụ: dịch vụ đơn hàng ghi một sự kiện vào hàng đợi, dịch vụ thanh toán tiêu thụ nó và một dịch vụ thông báo riêng lắng nghe kết quả. Mỗi dịch vụ mở rộng và triển khai độc lập.

Mẹo luyện tập REST API, microservices và hàng đợi tin nhắn: Ôn lại bài học này trong các phiên ngắn mỗi ngày. Sau mỗi bài tập, hãy nêu quy tắc hoặc bước bạn đã dùng; nếu không nêu được, hãy ôn lại chủ đề đó trước khi tiếp tục. Kiên trì giúp ghi nhớ tốt hơn một buổi học dài.

Ví dụ

Thiết kế API: GET /users/{id}/orders?cursor=... trả về một trang đơn hàng kèm con trỏ tiếp theo. Giới hạn tốc độ theo người dùng bằng token bucket 100 yêu cầu mỗi phút.

Xử lý lỗi: nếu thanh toán chậm, hãy đăng một sự kiện đơn hàng vào hàng đợi và để thanh toán tiêu thụ nó; các tin nhắn thanh toán thất bại sẽ vào hàng đợi thư chết.

Đọc lại câu hỏi trước khi kết thúc và xác nhận câu trả lời đúng ý.

Bài học 5 Độ tin cậy, khả năng quan sát và bảo mật

Hệ thống đáng tin cậy xử lý lỗi một cách duyên dáng. Dùng thử lại với backoff theo cấp số nhân và jitter cho lỗi tạm thời, đồng thời thêm bộ ngắt mạch để ngừng gọi một dịch vụ đang lỗi trước khi nó cạn kiệt tài nguyên.

Bulkhead cô lập các nhóm tài nguyên để một dịch vụ chậm không thể chiếm hết kết nối. Đặt thời gian chờ và xác định hành vi dự phòng cho các tính năng không quan trọng.

Khả năng quan sát kết hợp số liệu, nhật ký và theo dõi phân tán. Số liệu cho thấy tình trạng, nhật ký giải thích sự kiện và theo dõi phân tán đi theo một yêu cầu qua các dịch vụ. Xác định SLI và SLO để nhóm biết khi nào cần hành động.

Bảo mật nên là một phần của thiết kế: TLS cho dữ liệu truyền tải, xác thực tại gateway, quyền truy cập tối thiểu, quản lý bí mật và giới hạn tốc độ cho các endpoint công khai.

Cũng hãy thảo luận chi phí và công suất: chọn kích thước phiên bản phù hợp, dùng autoscaling, chuyển dữ liệu nguội sang bộ lưu trữ rẻ hơn và tránh tài nguyên nhàn rỗi.

Dùng bộ 50 câu hỏi được liên kết làm bài ôn tập mô phỏng: trả lời dưới áp lực thời gian, phân loại lỗi và làm lại sau 24 giờ, 3 ngày và 7 ngày.

Mẹo luyện tập Độ tin cậy, khả năng quan sát và bảo mật: Ôn lại bài học này trong các phiên ngắn mỗi ngày. Sau mỗi bài tập, hãy nêu quy tắc hoặc bước bạn đã dùng; nếu không nêu được, hãy ôn lại chủ đề đó trước khi tiếp tục. Kiên trì giúp ghi nhớ tốt hơn một buổi học dài.

Ví dụ

Kế hoạch độ tin cậy: thử lại một thanh toán thất bại ba lần với backoff theo cấp số nhân và jitter, sau đó mở bộ ngắt mạch trong 30 giây. Theo dõi yêu cầu bằng request_id dùng chung và cảnh báo khi độ trễ p99 vượt 500 ms.

Bảo mật: dùng TLS, xác thực qua gateway, lưu bí mật trong vault và giới hạn tốc độ các endpoint đăng nhập.

Đọc lại câu hỏi trước khi kết thúc và xác nhận câu trả lời đúng ý.