Site icon Khoa Phạm BK Blog

System Design là gì? Tìm hiểu quy trình System Design và các khái niệm liên quan

System Design là một kỹ năng cần thiết đối với các kỹ sư phần mềm đang tham gia hay muốn xây dựng các ứng dụng phức tạp; nó đòi hỏi khả năng tư duy sáng tạo và có hệ thống về cách giải quyết vấn đề cũng như việc áp dụng kiến thức kỹ thuật để thực hiện các giải pháp một cách hiệu quả. Bài viết hôm nay chúng ta cùng nhau điểm qua top 10 khái niệm System Design mà mọi lập trình viên nên biết để có thể tự tin hơn khi tham gia vào các dự án lớn trong tương lai nhé.

System Design là gì?

System Design (thiết kế hệ thống) là quá trình xác định kiến trúc (architecture), thành phần (component), module và giao diện (interfaces) của một hệ thống để đáp ứng các yêu cầu cụ thể, cũng như xác định các công nghệ và công cụ sẽ được sử dụng để triển khai hệ thống.

Các bước trong quá trình System Design

Xác định yêu cầu

Thiết kế cấp cao (High-Level Design)

High-Level Design (HLD) là bước quan trọng trong quá trình thiết kế hệ thống, nơi chúng ta xác định kiến trúc tổng thể và cấu trúc chính của hệ thống. Các bước chi tiết bao gồm:

Thiết kế cấp thấp (Low-Level Design)

Low-Level Design là bước tiếp theo sau HLD, nơi các thành phần và mô-đun của hệ thống được chi tiết hóa. Các bước chi tiết bao gồm:

Kiểm tra và xác thực thiết kế

Thực hiện các bài kiểm tra mô phỏng để đảm bảo thiết kế hoạt động đúng như mong đợi. Đánh giá lại toàn bộ thiết kế để tìm ra và khắc phục các lỗi hoặc điểm yếu.

Triển khai và bảo trì

Đưa hệ thống vào sử dụng thực tế. Quá trình này có thể bao gồm việc cài đặt phần mềm, cấu hình hệ thống, và đào tạo người dùng. Liên tục giám sát, khắc phục lỗi, và cập nhật hệ thống để đảm bảo nó hoạt động ổn định và đáp ứng các yêu cầu mới.

10 khái niệm liên quan đến System Design

Scalability – Khả năng mở rộng

Khả năng mở rộng là khả năng của một hệ thống có thể xử lý tải tăng lên mà không làm giảm hiệu suất. Để làm được điều này thì khi thiết kế, các kỹ sư cần xem xét đến yếu tố liên quan đến việc phân chia dữ liệu, cân bằng tải và bộ nhớ đệm. 

Availability – Tính khả dụng

Tính khả dụng hay tính sẵn sàng là khả năng mà một hệ thống có thể duy trì hoạt động ngay cả khi một số thành phần bị lỗi. Để thiết kế được một hệ thống đảm bảo tính khả dụng thì bạn cần đến các yếu tố dự phòng, chuyển đổi dự phòng, kết hợp với việc hệ thống có khả năng chịu lỗi.

Consistency – Tính nhất quán

Tính nhất quán là một thuộc tính của hệ thống trong đó tất cả các nodes đều nhìn thấy cùng một dữ liệu tại cùng một thời điểm. Để đảm bảo được thuộc tính này, bạn cần xem xét đến yếu tố như sao chép dữ liệu, giao dịch phân tán và giải quyết xung đột.

3 tính chất trên được xem là những yếu tố cơ bản cần có khi thiết kế một hệ thống. Nó cũng được thường xuyên đề cập đến trong các định lý, lý thuyết khi xây dựng một hệ thống tiêu chuẩn. Chẳng hạn như định lý CAP; trong đó Partition Tolerance là khả năng chịu lỗi của hệ thống đề cập đến việc hệ thống đảm bảo phải hoạt động bình thường dù các kết nối của các node trong hệ thống bị đứt gãy.

Partition – Phân vùng

Phân vùng là quá trình chia dữ liệu thành các phần nhỏ hơn và giúp dễ quản lý hơn. Các yếu tố như kiểu truy cập dữ liệu, phân phối dữ liệu và sao chép dữ liệu sẽ được xem xét đến khi bạn muốn thực hiện phân vùng dữ liệu trên hệ thống một cách hiệu quả.

Trong hệ thống cơ sở dữ liệu, Data Partitioning hay phân vùng dữ liệu thông thường được chia thành 2 loại:

Load Balancing – Cân bằng tải

Cân bằng tải là quá trình phân phối lưu lượng mạng trên nhiều server để tránh tình trạng quá tải. Cân bằng tải đóng vai trò quan trọng đặc biệt trong các tình huống mà lưu lượng truy cập tăng đột biến hoặc khi lượng request đến các server không đồng đều. 

Để thực hiện cân bằng tải thì kỹ sư hệ thống thường áp dụng một số thuật toán để xác định phân phối lưu lượng truy cập đến như:

Caching – Bộ nhớ đệm

Caching là một quá trình lưu trữ dữ liệu thường xuyên truy cập vào bộ nhớ để giúp truy cập nhanh hơn trong những lần sau. Bộ nhớ đệm là một lớp lưu trữ tốc độ cao, thông thường nằm giữa ứng dụng và nguồn dữ liệu. Khi dữ liệu được ứng dụng yêu cầu, hệ thống sẽ thực hiện tìm kiếm trong bộ đệm trước; nhờ có tốc độ truy xuất cao sẽ giúp tiết kiệm thời gian, tăng hiệu suất của xử lý. Nếu dữ liệu yêu cầu không được tìm thấy thì hệ thống mới xử lý đến bước tìm kiếm trong nguồn dữ liệu.

Nhắc đến System Design thì không thể không nhắc đến các thiết kế kiến trúc phổ biến hiện nay bao gồm Monolith, SOA và Microservices. Trong đó Monolith là một mô hình truyền thống phù hợp với các dự án quy mô nhỏ. Các hệ thống hiện nay để đáp ứng được với nhu cầu tăng cao và sự tích hợp của nhiều dịch vụ khác nhau thì SOA và Microservices được ưu tiên lựa chọn.

Microservices

Microservices là một cách tổ chức các ứng dụng như một tập hợp các dịch vụ được liên kết một cách lỏng lẻo và có thể triển khai một cách độc lập. Mỗi service trong hệ thống sẽ đảm nhận một phần chức năng hoặc domain cụ thể trong ứng dụng và có thể giao tiếp với các service khác thông qua các APIs được quy định trước. Để xây dựng được kiến trúc Microservices, chúng ta cần quan tâm xem xét đến các yếu tố như ranh giới giữa các dịch vụ con cùng khả năng giao tiếp giữa chúng.

SOA – Service-Oriented Architecture

Kiến trúc hướng dịch vụ là một cách tiếp cận thiết kế phần mềm mà trong đó các ứng dụng được xây dựng như một tập hợp các dịch vụ. Khác biệt chính giữa SOA và Microservices là phạm vi áp dụng: trong khi SOA thường được áp dụng đối với phạm vi các doanh nghiệp nơi các ứng dụng giao tiếp với nhau thì Microservices hướng đến việc phát triển các ứng dụng nơi mà giao tiếp giữa các thành phần trong một ứng dụng.

DNS – Domain Name System

Hệ thống phân giải tên miền DNS là thành phần cơ bản của cơ sở hạ tầng Internet giúp dịch các tên miền thành địa chỉ IP tương ứng. Mỗi doanh nghiệp, tổ chức có thể có những địa chỉ tên miền nội bộ mà chỉ được sử dụng trong phạm vi doanh nghiệp, vì vậy khi thiết kế hệ thống, chúng ta cùng cần xây dựng DNS riêng cho doanh nghiệp đó tương ứng.

CDN – Content Delivery Network

Mạng phân phối nội dung CDN là một mạng lưới gồm các máy chủ được kết nối với nhau giúp tăng tốc độ tải trang Web cho các ứng dụng tiêu tốn nhiều dữ liệu. Khi người dùng truy cập vào một trang Web, dữ liệu từ máy chủ của trang Web đó phải di chuyển trên mạng Internet để đến được máy tính của người dùng; nếu như người dùng ở xa so với máy chủ đó thì sẽ mất nhiều thời gian tải những nội dung lớn như tệp, hình ảnh, văn bản, … Để giải quyết vấn đề này, các nội dung trên sẽ được lưu trữ trên các máy chủ CDN gần hơn với người dùng theo địa lý để giảm thời gian tải và tăng tốc độ truy cập trang Web.

Trên đây là khái niệm thiết kế hệ thống – Design System là gì, các bước cơ bản để xây dựng một hệ thống và top 10 khái niệm về System Design cơ bản nhất mà mọi kỹ sư hệ thống đều phải nắm được. Hy vọng bài viết hữu ích dành cho bạn và hẹn gặp lại trong các bài viết tiếp theo của mình.

Bài viết được đăng trên blog TopDev: https://topdev.vn/blog/top-khai-niem-system-design/

Exit mobile version