Mở đầu:
- Thiết kế hệ thống là một phần quan trọng trong các kỹ năng của một Kỹ sư phần mềm. Kỹ năng này đòi hỏi phải ứng viên phải hiểu được yêu cầu của người dùng, biết được các thành phần của một hệ thống và thiết kế sao cho đạt được mục tiêu của đề bài.
- Chúng ta sẽ xem xét một công thức 4 bước để thiết kế hệ thống, bao gồm:
1. Hiểu rõ các yêu cầu
2. Xác định các thành phần
3. Thiết kế các thành phần
4. Khả năng mở rộng
Bước 1: Hiểu các yêu cầu
- Bước đầu tiên là xác định và hiểu yêu cầu của người dùng. Chúng ta không nên trả lời ngay khi vừa nhận được đề bài, mà phải biết cách hỏi những câu “đúng” với trọng tâm vấn đề, và giải quyết nó. Ở bước này, khi không rõ một vấn đề thì cần phải đặt câu hỏi với nhà tuyển dụng, khi ấy họ sẽ nói chúng ta tự đặt giả thuyết, hoặc họ sẽ cung cấp thông tin giả định.
- Vậy thì phải hỏi những câu gì? Sau đây là một số câu hỏi:
- Đang xây dựng chức năng gì?
- Bao nhiêu khách hàng sử dụng chức năng này?
- Dự kiến chức năng này phát triển mạnh thế nào? 3 tháng, 6 tháng?
- Công ty đang dùng các công nghệ thế nào? Liệu có dịch vụ nào công ty đã có rồi, có thể giúp việc tích hợp phần mềm vào dễ dàng hơn?
Bước 2: Xác định các thành phần
Ở bước này, mục tiêu là phải đưa ra một thiết kế tổng quan cho hệ thống. Chúng ta có thể tưởng tượng nhà tuyển dụng là đồng nghiệp của mình, và phối hợp với họ trong quá trình phỏng vấn.
- Vẽ ra một thiết kế cơ bản, sau đó hỏi feedback từ nhà tuyển dụng. Nhiều nhà tuyển dụng muốn cùng thảo luận và đi cùng chúng ta khi thiết kế hệ thống.
- Vẽ các thành phần quan trọng trên giấy. Những thành phần này có thể gồm các dạng khách hàng (Mobile/Web), APIs, Web Servers, Data Stores, Cache, CDN…
- Dùng các phép tính cơ bản (được dùng trong Envelope Estimation) để kiểm tra xem thiết kế cơ bản có phù hợp được với khả năng mở rộng không. Hỏi người phỏng vấn trước liệu Envelope Estimation có cần thiết không trước khi thực hiện.
Bước 3: Thiết kế các thành phần
Khi thực hiện bước này, thì thường bạn và nhà tuyển dụng đã chốt lại được một số nội dung sau:
- Mục tiêu tổng quan, và phạm vi (scope) của chức năng
- Một bản thiết kế tổng quan, và những phản hồi của nhà tuyển dụng về nó
Ở bước này, bạn cần làm việc với nhà tuyển dụng để xác định ưu tiên giữa các thành phần trong hệ thống. Cần lưu ý rằng mỗi nhà tuyển dụng sẽ có khẩu vị khác nhau khi hỏi ứng viên, có thể là về tổng quan các thành phần với nhau, hay là hỏi sâu về hiệu suất hệ thống, hay xử lý các vấn đề gây tắc nghẽn (bottleknecks) hệ thống.
Việc quản lý thời gian là vô cùng quan trọng khi phỏng vấn, vì vậy cố gắng không đưa ra những thông tin không cần thiết khi phỏng vấn.
Bước 4: Kiểm tra khả năng mở rộng
Bước cuối cùng là kiểm tra khả năng mở rộng của hệ thống. Bước này nhà phỏng vấn có thể hỏi thêm một vài câu để biết được các phương pháp để mở rộng hệ thống khi nhu cầu thay đổi, và có thể thảo luận về một vài thứ khác liên quan đến hệ thống.
Một số câu hỏi ở phần này có thể như:
- Xác định những phần có thể gây nghẽn hệ thống, và thảo luận về những việc có thể cải thiện. Đừng bao giờ tự tin rằng thiết kế hệ thống của mình là hoàn hảo và không cần cải thiện gì thêm. Luôn có một thứ gì có thể cải thiện.
- Có thể tóm tắt lại thiết kế. Việc này sẽ rất quan trọng nếu trong khi trình bày, bạn có nói về không chỉ một giải pháp.
- Một số trường hợp bị lỗi hệ thống (sập server, rớt mạng…) và cách xử lý
- Các vấn đề khi vận hành: làm sao để quản lý (monitor) metrics và logs.
Phân bổ thời gian cho các bước:
- Bước 1: Hiểu rõ các yêu cầu: 3 – 10 phút
- Bước 2: Xác định các thành phần: 10 – 15 phút
- Bước 3: Thiết kế các thành phần: 10 – 25 phút
- Bước 4: Khả năng mở rộng và kết thúc: 3 – 5 phút
Nguồn tài liệu tham khảo:
bài viết rất hay, cảm ơn!
Cám ơn bạn, hãy thả tim và để lại một đăng ký kênh để có thêm nhiều kiến thức bổ ích nhé!