Thiết kế hệ thống theo từng mức quy mô
47 bài kiến thức và 33 bài thiết kế. Mỗi bài thiết kế làm ở ba mức người dùng, kèm sơ đồ, phép tính và bảng hạ tầng: dùng server gì, bao nhiêu máy, bao nhiêu vCPU và RAM.
Lộ trình học
Cách học, khung trả lời và bản đồ toàn khoá.
- Giới thiệu khoá học
- Cách chuẩn bị
- Khung trả lời 45 phút
- Tổng quan khái niệm
- Tổng quan công nghệ
- Tổng quan pattern
- và 1 bài khác trong danh mục bên trái
Mạng, API, dữ liệu, cache, sharding, CAP và các con số.
- Mạng cơ bản
- Thiết kế API
- Mô hình dữ liệu
- Caching
- Sharding
- Consistent hashing
- và 3 bài khác trong danh mục bên trái
Chọn server, CPU, RAM, database và hạ tầng cho từng mức.
Lời giải lặp lại ở nhiều bài: realtime, tranh chấp, scale đọc ghi.
- Cập nhật realtime
- Tranh chấp tài nguyên
- Quy trình nhiều bước
- Scale đọc
- Scale ghi
- Xử lý file lớn
- và 1 bài khác trong danh mục bên trái
Redis, Kafka, Postgres, Cassandra, Elasticsearch và các công cụ khác.
- Redis
- Elasticsearch
- Kafka
- Temporal
- API Gateway
- Cassandra
- và 11 bài khác trong danh mục bên trái
Bài thiết kế
Dịch vụ biến một URL dài thành mã ngắn như sho.rt/aB3x9Kq. Người tạo link là marketer, dev, người dùng mạng xã hội. Người bấm link là bất kỳ ai, và số lượt bấm lớn gấp khoảng 100 lần số link được tạo.
Tính năng bình luận chạy bên cạnh một buổi livestream: người xem gửi bình luận và thấy bình luận của người khác hiện lên gần như ngay lập tức. Khó nhất là các buổi live lớn có hàng triệu người xem cùng lúc.
Cổng web cho khách của hãng tàu: đặt chỗ chở container và theo dõi container qua các cảng. Booking ít nhưng phải đúng, sự kiện tracking đến đều và nhiều, tra cứu thì đọc nhiều hơn ghi.
Nền tảng chơi cờ vua trực tuyến: người chơi được ghép với đối thủ cùng trình độ, đi nước theo thời gian thực với đồng hồ chính xác, người khác có thể vào xem. Mỗi người chơi trung bình vài ván mỗi ngày, mỗi ván từ 1 đến 30 phút.
Nền tảng bán vé concert, sân khấu, thể thao theo ghế ngồi. Khán giả tìm sự kiện, chọn ghế trên sơ đồ, giữ ghế vài phút và thanh toán; ví dụ một đêm nhạc ở sân Mỹ Đình với 40.000 ghế mở bán cùng lúc.
Sàn đấu giá nơi người bán đăng món hàng với giá khởi điểm và giờ kết thúc, người mua trả giá cao dần. Hết giờ, người trả cao nhất thắng; ví dụ một chiếc đồng hồ cổ có 3.000 người theo dõi và 200 lượt trả giá trong 2 phút cuối.
Ứng dụng giao tạp hóa, đồ uống, đồ dùng trong 15-30 phút từ các kho nhỏ (dark store) đặt rải rác trong thành phố. Ví dụ một khách ở quận 7 mở app lúc 19h, chỉ thấy món còn hàng ở kho gần nhất và nhận hàng sau khoảng 20 phút.
Dịch vụ dùng chung trong công ty để gửi thông báo qua push, email, SMS và hộp thư in-app. Các team khác chỉ gọi một API; ví dụ app ví điện tử gửi OTP, báo biến động số dư và chạy chiến dịch khuyến mãi cho hàng triệu người.
Dịch vụ cho người dùng tải file lên đám mây, tự đồng bộ giữa laptop, điện thoại, web và chia sẻ thư mục cho người khác. Ví dụ một nhóm thiết kế cùng làm trên thư mục 50 GB, sửa file ở máy này thì vài giây sau máy kia đã có bản mới.
Nền tảng cho lập trình viên đọc đề, viết code trên trình duyệt, nộp bài và nhận kết quả chấm sau vài giây. Định kỳ có contest 90 phút với hàng chục nghìn người thi cùng lúc và bảng xếp hạng trực tiếp.
Lớp đứng trước API, đếm request của từng client và chặn khi vượt hạn mức. Nó bảo vệ hệ thống khỏi client viết lỗi, bot và kẻ tấn công, đồng thời thực thi hạn mức theo gói cước.
Người dùng dán link sản phẩm trên Shopee, Tiki, Lazada để xem biểu đồ lịch sử giá và đặt ngưỡng; khi giá xuống dưới ngưỡng thì nhận thông báo. Các sàn không đẩy dữ liệu cho mình, nên hệ thống phải tự đi lấy giá của hàng triệu sản phẩm.
Ứng dụng tìm quán ăn, cà phê, tiệm sửa xe quanh vị trí người dùng, xem điểm đánh giá và viết review kèm ảnh. Ví dụ đứng ở Quận 1 lúc 11 giờ trưa, gõ "bún bò" và muốn thấy các quán trong 2 km đang mở cửa, sắp theo khoảng cách và điểm.
Ứng dụng gom bài từ hàng nghìn trang báo qua RSS, gộp các bài viết về cùng một sự kiện thành một cụm tin và hiển thị theo chủ đề hoặc theo sở thích. Người đọc bấm vào tin thì được chuyển sang bài gốc trên trang báo.
Ứng dụng hẹn hò cho người dùng xem lần lượt hồ sơ của những người ở gần, quẹt phải nếu thích, quẹt trái nếu bỏ qua. Khi hai người cùng quẹt phải nhau thì tạo thành một match và cả hai được báo ngay.
App ghi lại buổi chạy bộ, đạp xe bằng GPS trên điện thoại, cho xem bản đồ, pace, so thành tích trên từng đoạn đường (segment) và chia sẻ với bạn bè. Ví dụ một nhóm chạy hồ Tây sáng chủ nhật cùng bấm Start lúc 5 giờ.
Tự thiết kế một cụm cache key-value trong RAM dùng chung cho các service của công ty, giống một Redis Cluster hay Memcached nội bộ. Service gọi cache trước khi đọc DB để giảm độ trễ và đỡ tải cho DB.
Tính năng bán số lượng có hạn với giá rất thấp trong khung giờ cố định, ví dụ 0h ngày 12.12. Hàng triệu người mở app cùng một giây để tranh vài nghìn sản phẩm.
Hệ thống thu thập số đo (CPU, RAM, số request, độ trễ, lỗi) từ server và ứng dụng, lưu theo thời gian, vẽ dashboard và báo động khi có bất thường. Người dùng là kỹ sư vận hành, dev on-call và đội SRE.
Cổng thanh toán đứng giữa cửa hàng (merchant) và các ngân hàng, tổ chức thẻ, ví. Merchant gọi API để thu tiền của khách, hệ thống làm việc với nhà cung cấp thanh toán (PSP), ghi sổ cái và báo kết quả lại cho merchant qua webhook.
Dịch vụ dùng chung cho các team trong công ty: đăng ký một tác vụ chạy một lần vào lúc X hoặc lặp lại theo biểu thức cron, ví dụ gửi nhắc gia hạn lúc 9h sáng hay chốt báo cáo lúc 0h. Scheduler lo việc gọi đúng giờ, chạy lại khi lỗi và báo cho chủ tác vụ khi hỏng hẳn.
Ứng dụng đăng ảnh kèm chú thích, theo dõi người khác và lướt feed ảnh của những người mình theo dõi. Phần khó nằm ở ba chỗ: nhận và xử lý hàng triệu ảnh mỗi ngày, phát hàng petabyte ảnh qua CDN, và đếm like cho bài của người nổi tiếng.
Trang chủ hiển thị bài mới từ những người và trang mà người dùng theo dõi. Đọc nhiều hơn ghi hàng trăm lần, và một số tài khoản có hàng triệu người theo dõi.
Nền tảng cho người dùng tải video lên và cho hàng triệu người khác xem trên web, điện thoại, TV. Video được chuyển thành nhiều độ phân giải và phát qua CDN, chất lượng tự đổi theo tốc độ mạng của người xem.
Trình soạn thảo trên web cho phép nhiều người sửa cùng một tài liệu cùng lúc, thấy chữ và con trỏ của nhau gần như ngay lập tức. Ví dụ một nhóm 5 người cùng viết báo cáo, mỗi người một phần nhưng thỉnh thoảng sửa chung một đoạn.
Ô tìm kiếm bài viết trong một mạng xã hội: gõ "bão số 3" hay "quan an ngon q1" và nhận các bài liên quan, ưu tiên bài mới và nhiều like. Thách thức là kho bài tăng hàng chục triệu mỗi ngày, lượt like đổ vào liên tục và người dùng gõ tiếng Việt lúc có dấu lúc không.
Bảng xếp hạng K video được xem nhiều nhất trong 1 giờ qua, 24 giờ qua và từ trước tới nay, có thể lọc theo quốc gia. Mỗi lượt xem là một lần ghi, còn bảng xếp hạng được hàng triệu người đọc, nên bài toán nằm ở chỗ đếm đúng và nhanh khi lượt xem đổ về hàng trăm nghìn mỗi giây.
Người xem bấm vào quảng cáo, hệ thống ghi nhận click rồi chuyển họ tới trang của nhà quảng cáo. Nhà quảng cáo xem số click theo phút, giờ, ngày và trả tiền theo số click hợp lệ, nên số liệu vừa phải nhanh vừa phải đúng tới mức tính tiền.
Ứng dụng nhắn tin 1-1 và nhóm, tin đến gần như tức thì khi người nhận đang online và được giữ lại khi họ offline. Người dùng mở app nhiều lần mỗi ngày, nên kết nối lâu dài và độ trễ thấp là trọng tâm.
Ứng dụng cho người dùng trò chuyện với một mô hình ngôn ngữ lớn (LLM): gõ câu hỏi, câu trả lời hiện dần từng chữ, lịch sử hội thoại được lưu để quay lại hỏi tiếp. Khác với chat thường, phần đắt nhất là GPU sinh token, không phải database.
App môi giới cho nhà đầu tư cá nhân: xem bảng giá nhảy liên tục, đặt lệnh mua/bán, theo dõi lệnh khớp và số dư. Công ty chứng khoán chỉ chuyển lệnh lên sàn (HOSE, HNX) và nhận kết quả; việc khớp lệnh do sàn làm.
Khách mở app, thấy xe quanh mình, đặt chuyến và được ghép với một tài xế gần đó. Tài xế liên tục gửi vị trí, nên đây là hệ thống ghi rất nhiều và cần ghép nhanh mà không giao một tài xế cho hai khách.
Hệ thống tự động tải trang web bắt đầu từ danh sách URL gốc (seed), trích link mới rồi đi tiếp, lưu nội dung cho bước index của máy tìm kiếm, công cụ SEO hoặc bộ dữ liệu huấn luyện. Ở đây không có người dùng cuối, quy mô được đo bằng số trang tải mỗi ngày.