System design là cảnh giới tiếp theo của các bạn Junior hoặc Middle dev. Tại đó anh em sẽ phải là người thiết kế ra cả một hệ thống sẽ chạy như thế nào, sử dụng những công nghệ gì, tương tác giữa các thành phần và cấu hình chúng ra sao. Khi phải thiết kế hệ thống, có muôn vàn thứ mà anh em cần phải đảm bảo, đặc biệt là hiệu suất và khả năng mở rộng cũng như tối ưu của hệ thống. Trong hành trình trở thành master trong lĩnh vực này, có 7 kiếp nạn mà ai ai cũng đều phải đối mặt, mọi người hãy cùng Huy đi qua xem các kiếp nạn này là gì và giải pháp căn bản mình có thể tiếp cận để vượt qua nó là gì nhé. Let’s go!
7 kiếp nạn thường gặp khi thiết kế hệ thống |
1. Read-Heavy System
- Vấn đề: Hệ thống dành cho việc đọc rất nhiều và có thể bị chậm hiệu suất do các yêu cầu truy cập dữ liệu thường xuyên. Ví dụ như các website mua hàng, đọc báo, .. vào lúc cao điểm có rất nhiều người sẽ vào để đọc và xem thông tin.
- Giải pháp: Triển khai các cơ chế lưu trữ tạm (cache) để lưu trữ dữ liệu được truy cập thường xuyên trong bộ nhớ tốc độ cao. Điều này giúp giảm thiểu nhu cầu lấy dữ liệu từ bộ nhớ chính, cải thiện đáng kể hiệu suất đọc.
2. Write-Heavy System
- Vấn đề: Hệ thống ghi nhiều có thể gặp phải tình trạng tắc nghẽn và các vấn đề về hiệu suất khi xử lý đồng bộ một lượng lớn yêu cầu ghi dữ liệu. Ví dụ: như hệ thống ghi nhận hành vi người dùng. Tại lúc cao điểm, có rất nhiều hành vi người dùng trên website (view, click, scroll, ..), hệ thống cần phải đảm bảo được dữ liệu được ghi vào kịp thời và đầy đủ.
- Giải pháp: Hàng đợi message (message queue)
Sử dụng message queue để tách rời quá trình tạo và tiêu thụ dữ liệu. Bằng cách cho phép xử lý các hoạt động ghi dữ liệu theo kiểu bất đồng bộ, message queue cải thiện độ tin cậy của hệ thống và có thể xử lý các đợt tải đột ngột hiệu quả hơn.
3. Transactional Data
- Vấn đề: Quản lý dữ liệu giao dịch với các mối quan hệ phức tạp có thể trở nên khó khăn nếu không có sự hỗ trợ thích hợp từ cơ sở dữ liệu. Ví dụ như các giao dịch liên quan đến tiền: chuyển khoản, thanh toán…
- Giải pháp: Sử dụng Hệ quản trị cơ sở dữ liệu quan hệ (RDBMS) hoặc cơ sở dữ liệu SQL. Các hệ thống này được thiết kế để xử lý dữ liệu có cấu trúc, đảm bảo tính toàn vẹn dữ liệu, độ tin cậy và hỗ trợ các thuộc tính ACID (Nguyên tử, Tính nhất quán, Tính độc lập, Độ bền).
4. Unstructured or Semi-structured Data
- Vấn đề: Cơ sở dữ liệu quan hệ truyền thống không phù hợp để quản lý hiệu quả dữ liệu không cấu trúc hoặc dữ liệu bán cấu trúc. Ví dụ như chính những dữ liệu và hành vi người dùng trên website, có rất nhiều những hành vi xảy ra mà chưa thể định nghĩa được đầy đủ nhất vào lúc ban đầu để có thể thiết kế Database theo truyền thống
- Giải pháp: Chọn cơ sở dữ liệu NoSQL (Document DB, Key-value DB, Graph DB, Column Based DB), cung cấp tính linh hoạt hơn trong việc mô hình hóa dữ liệu và có thể xử lý khối lượng lớn dữ liệu không cấu trúc hiệu quả hơn.
5. Complex Data (Videos, Images, Files)
- Vấn đề: Lưu trữ và quản lý các dữ liệu phức tạp như video, hình ảnh và tệp có thể tốn nhiều tài nguyên và gây khó khăn.
- Giải pháp: Sử dụng các hệ thống lưu trữ Blob hoặc Object, được thiết kế đặc biệt để xử lý các đối tượng nhị phân lớn. Các hệ thống này cung cấp khả năng mở rộng, độ bền và tiết kiệm chi phí. Phổ biến thì đa số các doanh nghiệp lựa chọn các dịch vụ của Cloud Platform để lưu trữ các dữ liệu này, thay vì tự xây dựng và quản lý
6. High Availability
- Vấn đề: Đảm bảo tính sẵn sàng cao của dịch vụ là một điều rất khó khăn, đặc biệt là trong thời gian lưu lượng truy cập cao hoặc lỗi máy chủ. Ví dụ ngay như hệ thống đăng ký tín chỉ của trường, bình thường chẳng ai vào, nhưng đến mùa đăng ký thì anh em nô nức F5 dẫn đến quá tải hệ thống.
- Giải pháp: Triển khai bộ cân bằng tải (load balancer) để phân phối lưu lượng truy cập mạng đến nhiều máy chủ. Điều này đảm bảo không có máy chủ nào bị quá tải, giảm thiểu nguy cơ ngừng dịch vụ và cải thiện độ tin cậy tổng thể của hệ thống. Tất nhiên, điều kiện cần là bạn phải triển khai dịch vụ trên nhiều máy chủ nhé 😀
7. High-Volume Data Search
- Vấn đề: Tìm kiếm qua khối lượng dữ liệu lớn có thể chậm và kém hiệu quả nếu không có công cụ có indexing thích hợp. Ví dụ bạn muốn tìm kiếm nội dung comment trên hàng trăm nghìn bài post hoặc comment, xem có những từ khoá nhạy cảm nào không chẳng hạn. Sẽ rất là khó khăn nếu chỉ sử dụng index thông thường
- Giải pháp: Hãy tận dụng các index chuyên cho việc tìm kiếm hoặc đơn giản là xây riêng một hệ thống Search Engine để phục vụ cho yêu cầu này. Các hệ thống này cho phép truy xuất dữ liệu nhanh chóng bằng cách lập chỉ mục dữ liệu theo định dạng có thể tìm kiếm, cải thiện đáng kể hiệu suất tìm kiếm.
Chốt bài, thiết kế hệ thống là một lĩnh vực đòi hỏi rất nhiều: “kiến thức, kinh nghiệm và trải nghiệm”, đồng thời phải cân đối rất nhiều yếu tố liên quan đến bài toán thực tế. Tuy nhiên đây là một ngọn núi mà chắc chắn trên hành trình trở thành một chuyên gia công nghệ, chắc chắn bạn phải vượt qua. Hi vọng những keyword nho nhỏ trên sẽ có chút giá trị để bạn có thể tìm hiểu sâu hơn về mảng này.
Xin chào, mình là Huy Đê Tê!
Bài viết có tham khảo từ Ebo Jackson.
nguồn HuyDT