30 câu hỏi và câu trả lời phỏng vấn về thiết kế hệ thống hàng đầu (2026)

Việc chuẩn bị cho một cuộc phỏng vấn thiết kế hệ thống có nghĩa là dự đoán cách nhà tuyển dụng đánh giá tư duy kiến trúc dưới áp lực. Câu hỏi phỏng vấn thiết kế hệ thống Thể hiện chiều sâu, sự đánh đổi, khả năng mở rộng và khả năng giao tiếp thông qua các cuộc thảo luận có cấu trúc.
Sự chuẩn bị kỹ lưỡng mở ra nhiều cơ hội nghề nghiệp trong các lĩnh vực nền tảng đám mây, hệ thống phân tán và kỹ thuật dữ liệu, chứng minh chuyên môn kỹ thuật thông qua phân tích thực tế. Các chuyên gia làm việc trong lĩnh vực này xây dựng kỹ năng thực tiễn, hỗ trợ nhóm, giúp quản lý đưa ra quyết định và giải đáp các câu hỏi thường gặp ở mọi cấp độ, từ người mới ra trường đến cấp cao, bao gồm cả các khía cạnh nâng cao, cơ bản và kỹ thuật trên toàn cầu hiện nay. Đọc thêm ...
👉 Tải xuống PDF miễn phí: Câu hỏi và câu trả lời phỏng vấn về thiết kế hệ thống
Những câu hỏi và câu trả lời phỏng vấn thiết kế hệ thống hàng đầu
1) Hãy giải thích thiết kế hệ thống là gì và tại sao nó lại quan trọng trong kỹ thuật phần mềm.
Thiết kế hệ thống là quá trình xác định kiến trúc, các thành phần, giao diện và dữ liệu cho một hệ thống. Để đáp ứng các yêu cầu cụ thể một cách có khả năng mở rộng, đáng tin cậy và dễ bảo trì. Nó kết nối các mục tiêu cấp cao (những gì hệ thống nên thực hiện) với các quyết định cụ thể về công nghệ, giao thức và các mẫu kiến trúc. Một thiết kế hệ thống mạnh mẽ đảm bảo rằng ứng dụng hoạt động tốt dưới tải trọng, vẫn chịu được lỗi và có thể phát triển theo thời gian mà không cần viết lại hoàn toàn.
Trong các cuộc phỏng vấn, điều này thể hiện khả năng cân bằng của bạn. yêu cầu chức năng với các ràng buộc phi chức năng Các yếu tố như khả năng mở rộng, độ trễ, tính nhất quán và tính khả dụng đều được xem xét. Tất cả các công ty công nghệ lớn đều đánh giá kỹ năng thiết kế hệ thống của ứng viên để đo lường khả năng phán đoán kỹ thuật thực tế.
2) Làm thế nào để phân biệt Thiết kế cấp cao (HLD) với Thiết kế cấp thấp (LLD) trong kiến trúc hệ thống?
Thiết kế cấp cao (HLD) tập trung vào Tổng quan kiến trúc và các thành phần chính mà không đi sâu vào chi tiết triển khai. Nó cho thấy cách các hệ thống tương tác với nhau — ví dụ: máy chủ web, cơ sở dữ liệu, bộ nhớ cache, Cổng APIvà hệ thống nhắn tin.
Thiết kế cấp thấp (LLD) đi sâu hơn vào... Định nghĩa lớp, phương thức, cấu trúc dữ liệu và logic chi tiết. Trong từng thành phần, HLD (High-Driven Design) đề cập đến việc bạn sẽ sử dụng những thành phần nào và cách chúng tương tác; LLD (Learning Design Design) đề cập đến cách bạn sẽ triển khai những tương tác đó. Hiểu cả hai giúp người phỏng vấn đánh giá khả năng tư duy tổng thể cũng như năng lực kỹ thuật chi tiết của bạn.
3) Khi thiết kế hệ thống, bạn nên xem xét những chỉ số hiệu suất chính nào và tại sao?
Các chỉ số hiệu suất giúp định lượng mức độ đáp ứng nhu cầu của người dùng và doanh nghiệp của hệ thống. Các chỉ số chính bao gồm:
- Độ trễ: Thời gian cần thiết để xử lý một yêu cầu duy nhất. Độ trễ thấp hơn có nghĩa là phản hồi nhanh hơn.
- Throughput: Khối lượng công việc được xử lý trong một khoảng thời gian (ví dụ: số yêu cầu mỗi giây). Thông lượng cao hơn thể hiện hiệu quả khi hoạt động dưới tải trọng cao.
- Khả dụng: Tỷ lệ thời gian hệ thống hoạt động. Tính khả dụng cao là yếu tố then chốt đối với các dịch vụ toàn cầu.
Các chỉ số này giúp các nhà thiết kế cân bằng các yếu tố đánh đổi. Ví dụ, bộ nhớ đệm giúp giảm độ trễ nhưng làm phức tạp tính nhất quán của dữ liệu. Việc thể hiện sự hiểu biết về các chỉ số này cho thấy bạn quan tâm đến chất lượng hệ thống thực tế.
| metric | Định nghĩa | Tầm quan trọng |
|---|---|---|
| Độ trễ | Thời gian cho mỗi yêu cầu | Kinh nghiệm người dùng |
| Thông lượng | Số lượng yêu cầu trên mỗi đơn vị thời gian | khả năng mở rộng |
| Sự có sẵn | Thời gian hoạt động so với thời gian ngừng hoạt động | Độ tin cậy |
4) Mô tả việc cân bằng tải và lý do tại sao nó lại quan trọng trong các hệ thống phân tán.
Cân bằng tải là quá trình phân phối các yêu cầu đến trên nhiều máy chủ hoặc dịch vụ. Để ngăn chặn bất kỳ nút nào trở thành điểm nghẽn. Nó đảm bảo rằng dung lượng được sử dụng tối ưu, cải thiện thời gian phản hồi và tăng độ tin cậy của hệ thống bằng cách định tuyến lưu lượng truy cập ra khỏi các trường hợp không ổn định.
Có nhiều loại bộ cân bằng tải khác nhau. Lớp 4 (L4) Bộ cân bằng hoạt động ở lớp vận chuyển (IP/cổng), trong khi một Lớp 7 (L7) Bộ cân bằng tải hoạt động ở lớp ứng dụng, hiểu ngữ nghĩa HTTP/S. Cân bằng tải rất quan trọng đối với khả năng chịu lỗi, mở rộng quy mô mà không gây gián đoạn hoạt động và cập nhật cuốn chiếu trong các hệ thống sản xuất. Trả lời tốt câu hỏi này cho thấy bạn hiểu các sự đánh đổi cơ bản trong hệ thống phân tán giữa hiệu suất, tính nhất quán và chi phí.
5) Bạn sẽ thiết kế dịch vụ TinyURL như thế nào? Mô tả các thành phần cốt lõi và các bước thực hiện.
Việc thiết kế dịch vụ TinyURL bao gồm cả các yêu cầu chức năng (rút ngắn URL, chuyển hướng người dùng) và các yêu cầu phi chức năng (khả năng mở rộng, tính duy nhất, hiệu suất).
Trước tiên, các câu hỏi làm rõ giúp xác định các ràng buộc: khối lượng dự kiến, chính sách hết hạn, nhu cầu phân tích, v.v. Các thành phần chính bao gồm:
- Lớp API: Tiếp nhận và xử lý các yêu cầu rút ngắn/chuyển hướng.
- Cơ sở dữ liệu và bộ nhớ đệm: Lưu trữ các ánh xạ URL gốc ↔ URL rút gọn; việc lưu vào bộ nhớ đệm giúp cải thiện hiệu suất đọc.
- Công cụ tạo ID ngắn: Sử dụng mã băm hoặc mã định danh duy nhất được mã hóa cơ sở.
Để tạo khóa duy nhất một cách hiệu quả, bạn có thể:
- Sử dụng mã hóa base-62 của một mã số định danh tuần tự (ví dụ: 1 → a, 2 → b, v.v.).
- Sử dụng hàm băm có khả năng giải quyết xung đột.
Bạn cũng nên xem xét đến phân tích dữ liệu, giới hạn tốc độ truy cập và xử lý các URL phổ biến bằng cách sử dụng bộ nhớ đệm hoặc mạng phân phối nội dung (CDN) để giảm tải. Việc mô tả những sự đánh đổi này thể hiện chiều sâu trong cả các mẫu thiết kế và các cân nhắc về khả năng mở rộng.
6) Bộ nhớ đệm là gì và nó cải thiện hiệu suất hệ thống như thế nào?
lưu trữ bộ nhớ đệm dữ liệu được truy cập thường xuyên hoặc tốn kém về mặt tính toán Trong môi trường lưu trữ nhanh hơn (bộ nhớ, bộ nhớ đệm phân tán) để giảm thiểu việc tính toán lặp lại và tải cơ sở dữ liệu. Điều này cải thiện đáng kể độ trễ và thông lượng bằng cách xử lý nhanh chóng các yêu cầu phổ biến.
Việc lưu vào bộ nhớ đệm có thể diễn ra ở nhiều lớp: bộ nhớ ứng dụng, Redis/EhcacheCác máy chủ biên CDN hoặc bộ nhớ cục bộ của trình duyệt. Mặc dù bộ nhớ đệm giúp giảm thời gian phản hồi, nhưng nó lại gây ra các vấn đề về tính lỗi thời và vô hiệu hóa, mà bạn phải giải quyết trong quá trình thiết kế. Ví dụ, bạn có thể sử dụng các chính sách thời gian tồn tại (TTL) hoặc các chiến lược vô hiệu hóa bộ nhớ đệm khi dữ liệu cơ bản thay đổi. Câu trả lời tốt cho thấy bạn hiểu cả hai khía cạnh này. lợi ích và cạm bẫy về bộ nhớ đệm.
7) Giải thích Định lý CAP và những tác động của nó đối với thiết kế hệ thống phân tán.
Định lý CAP phát biểu rằng trong một hệ thống phân tán, bạn chỉ có thể chọn tối đa hai trong ba đảm bảo sau:
- Tính nhất quán: Tất cả các nút đều nhìn thấy cùng một dữ liệu tại cùng một thời điểm.
- Khả dụng: Mỗi yêu cầu đều nhận được phản hồi (nhưng không đảm bảo tính chính xác).
- Khả năng chịu đựng phân vùng: Hệ thống vẫn tiếp tục hoạt động bất chấp sự cố mạng.
Không có hệ thống phân tán thực tế nào có thể đạt được cả ba điều này cùng một lúc khi xảy ra sự cố phân vùng mạng. Ví dụ, trong quá trình phân vùng, hệ thống phải lựa chọn giữa việc cung cấp dữ liệu cũ (tính khả dụng) hoặc từ chối các yêu cầu cho đến khi tính nhất quán được khôi phục (tính nhất quán). Hiểu về CAP cho thấy bạn có thể đưa ra các quyết định cân nhắc dựa trên các ưu tiên vận hành — một kỹ năng quan trọng trong các cuộc phỏng vấn thiết kế hệ thống.
8) Nhìn chung, bạn sẽ thiết kế một dịch vụ nhắn tin trò chuyện tương tự như WhatsApp như thế nào?
Để thiết kế một hệ thống trò chuyện quy mô lớn, hãy bắt đầu bằng việc xác định các yêu cầu chính: truyền tải tin nhắn theo thời gian thực, tính bền vững, thứ tự tin nhắn, hỗ trợ ngoại tuyến và khả năng mở rộng.
Ở một cấp độ cao:
- Khách hàng Kết nối thông qua web/di động đến máy chủ cổng.
- Bộ định tuyến tin nhắn Xử lý các tin nhắn đến và chuyển tiếp đến người nhận (thông qua các kết nối liên tục như WebSockets).
- Cơ sở dữ liệu Lưu trữ lịch sử tin nhắn, với phân vùng phù hợp cho số lượng người dùng lớn.
Các thành phần bổ sung bao gồm bộ nhớ đệm cho các cuộc trò chuyện gần đây, hàng đợi để phân phối không đồng bộ và dịch vụ thông báo cho người dùng ngoại tuyến. Bạn nên thảo luận về điều này. Cách thức tin nhắn được lưu trữ, sắp xếp và gửi đến nhiều thiết bị cho mỗi người dùng và cách bạn xử lý việc chuyển đổi dự phòng và khả năng chịu lỗi.
9) Phân mảnh dữ liệu (sharding) là gì và nó giúp mở rộng quy mô cơ sở dữ liệu như thế nào?
Phân mảnh là một hình thức của chia tỷ lệ ngang Trong đó, một tập dữ liệu lớn được chia thành các phân vùng nhỏ hơn, độc lập gọi là shard, mỗi phân vùng được lưu trữ trên một nút cơ sở dữ liệu khác nhau. Điều này giúp cải thiện hiệu suất và khả năng mở rộng bằng cách phân phối dữ liệu và tải truy vấn trên nhiều máy thay vì mở rộng quy mô một phiên bản duy nhất.
Dữ liệu có thể được phân mảnh theo ID khách hàng, khu vực địa lý hoặc hàm băm. Mặc dù phân mảnh giúp giảm tải cho mỗi nút, nhưng nó lại làm tăng độ phức tạp trong các truy vấn liên phân mảnh và việc cân bằng lại khi thêm hoặc xóa các nút. Nhà tuyển dụng mong muốn bạn hiểu được những sự đánh đổi này và cách thức hàm băm nhất quán hoặc trình quản lý phân mảnh có thể giúp đơn giản hóa hoạt động.
10) Mô tả sự khác biệt giữa API và kiến trúc nguyên khối (monolithic architecture).
A Monolithic architecture Phương pháp này gộp tất cả các thành phần ứng dụng vào một đơn vị triển khai duy nhất. Điều này có thể đơn giản hóa quá trình phát triển ban đầu, nhưng sẽ trở nên khó khăn trong việc mở rộng quy mô, bảo trì và cập nhật theo thời gian.
Microservices chia hệ thống thành các dịch vụ nhỏ, có thể triển khai độc lậpMỗi dịch vụ chịu trách nhiệm về một khả năng kinh doanh cụ thể. API (Giao diện lập trình ứng dụng) cho phép giao tiếp giữa các dịch vụ này.
| Yếu tố | Monolithic | Microservices |
|---|---|---|
| Triển khai | Đơn vị | Dịch vụ độc lập |
| khả năng mở rộng | Giới hạn | Mở rộng quy mô theo từng dịch vụ |
| Cách ly lỗi | Tệ | Mạnh |
| phức tạp | Ban đầu đơn giản hơn | Các hoạt động phức tạp hơn |
Kiến trúc microservices giúp cải thiện khả năng mở rộng và tính linh hoạt trong triển khai, nhưng đòi hỏi các công cụ vận hành tiên tiến (phát hiện dịch vụ, theo dõi và khả năng chịu lỗi). Thảo luận về điều này cho thấy bạn có thể suy luận về sự phát triển kiến trúc và sự đánh đổi giữa tính đơn giản và tính linh hoạt.
11) Mạng phân phối nội dung (CDN) hoạt động như thế nào và nó có những ưu điểm gì?
A Mạng phân phối nội dung (CDN) Đây là một mạng lưới phân tán các máy chủ proxy được đặt ở vị trí chiến lược trên nhiều khu vực địa lý khác nhau. Mục tiêu chính của nó là... Cung cấp nội dung cho người dùng với độ trễ tối thiểu. bằng cách phục vụ nó từ máy chủ gần nhất (được gọi là nút biên).
Khi người dùng yêu cầu một tài nguyên web (ví dụ: hình ảnh, video hoặc tệp tĩnh), CDN sẽ lưu trữ nội dung đó vào bộ nhớ cache và phân phối trực tiếp từ máy chủ biên. Nếu nội dung không có trong bộ nhớ cache, nó sẽ lấy nội dung đó từ máy chủ gốc và lưu trữ cho các yêu cầu tiếp theo.
Ưu điểm của CDN:
| Hệ số | Lợi thế |
|---|---|
| Độ trễ | Giảm thời gian phản hồi bằng cách cung cấp nội dung gần hơn với người dùng. |
| Băng thông | Giảm tải việc sử dụng băng thông từ các máy chủ gốc. |
| Độ tin cậy | Cung cấp khả năng chịu lỗi với các nút phân tán. |
| khả năng mở rộng | Xử lý lưu lượng truy cập cao một cách hiệu quả |
CDN đóng vai trò thiết yếu đối với các hệ thống toàn cầu như... Netflix, YouTubehoặc các nền tảng thương mại điện tử, đảm bảo hiệu suất và tính khả dụng cao.
12) Giới hạn tốc độ là gì và tại sao nó lại cần thiết trong thiết kế API?
Giới hạn tỷ lệ Giới hạn số lượng yêu cầu mà một máy khách có thể gửi đến API trong một khoảng thời gian nhất định. Điều này rất quan trọng đối với ngăn ngừa lạm dụng, duy trì việc sử dụng công bằngvà bảo vệ các dịch vụ phụ trợ khỏi tình trạng quá tải hoặc các cuộc tấn công từ chối dịch vụ (DoS).
Các thuật toán phổ biến để giới hạn tốc độ bao gồm:
- Quầy cửa sổ cố định — Đơn giản nhưng có thể gây ra hiện tượng tăng đột biến ở các cạnh cửa sổ.
- Cửa trượt gỗ / Cửa sổ trượt — Giúp xử lý yêu cầu mượt mà hơn.
- Thùng đựng token / Thùng bị rò rỉ — Cho phép các đợt tăng đột biến trong giới hạn cho phép và duy trì luồng yêu cầu ổn định.
Ví dụ, GitHub giới hạn số lượng cuộc gọi API ở mức 5000 cuộc gọi mỗi giờ cho mỗi người dùng. Việc áp dụng giới hạn số lượng cuộc gọi đảm bảo tính ổn định của hệ thống và cải thiện chất lượng dịch vụ tổng thể.
13) Làm thế nào để đảm bảo tính nhất quán dữ liệu trên các hệ thống phân tán?
Việc duy trì tính nhất quán trong các hệ thống phân tán rất khó khăn do vấn đề sao chép dữ liệu và độ trễ mạng. Có một số chiến lược khác nhau tùy thuộc vào sự cân bằng cần thiết giữa tính nhất quán và tính khả dụng:
| Loại tính nhất quán | Mô tả Chi tiết | Trường hợp sử dụng |
|---|---|---|
| Tính nhất quán mạnh mẽ | Tất cả khách hàng đều thấy cùng một dữ liệu ngay lập tức. | Hệ thống ngân hàng |
| Tính nhất quán cuối cùng | Các bản cập nhật được lan truyền không đồng bộ; sự khác biệt tạm thời được cho phép. | Nguồn cấp dữ liệu mạng xã hội |
| Tính nhất quán nhân quả | Duy trì trật tự nhân quả. | Ứng dụng cộng tác |
Các kỹ thuật như nhật ký ghi trước, đồng hồ vectơ, các thuật toán đồng thuận (Raft, Paxos)và cam kết hai giai đoạn (2PC) Giúp duy trì sự đồng bộ. Người phỏng vấn mong muốn bạn giải thích điều này. when Giảm bớt tính nhất quán để đạt được hiệu suất và khả năng mở rộng cao hơn.
14) Giải thích sự khác biệt giữa phép co giãn theo chiều ngang và theo chiều dọc.
Mở rộng quy mô đề cập đến việc tăng khả năng của hệ thống để xử lý nhiều tải hơn. Có hai loại chính:
| Kiểu tỷ lệ | Phương pháp | Ưu điểm | Nhược điểm |
|---|---|---|---|
| Mở rộng theo chiều dọc (Scale-Up) | Thêm tài nguyên (CPU, RAM) cho một máy tính duy nhất. | Dễ triển khai hơn | Giới hạn phần cứng, điểm lỗi duy nhất |
| Mở rộng theo chiều ngang (Mở rộng quy mô) | Bổ sung thêm máy móc để phân bổ tải. | Tính sẵn có cao, tiết kiệm chi phí | Khó quản lý và điều phối. |
Ví dụ, việc mở rộng máy chủ web từ 2 CPU lên 8 CPU là mở rộng theo chiều dọc, trong khi việc thêm nhiều máy chủ phía sau bộ cân bằng tải là mở rộng theo chiều ngang. Các hệ thống phân tán hiện đại như Kubernetes ưu tiên điều này. chia tỷ lệ ngang để có độ đàn hồi.
15) Hàng đợi tin nhắn là gì và tại sao chúng được sử dụng trong kiến trúc phân tán?
A Hàng đợi tin nhắn Tách biệt nhà sản xuất và người tiêu dùng bằng cách lưu trữ tạm thời các thông điệp cho đến khi chúng được xử lý. Điều này cho phép giao tiếp không đồng bộ, giúp cải thiện khả năng phục hồi và khả năng mở rộng trong các hệ thống phân tán.
Các trung gian truyền tin phổ biến bao gồm ThỏMQ, Kafka, Amazon SQSvà Google Pub/Sub.
Lợi ích:
- Làm giảm hiện tượng tắc nghẽn giao thông đột ngột.
- Tách rời các dịch vụ
- Cho phép cơ chế thử lại và lưu trữ dữ liệu.
- Cải thiện khả năng chịu lỗi
Ví dụ: Trên nền tảng thương mại điện tử, dịch vụ đặt hàng có thể gửi một thông báo ("Đơn hàng đã được đặt") mà các dịch vụ quản lý kho và thanh toán sử dụng một cách độc lập, tránh sự phụ thuộc trực tiếp.
16) Bạn sẽ thiết kế một hệ thống lưu trữ tập tin có khả năng mở rộng như thế nào? Google Drive or Dropbox?
Để thiết kế một hệ thống lưu trữ tập tin dựa trên đám mây, hãy chia nó thành các thành phần chính:
- Dịch vụ giao diện người dùng: Hỗ trợ tải lên/tải xuống tập tin thông qua API REST.
- Dịch vụ siêu dữ liệu: Lưu trữ thông tin về quyền sở hữu tệp, quyền truy cập và lịch sử phiên bản.
- Dịch vụ lưu trữ: Quản lý các khối tệp trong hệ thống lưu trữ phân tán (ví dụ: S3, HDFS).
- Phân đoạn: Các tệp được chia thành các phần nhỏ hơn (ví dụ: 4 MB) để lưu trữ và truyền tải hiệu quả.
Những thách thức bao gồm đảm bảo sao chép dữ liệu, nhất quánvà đồng bộ hóa các thay đổi trên nhiều thiết bị. Việc triển khai đồng bộ hóa cấp khối và băm nội dung đảm bảo hiệu quả băng thông và tính toàn vẹn.
17) Những yếu tố chính cần xem xét khi thiết kế lược đồ cơ sở dữ liệu có khả năng mở rộng là gì?
Một lược đồ có khả năng mở rộng cần cân bằng giữa hiệu suất, tính linh hoạt và khả năng bảo trì. Những yếu tố quan trọng cần xem xét bao gồm:
- Phân vùng dữ liệu (Phân mảnh) để xử lý sự tăng trưởng.
- Chuẩn hóa và không chuẩn hóa: Chuẩn hóa để đảm bảo tính toàn vẹn; phi chuẩn hóa để tối ưu hiệu năng khi đọc dữ liệu nhiều.
- Chiến lược lập chỉ mục Để tra cứu nhanh.
- Bộ nhớ đệm và sao chép Để xử lý lưu lượng truy cập cao.
Ví dụ: Trong một ứng dụng mạng xã hội, dữ liệu người dùng và bài đăng có thể được lưu trữ riêng biệt để giảm sự phụ thuộc lẫn nhau và cải thiện hiệu suất truy vấn. Các quyết định thiết kế lược đồ cần phải phù hợp với... mô hình truy cập và tần suất truy vấn.
18) Kiến trúc microservices có những ưu điểm và nhược điểm gì?
Kiến trúc microservices đã trở thành xương sống của các ứng dụng đám mây hiện đại, nhưng chúng cũng đi kèm với những đánh đổi.
| Ưu điểm | Nhược điểm |
|---|---|
| Triển khai và mở rộng độc lập | Tăng độ phức tạp trong hoạt động |
| cô lập lỗi và khả năng phục hồi | Gỡ lỗi phân tán khó hơn |
| Việc áp dụng công nghệ trở nên dễ dàng hơn. | Yêu cầu có văn hóa DevOps mạnh mẽ |
| Khả năng bảo trì mã tốt hơn | Độ trễ cao hơn do số bước nhảy mạng. |
Kiến trúc microservices lý tưởng cho các hệ thống lớn, liên tục phát triển nhưng đòi hỏi khả năng giám sát mạnh mẽ, cổng API và các chiến lược giao tiếp giữa các dịch vụ.
19) Bạn sẽ xử lý việc sao chép cơ sở dữ liệu trong một hệ thống quy mô lớn như thế nào?
sao chép cơ sở dữ liệu Quá trình này bao gồm việc sao chép dữ liệu từ cơ sở dữ liệu chính sang một hoặc nhiều bản sao để cải thiện tính khả dụng và hiệu suất đọc. Có hai loại chính:
| Loại bản sao | Mô tả Chi tiết | Trường hợp sử dụng |
|---|---|---|
| Syncto lớn | Các thay đổi được ghi vào bản sao ngay lập tức. | Tính nhất quán mạnh mẽ |
| không đồng bộ | Máy chủ chính xác nhận thao tác ghi trước khi các máy chủ sao chép cập nhật. | Hiệu suất tốt hơn |
Sự sao chép tăng cường khả năng chịu lỗi, cho phép phân bố địa lývà hỗ trợ đọc tỷ lệ (đọc các bản sao). Tuy nhiên, điều này gây ra những thách thức như độ trễ sao chép và giải quyết xung đột. Các công cụ như MySQL Sao chép nhóm, MongoDB Bộ bản saovà PostgreSQL sao chép luồng là các giải pháp tiêu chuẩn.
20) Kiến trúc hướng sự kiện là gì và nó hữu ích nhất ở đâu?
Kiến trúc hướng sự kiện (EDA) là một mô hình thiết kế trong đó các thành phần giao tiếp với nhau thông qua sự kiện — các thông báo báo hiệu sự thay đổi trạng thái hoặc hành động. Thay vì các yêu cầu trực tiếp, các dịch vụ phát hành và đăng ký các sự kiện một cách bất đồng bộ.
Thiết kế này lý tưởng cho hệ thống liên kết lỏng lẻoVí dụ như các nền tảng IoT, thương mại điện tử và hệ thống phân tích thời gian thực.
Lợi ích:
- Khả năng mở rộng cao
- Các thành phần tách rời
- Phản hồi thời gian thực
Ví dụ: Trong kiến trúc của Uber, khi một chuyến đi được đặt, một sự kiện sẽ kích hoạt cập nhật đồng thời về giá cả, việc ghép nối tài xế và hệ thống thông báo — tất cả mà không cần sự liên kết chặt chẽ.
21) Tính bất biến trong thiết kế hệ thống là gì và tại sao nó lại quan trọng?
sự bình thường có nghĩa là việc thực hiện cùng một thao tác nhiều lần có tác dụng Hiệu quả tương tự như thực hiện một lần.Nó đảm bảo độ tin cậy trong các hệ thống phân tán, nơi các yêu cầu có thể được thử lại do lỗi hoặc độ trễ mạng.
Ví dụ:
- GET và DELETE Các yêu cầu vốn dĩ có tính chất bất biến (việc lặp lại chúng không làm thay đổi trạng thái).
- POST Các yêu cầu (như tạo giao dịch) không có tính chất bất biến trừ khi được thiết kế đặc biệt như vậy.
Để thực hiện tính bất biến:
- Sử dụng ID yêu cầu duy nhất Để theo dõi các bài nộp trùng lặp.
- Duy trì một nhật ký giao dịch Bỏ qua các thao tác lặp lại.
Nguyên tắc này rất quan trọng trong Cổng thanh toán, xử lý đơn hàngvà hệ thống thư điện tử Trong trường hợp này, các hành động trùng lặp có thể gây ra sự không nhất quán nghiêm trọng.
22) Hãy giải thích khái niệm về tính nhất quán cuối cùng bằng một ví dụ.
Cuối cùng nhất quán là một mô hình trong cơ sở dữ liệu phân tán, trong đó các bản cập nhật không hiển thị ngay lập tức cho tất cả các nút, nhưng Hệ thống hội tụ về một trạng thái ổn định theo thời gian..
Ví dụ:
In Amazon'S DynamoDBKhi một mục được cập nhật ở một khu vực, các bản sao ở các khu vực khác có thể tạm thời hiển thị dữ liệu cũ. Tuy nhiên, chúng sẽ được đồng bộ hóa sau đó thông qua quá trình sao chép ngầm.
Mô hình này hữu ích trong việc ưu tiên các hệ thống. sẵn có kết thúc sự nhất quán nghiêm ngặt, Chẳng hạn như:
- Dòng thời gian trên mạng xã hội
- Hệ thống bộ nhớ đệm
- Bản ghi DNS
Sự đánh đổi then chốt nằm ở giữa khả năng chịu đựng sự cũ kỹ và tốc độ phản ứng.
23) Bạn sẽ thiết kế một hệ thống thông báo hỗ trợ nhiều kênh (email, SMS, thông báo đẩy) như thế nào?
Việc thiết kế một hệ thống thông báo có khả năng mở rộng đòi hỏi tính mô-đun và tính linh hoạt.
Archikiến trúc:
- Thông báo API – Nhận yêu cầu thông báo từ các ứng dụng.
- Hàng đợi/Xe buýt tin nhắn – Lưu trữ và phân phối các sự kiện (Kafka, SQS).
- Dịch vụ người lao động – Bộ xử lý dành riêng cho từng kênh (Email, SMS, Thông báo đẩy).
- Các nhà cung cấp dịch vụ giao hàng – Tích hợp với các API bên ngoài như Twilio hoặc Firebase.
- Cơ sở dữ liệu tùy chọn người dùng – Lưu trữ cài đặt đăng ký/hủy đăng ký và tùy chọn tần suất.
Những cân nhắc chính:
- Thử lại các lần giao hàng thất bại bằng chiến lược lùi thời gian.
- Hãy sử dụng mẫu để đảm bảo tính nhất quán.
- Ưu tiên xử lý yêu cầu hỗ trợ (tin nhắn khẩn cấp so với tin nhắn ít ưu tiên).
Thiết kế dạng mô-đun này đảm bảo độ tin cậy và khả năng mở rộng khi các kênh thông báo mới xuất hiện.
24) Lập chỉ mục cơ sở dữ liệu là gì và nó ảnh hưởng đến hiệu suất như thế nào?
A chỉ mục cơ sở dữ liệu Đây là một cấu trúc dữ liệu (thường là cây B hoặc bảng băm) giúp cải thiện tốc độ truy vấn bằng cách giảm số lượng bản ghi mà cơ sở dữ liệu quét.
Ví dụ, việc lập chỉ mục cột email trong bảng người dùng cho phép công cụ cơ sở dữ liệu tìm người dùng theo email một cách nhanh chóng mà không cần quét toàn bộ bảng.
| Yếu tố | Với chỉ mục | Không có mục lục |
|---|---|---|
| Tốc độ truy vấn | Tra cứu nhanh | Quét tuần tự chậm |
| tốc độ ghi | Chậm hơn (cần cập nhật chỉ mục) | viết nhanh hơn |
| Bảo quản | Thêm dung lượng ổ đĩa | Less là gắn |
Chỉ mục giúp cải thiện hiệu suất đọc nhưng cần được sử dụng một cách thận trọng, vì chúng có thể làm chậm quá trình đọc. viết nhiều hệ thống do chi phí bảo trì phát sinh.
25) Làm thế nào để đảm bảo khả năng chịu lỗi trong một hệ thống phân tán quy mô lớn?
Khả năng chịu lỗi Điều này có nghĩa là hệ thống vẫn tiếp tục hoạt động ngay cả khi các thành phần bị lỗi. Điều này đạt được thông qua tính dự phòng, giám sát và khả năng phục hồi tự động.
Các chiến lược bao gồm:
- Nhân rộng: Trùng lặp dữ liệu hoặc dịch vụ giữa các khu vực.
- Cơ chế chuyển đổi dự phòng: Tự động chuyển hướng yêu cầu đến các máy chủ đang hoạt động tốt.
- Kiểm tra sức khỏe hệ thống và bộ cân bằng tải: Phát hiện và cô lập các trường hợp lỗi.
- Bộ ngắt mạch: Ngăn chặn sự cố lan truyền giữa các dịch vụ phụ thuộc.
Ví dụ: NetflixCông cụ “Chaos Monkey” của 's cố tình tắt các phiên bản trong môi trường sản xuất để kiểm tra khả năng phục hồi — một ứng dụng nâng cao của các nguyên tắc chịu lỗi.
26) Sự khác biệt giữa giao tiếp đồng bộ và giao tiếp bất đồng bộ trong hệ thống phân tán là gì?
| Tính năng | SyncGiao tiếp đồng bộ | Giao tiếp không đồng bộ |
|---|---|---|
| Phụ thuộc | Người gửi chờ phản hồi | Người gửi tiến hành độc lập |
| Các ví dụ | Các cuộc gọi API REST HTTP | Hàng đợi tin nhắn, Kafka |
| Độ trễ | Cao hơn (chặn) | Độ trễ cảm nhận thấp hơn |
| Độ tin cậy | Thấp hơn trong trường hợp thất bại | Cao hơn (thông điệp có thể tồn tại) |
SyncCác hệ thống đồng bộ đơn giản hơn nhưng liên kết chặt chẽ, trong khi các hệ thống bất đồng bộ cải thiện khả năng mở rộng và khả năng cách ly lỗi.
Ví dụ, quá trình xử lý đơn hàng trong hệ thống thương mại điện tử có thể diễn ra bất đồng bộ, nhưng việc xác nhận thanh toán vẫn phải diễn ra đồng bộ để đảm bảo phản hồi tức thì cho người dùng.
27) Bạn sẽ thiết kế bộ giới hạn tốc độ cho hệ thống API phân tán như thế nào?
Bộ giới hạn tốc độ phân tán đảm bảo việc sử dụng API công bằng trên nhiều máy chủ.
Phương pháp tiếp cận:
- Thuật toán nhóm mã thông báo – Mỗi người dùng nhận được một mã thông báo sẽ được bổ sung theo thời gian.
- Thuật toán thùng rò rỉ – Các yêu cầu được xử lý với tốc độ ổn định.
- Bộ đếm tập trung (ví dụ: Redis) – Duy trì số lượng yêu cầu cho mỗi người dùng.
Ví dụ thực hiện:
- Sử dụng bộ đếm nguyên tử Redis với TTL.
- Theo dõi dấu thời gian yêu cầu cho mỗi khóa người dùng.
- Từ chối các yêu cầu vượt quá ngưỡng cho phép.
Giới hạn tốc độ ngăn chặn lạm dụng, Các cuộc tấn công DoSvà chi phí tăng đột biến ngoài dự kiến, đảm bảo chất lượng dịch vụ nhất quán cho tất cả khách hàng.
28) Thuật toán đồng thuận phân tán là gì và tại sao nó lại cần thiết?
Các thuật toán đồng thuận phân tán đảm bảo rằng nhiều nút trong một hệ thống hoạt động đồng thuận. thống nhất một giá trị dữ liệu duy nhấtNgay cả khi xảy ra lỗi.
Các thuật toán phổ biến:
- Paxos
- Bè
- zab (được sử dụng trong ZooKeeper)
Chúng rất cần thiết để duy trì bầu cử lãnh đạo, sao chép trạng tháivà dữ liệu nhất quán trong các cơ sở dữ liệu phân tán và các trình quản lý cụm như Kubernetes.
Ví dụ: Raft đảm bảo tất cả các nút đều thống nhất về các mục nhật ký trước khi áp dụng chúng vào các máy trạng thái, đảm bảo độ tin cậy ngay cả khi các nút gặp sự cố.
29) Bạn sẽ thiết kế hệ thống ghi nhật ký và giám sát cho kiến trúc microservices như thế nào?
Việc giám sát các hệ thống phân tán đòi hỏi khả năng quan sát tập trung để phát hiện và giải quyết các sự cố.
Thành phần cốt lõi:
- Ghi nhật ký: Thu thập nhật ký từ tất cả các dịch vụ bằng các công cụ như... Fluentd or Logstash.
- Số liệu: Sử dụng Prometheus hoặc Datadog để theo dõi các chỉ số hiệu năng (CPU, bộ nhớ, độ trễ yêu cầu).
- Truy tìm: Triển khai tính năng theo dõi phân tán (Jaeger, Zipkin) để theo dõi đường dẫn yêu cầu giữa các dịch vụ.
- Cảnh báo: Đặt ngưỡng để kích hoạt cảnh báo trong PagerDuty hoặc Slack.
Thực hành tốt nhất:
Sử dụng ID tương quan Theo dõi yêu cầu của một người dùng duy nhất trên nhiều microservice — điều này rất quan trọng để gỡ lỗi các sự cố trong môi trường sản xuất.
30) Những yếu tố thiết kế chính cần xem xét khi xây dựng hệ thống có tính khả dụng cao (HA) là gì?
A Tính khả dụng cao (HA) Hệ thống này giảm thiểu thời gian ngừng hoạt động và đảm bảo dịch vụ liên tục.
Các yếu tố thiết kế chính:
- Dư: Sử dụng nhiều máy chủ cho mỗi thành phần.
- Loại bỏ các điểm lỗi đơn lẻ (SPOF).
- Tự động chuyển đổi dự phòng: Chuyển hướng lưu lượng truy cập trong thời gian xảy ra sự cố.
- Sao chép dữ liệu: Đảm bảo tính toàn vẹn của dữ liệu trên tất cả các khu vực.
- Theo dõi sức khỏe: Tự động phát hiện và thay thế các nút không hoạt động bình thường.
- Phục hồi sau thảm họa (DR): Triển khai sao lưu và nhân bản dữ liệu theo khu vực địa lý.
Ví dụ: AWS triển khai các dịch vụ trên nhiều Vùng sẵn sàng (AZ) và sử dụng Elastic Load Balancer để tự động chuyển đổi dự phòng, đảm bảo SLA thời gian hoạt động 99.99%.
🔍 Những câu hỏi phỏng vấn về thiết kế hệ thống hàng đầu kèm theo các tình huống thực tế và câu trả lời chiến lược
1) Bạn tiếp cận việc thiết kế một hệ thống phân tán quy mô lớn từ đầu như thế nào?
Mong đợi từ ứng viên: Người phỏng vấn muốn hiểu khả năng tư duy có hệ thống của bạn, khả năng làm rõ yêu cầu và cách bạn phân tích các vấn đề phức tạp thành các phần nhỏ dễ quản lý.
Câu trả lời ví dụ: “Tôi bắt đầu bằng việc làm rõ các yêu cầu chức năng và phi chức năng, chẳng hạn như khả năng mở rộng, tính khả dụng và độ trễ. Sau đó, tôi phác thảo kiến trúc cấp cao, xác định các thành phần cốt lõi, định nghĩa luồng dữ liệu và lựa chọn các công nghệ phù hợp. Tiếp theo, tôi xem xét các điểm nghẽn, các kịch bản lỗi và sự đánh đổi trước khi tinh chỉnh thiết kế.”
2) Bạn có thể giải thích sự khác biệt giữa phép co giãn ngang và phép co giãn dọc, và khi nào thì nên sử dụng từng loại?
Mong đợi từ ứng viên: Người phỏng vấn đang kiểm tra kiến thức nền tảng của bạn về khả năng mở rộng và khả năng áp dụng chiến lược đúng đắn trong các hệ thống thực tế.
Câu trả lời ví dụ: “Mở rộng theo chiều dọc liên quan đến việc bổ sung thêm tài nguyên cho một máy duy nhất, trong khi mở rộng theo chiều ngang bổ sung thêm máy để xử lý tải. Mở rộng theo chiều dọc đơn giản hơn nhưng bị hạn chế, trong khi mở rộng theo chiều ngang phức tạp hơn nhưng cung cấp khả năng chịu lỗi tốt hơn và khả năng mở rộng lâu dài.”
3) Làm thế nào để đảm bảo tính khả dụng cao trong thiết kế hệ thống?
Mong đợi từ ứng viên: Người phỏng vấn muốn đánh giá sự hiểu biết của bạn về tính dự phòng, cơ chế chuyển đổi dự phòng và khả năng phục hồi của hệ thống.
Câu trả lời ví dụ: “Trong vai trò trước đây, tôi đảm bảo tính khả dụng cao bằng cách sử dụng bộ cân bằng tải, triển khai các dịch vụ trên nhiều vùng khả dụng, thực hiện kiểm tra trạng thái và thiết kế các dịch vụ không trạng thái khi có thể. Những chiến lược này đã giảm thiểu các điểm lỗi đơn lẻ.”
4) Hãy mô tả một lần bạn phải đưa ra sự đánh đổi giữa tính nhất quán và tính sẵn có.
Mong đợi từ ứng viên: Người phỏng vấn đang đánh giá sự hiểu biết của bạn về định lý CAP và khả năng ra quyết định của bạn trong các tình huống ràng buộc.
Câu trả lời ví dụ: “Ở vị trí trước đây, tôi làm việc trên một hệ thống mà độ trễ thấp là yếu tố cực kỳ quan trọng. Chúng tôi đã chọn tính nhất quán cuối cùng thay vì tính nhất quán mạnh để duy trì tính khả dụng trong trường hợp mạng bị gián đoạn, điều này được chấp nhận đối với trường hợp sử dụng của doanh nghiệp.”
5) Làm thế nào để bạn quyết định sử dụng cơ sở dữ liệu nào cho một hệ thống cụ thể?
Mong đợi từ ứng viên: Người phỏng vấn muốn xem bạn lựa chọn phương án lưu trữ dữ liệu sao cho phù hợp với yêu cầu hệ thống như thế nào.
Câu trả lời ví dụ: “Tôi đánh giá các mô hình truy cập dữ liệu, yêu cầu về tính nhất quán, nhu cầu về khả năng mở rộng và độ phức tạp của truy vấn. Cơ sở dữ liệu quan hệ hoạt động tốt với dữ liệu có cấu trúc và các giao dịch, trong khi cơ sở dữ liệu NoSQL phù hợp hơn cho thông lượng cao và lược đồ linh hoạt.”
6) Bạn sẽ thiết kế hệ thống như thế nào để xử lý tình trạng lưu lượng truy cập tăng đột biến?
Mong đợi từ ứng viên: Người phỏng vấn đang kiểm tra khả năng thiết kế đáp ứng được yêu cầu về khả năng mở rộng và tải trọng không thể dự đoán trước của bạn.
Câu trả lời ví dụ: “Tôi thường sử dụng các nhóm tự động mở rộng quy mô, bộ cân bằng tải và các lớp bộ nhớ đệm như bộ nhớ trong. Trong công việc trước đây, những kỹ thuật này cho phép hệ thống hấp thụ các đợt tăng đột biến lưu lượng truy cập mà không ảnh hưởng đến hiệu suất.”
7) Bộ nhớ đệm đóng vai trò gì trong thiết kế hệ thống và bạn sẽ triển khai nó ở đâu?
Mong đợi từ ứng viên: Người phỏng vấn muốn hiểu cách bạn tối ưu hóa hiệu suất và giảm tải cho các dịch vụ cốt lõi.
Câu trả lời ví dụ: “Bộ nhớ đệm giúp cải thiện thời gian phản hồi và giảm tải cho cơ sở dữ liệu. Nó có thể được triển khai ở nhiều lớp, bao gồm phía máy khách, CDN, cấp độ ứng dụng và bộ nhớ đệm truy vấn cơ sở dữ liệu, tùy thuộc vào trường hợp sử dụng.”
8) Bạn xử lý việc phân vùng và chia nhỏ dữ liệu như thế nào?
Mong đợi từ ứng viên: Người phỏng vấn đang đánh giá khả năng thiết kế hệ thống có khả năng mở rộng dữ liệu theo chiều ngang của bạn.
Câu trả lời ví dụ: “Tôi chọn khóa phân mảnh sao cho phân bổ dữ liệu đồng đều và giảm thiểu các truy vấn giữa các phân mảnh. Tôi cũng lên kế hoạch cho việc phân mảnh lại và giám sát việc phân phối dữ liệu để tránh các điểm nóng khi hệ thống phát triển.”
9) Hãy mô tả một tình huống mà việc giám sát hệ thống đã ảnh hưởng đến quyết định thiết kế.
Mong đợi từ ứng viên: Người phỏng vấn muốn xem bạn sử dụng khả năng quan sát hệ thống như thế nào để cải thiện độ tin cậy và hiệu suất của hệ thống.
Câu trả lời ví dụ: “Việc giám sát các chỉ số như độ trễ và tỷ lệ lỗi đã cho thấy một điểm nghẽn trong dịch vụ API. Dựa trên phát hiện này, tôi đã thiết kế lại dịch vụ thành bất đồng bộ, điều này đã cải thiện đáng kể hiệu suất.”
10) Làm thế nào để bạn truyền đạt các thiết kế hệ thống phức tạp cho các bên liên quan không chuyên về kỹ thuật?
Mong đợi từ ứng viên: Người phỏng vấn đang đánh giá kỹ năng giao tiếp và khả năng dung hòa các quyết định kỹ thuật với mục tiêu kinh doanh của bạn.
Câu trả lời ví dụ: “Tôi tập trung vào các khái niệm cấp cao, sử dụng sơ đồ và liên hệ các thành phần kỹ thuật với kết quả kinh doanh. Cách tiếp cận này giúp các bên liên quan hiểu được giá trị và tác động của thiết kế mà không bị sa đà vào các chi tiết kỹ thuật.”
