- #system-design
- #notification-system
- #pub-sub
- #high-concurrency
- #java
Câu hỏi System Design: Thiết kế hệ thống thông báo – trả lời sao cho điểm caoSystem Design Interview: Design a Notification System – How to Score High
Hướng dẫn chi tiết cách trả lời câu thiết kế hệ thống thông báo trong phỏng vấn, kèm ví dụ thực tế bằng Java và Go.Step‑by‑step guide to ace a notification‑system design interview, with practical Java and Go examples.
Mục lụcContents· 9
Bạn vừa vào buổi phỏng vấn và người phỏng vấn ném ra câu: "Design a notification system that can send email, push and SMS to millions of users". Đó là một trong những câu hỏi system design “điển hình” mà mọi công ty công nghệ dùng để kiểm tra khả năng tư duy kiến trúc, cân nhắc trade‑off và ứng dụng các pattern phổ biến. Dưới đây là cách bạn có thể trả lời sao cho điểm cao, kèm ví dụ thực tế bằng Java Spring Boot và Go.
1. Đặt lại phạm vi (Clarify requirements)#
- Functional: gửi 3 loại kênh (email, push, SMS), hỗ trợ đa ngôn ngữ, cho phép người dùng tùy chọn kênh, và lưu lịch sử thông báo.
- Non‑functional:
- Throughput: ít nhất 10 000 notify/s, “burst” lên 100 000/s trong các chiến dịch marketing.
- Latency: p99 < 200 ms cho push, < 500 ms cho email/SMS.
- Reliability: độ mất dữ liệu < 0.001 %, retry được thực hiện ít nhất 3 lần.
- Scalability: có thể mở rộng ngang (horizontal) khi người dùng tăng.
- Boundary: không cần xây dựng dịch vụ gửi email/SMS thực, chỉ cần mô tả cách tích hợp với nhà cung cấp (SMTP, Twilio, Firebase).
