[System design interview] CHƯƠNG 8: THIẾT KẾ DỊCH VỤ RÚT GỌN URL
Đây là bản dịch tiếng Việt của "System design interview" (Tác giả: Unknown Author). Bài được dịch tự động bởi Aha! Mind Interpreter — pipeline dịch sách kỹ thuật sử dụng Gemini Flash.
⚠️ Bản dịch tự động — có thể có lỗi. Vui lòng đối chiếu với bản gốc tiếng Anh khi cần độ chính xác cao.
CHƯƠNG 8: THIẾT KẾ DỊCH VỤ RÚT GỌN URL
Trong chương này, chúng ta sẽ giải quyết một câu hỏi phỏng vấn thiết kế hệ thống thú vị và kinh điển: thiết kế một dịch vụ rút gọn URL như tinyurl.
Bước 1 - Hiểu vấn đề và xác định phạm vi thiết kế
Các câu hỏi phỏng vấn thiết kế hệ thống thường cố ý được để mở. Để thiết kế một hệ thống tốt, việc đặt các câu hỏi làm rõ là rất quan trọng.
Ứng viên: Bạn có thể cho một ví dụ về cách một dịch vụ rút gọn URL hoạt động không? Người phỏng vấn: Giả sử URL https://www.systeminterview.com/q=chatsystem&c=loggedin&v=v3&l=long là URL gốc. Dịch vụ của bạn sẽ tạo một bí danh (alias) có độ dài ngắn hơn: https://tinyurl.com/ y7keocwj. Nếu bạn nhấp vào bí danh này, nó sẽ chuyển hướng bạn đến URL gốc.
Ứng viên: Lưu lượng truy cập là bao nhiêu? Người phỏng vấn: 100 triệu URL được tạo ra mỗi ngày.
Ứng viên: URL rút gọn dài bao nhiêu? Người phỏng vấn: Ngắn nhất có thể.
Ứng viên: Những ký tự nào được phép trong URL rút gọn? Người phỏng vấn: URL rút gọn có thể là sự kết hợp của các số (0-9) và ký tự (a-z, A-Z).
Ứng viên: Các URL rút gọn có thể bị xóa hoặc cập nhật không? Người phỏng vấn: Để đơn giản, chúng ta hãy giả định rằng các URL rút gọn không thể bị xóa hoặc cập nhật.
Dưới đây là các trường hợp sử dụng cơ bản:
- URL shortening: cho một URL dài => trả về một URL ngắn hơn nhiều
- Chuyển hướng URL: cho một URL ngắn hơn => chuyển hướng đến URL gốc
- Các cân nhắc về tính sẵn sàng cao (High availability), khả năng mở rộng (scalability) và khả năng chịu lỗi (fault tolerance)
Ước tính sơ bộ
- Thao tác ghi: 100 triệu URL được tạo ra mỗi ngày.
- Thao tác ghi mỗi giây: 100 triệu / 24 / 3600 = 1160
- Thao tác đọc: Giả sử tỷ lệ thao tác đọc so với thao tác ghi là 10:1, thao tác đọc mỗi giây: 1160 * 10 = 11.600
- Giả sử dịch vụ rút gọn URL sẽ hoạt động trong 10 năm, điều này có nghĩa là chúng ta phải hỗ trợ 100 triệu * 365 * 10 = 365 tỷ bản ghi.
- Giả sử độ dài URL trung bình là 100.
- Yêu cầu lưu trữ trong 10 năm: 365 tỷ * 100 byte * 10 năm = 365 TB