System Design: Bắt đầu từ đâu

Thiết kế hệ thống (System Design) là một trong những khía cạnh quan trọng và khó khăn nhất của kỹ thuật phần mềm. Một trong những lý do chính là mọi người dường như có những cách tiếp cận khác nhau; không có hướng dẫn rõ ràng từng bước.

Trong bài viết này, chúng ta sẽ đi qua các bước để giải quyết từng vấn đề thiết kế. Hướng dẫn này có thể giúp bạn thiết kế một hệ thống.

Bước 1: Làm rõ yêu cầu

Chúng ta cần làm rõ mục tiêu của hệ thống. Thiết kế hệ thống là một chủ đề rộng lớn; Nếu chúng ta không thu hẹp nó thành một mục tiêu cụ thể, thì việc thiết kế hệ thống sẽ trở nên phức tạp, đặc biệt là đối với người mới. Đôi khi các ràng buộc là tốt cho hệ thống. Nó giúp tập trung vào tính năng chính mà bạn đang cố gắng thiết kế. Nó làm rõ những mơ hồ về các tính năng của hệ thống. Chúng tôi có thể chia các yêu cầu này thành hai phần:

Yêu cầu về chức năng

Đây là yêu cầu mà hệ thống phải cung cấp. Có thể nói đó là mục tiêu chính của hệ thống. Ở đây, một chức năng được mô tả như một đặc điểm kỹ thuật của hành vi giữa đầu ra và đầu vào. Đầu vào của hệ thống là gì và đầu ra là gì cần được loại bỏ trong các yêu cầu này.

Yêu cầu phi chức năng

Bây giờ đối với các yêu cầu quan trọng hơn cần được phân tích. Nếu chúng ta không thực hiện yêu cầu này sẽ có hại cho kế hoạch kinh doanh của dự án. Các yêu cầu này hạn chế thiết kế hệ thống thông qua các chất lượng hệ thống khác nhau.

Hiệu suất, khả năng sửa đổi, tính khả dụng, khả năng mở rộng, độ tin cậy, v.v. là những yêu cầu chất lượng quan trọng trong thiết kế hệ thống. Những 'ưu điểm' này là những gì chúng ta cần phân tích cho một hệ thống và xác định xem hệ thống của chúng ta có được thiết kế đúng cách hay không.

Bước 2: Ước tính các phần quan trọng

Một trong những điểm quan trọng của thiết kế hệ thống là phải biết về quy mô của hệ thống. Quy mô thực sự có ý nghĩa gì khi bạn thiết kế một hệ thống? Số lượt xem bài viết, số lần tạo dòng thời gian trên giây,… có thể đo lường quy mô của hệ thống. Nếu các phép đo của hệ thống có số lượng rất lớn, thì chúng là hệ thống khả năng mở rộng cao.

Một ước tính quan trọng khác là về lưu trữ. Chúng ta cần biết dung lượng lưu trữ cần thiết cho hệ thống trong 5 năm. Nó chỉ có thể tăng lên, nhưng bạn cần phải có một ước tính. Nó sẽ đưa ra hướng lưu trữ dữ liệu.

Trong trường hợp Thiết kế Hệ thống của Dịch vụ Rút ngắn URL, bạn có thể thấy phép tính như sau:

Giả sử, hệ thống lưu trữ tất cả yêu cầu rút gọn URL và liên kết rút gọn của chúng trong 5 năm. Vì chúng tôi dự kiến ​​sẽ có 10 triệu URL mới mỗi tháng, tổng số đối tượng chúng tôi dự kiến ​​sẽ lưu trữ sẽ là 10 tr * (5 * 12) tháng = 600 tr. Bây giờ, hãy giả sử rằng mỗi đối tượng được lưu trữ sẽ xấp xỉ 100 byte. Chúng tôi sẽ cần tổng dung lượng lưu trữ là 600 tr * 100 byte = 60 GB.

Vì vậy, bạn đã có ý tưởng về lượng bộ nhớ cần thiết. Tiếp theo, bạn sẽ bắt đầu xác định luồng dữ liệu.

Bước 3: Luồng dữ liệu

Chúng ta cần xác định mô hình dữ liệu của hệ thống và cách dữ liệu sẽ luân chuyển giữa các thành phần hệ thống khác nhau. Chúng ta cần tìm ra các thực thể của hệ thống và các khía cạnh khác nhau của quản lý dữ liệu.

Đối với những người mới làm quen với thiết kế hệ thống, hãy nhớ rằng “Nếu bạn bối rối không biết bắt đầu từ đâu cho thiết kế hệ thống, hãy thử bắt đầu với luồng dữ liệu”.

Dưới đây là một số thực thể cho một dịch vụ blog:

  • User: UserID, Name, Email, v.v.
  • Article: ArticleID, ContentOfArticle, TimeStamp, NumberOfClaps, v.v.
  • UserFollow: UserID1, UserID2
  • Follower: UserID3, UserID4

Lựa chọn hệ thống cơ sở dữ liệu là một phần của bước này. Lựa chọn cơ sở dữ liệu NoSQL hoặc SQL là một kịch bản phổ biến. Mặt khác, chúng tôi có thể cần phải quyết định loại bộ nhớ nào cần thiết được chọn cho ảnh và video.

Bước 4: Thiết kế thành phần cấp cao

Nếu chúng ta cố gắng thiết kế toàn bộ hệ thống trong một lần, đó là một nhiệm vụ khó khăn. Vì vậy, tốt hơn là bạn nên chia nhỏ chúng dưới dạng các thành phần cấp cao. Sau đó, chia nhỏ các thành phần đó thành thiết kế chi tiết.

Cố gắng vẽ một sơ đồ khối đại diện cho các thành phần cốt lõi của hệ thống của chúng tôi trong 5–6 phần. Nó có thể nhiều hơn nếu hệ thống quá lớn. Không có quy tắc chắc chắn nào về việc chúng ta có thể chia hệ thống thành bao nhiêu thành phần. Chỉ cần cố gắng nhớ rằng chúng ta cần xác định đủ các thành phần để giúp giải quyết các vấn đề thực tế của hệ thống.

Máy chủ xử lý tệp sẽ quản lý Dòng công việc xử lý tệp. Máy chủ siêu dữ liệu sẽ quản lý thông tin của tệp, kích thước tệp và thông tin người dùng. Máy chủ Thông báo sẽ cho ứng dụng khách biết về việc cập nhật tệp cho tất cả các thiết bị khác mà máy khách đã đăng nhập. Cloud Storage sẽ giữ tệp được lưu trữ.

Sau đó chúng tôi có thể chia nhỏ các thành phần này để có thiết kế chi tiết hơn theo yêu cầu của hệ thống.

Bước 5: Thiết kế chi tiết

Đối với bước cuối cùng, chúng ta cần tìm hiểu sâu hơn về các thành phần chính quan trọng để đạt được các yêu cầu chất lượng của hệ thống.

Trong bước này, chúng ta có thể phân tích các cách tiếp cận khác nhau để giải quyết một vấn đề, ưu và nhược điểm của chúng và giải thích lý do tại sao chúng ta thích cách tiếp cận này hơn cách tiếp cận kia. Phân tích đánh đổi là một phần quan trọng của phần này. Đây có thể là một số ví dụ:

Vì chúng ta cần lưu trữ một lượng lớn dữ liệu, chúng ta có thể cần phân vùng dữ liệu để phân phối cho nhiều cơ sở dữ liệu.

Chúng ta cần cache bao nhiêu dữ liệu để tăng tốc thời gian phản hồi của hệ thống. Chúng ta nên sử dụng bộ cân bằng tải, v.v. ở đâu?

Bước 6: Xác định các nút thắt cổ chai và giải quyết chúng

Bây giờ, chúng tôi có một thiết kế chi tiết của hệ thống. Chúng ta phải tìm ra những điểm nghẽn của hệ thống và tìm những cách khác nhau để giảm thiểu chúng. Ví dụ:

  • Nếu có bất kỳ điểm lỗi nào trong hệ thống của chúng tôi, chúng tôi cần loại bỏ chúng. Điều này có thể gây ra các vấn đề về tính khả dụng, đây là một mối quan tâm lớn.
  • Chúng tôi cần có đủ bản sao của dữ liệu để vẫn phục vụ người dùng nếu chúng tôi mất một vài máy chủ. Nếu không có bản sao của dữ liệu và vì một lý do nào đó, dữ liệu bị mất, hệ thống không có dữ liệu. Hệ thống sẽ có vấn đề về độ tin cậy.
  • Tương tự, chúng ta cần có đủ các bản sao của các dịch vụ khác nhau đang chạy để một vài lỗi không gây ra tình trạng tắt toàn bộ hệ thống.

Phần kết luận

Các bước nêu trên không phải là cách duy nhất để thiết kế một hệ thống. Đó là một hướng dẫn đơn giản cho những người mới bắt đầu làm quen với thiết kế hệ thống. Rất khó để thiết kế một hệ thống cho người mới. Hướng dẫn này cho phép bạn đi đúng hướng và không bị lạc trong biển các vấn đề tiềm ẩn và các giải pháp cho thiết kế hệ thống.

Thiết kế hệ thống là một chủ đề rộng lớn; nếu một mục tiêu cụ thể không được đặt ra, việc thiết kế hệ thống sẽ trở nên khó khăn, đặc biệt là đối với người mới.

Cố gắng xác định các yêu cầu của hệ thống. Sau đó, tìm mô hình dữ liệu và luồng dữ liệu. Và sau một thiết kế cấp cao, đừng ngần ngại thêm các thành phần nếu cần. Và quan trọng nhất, hãy cố gắng tập trung vào phân tích đánh đổi các giải pháp.

System DesignSoftware Architecture
Bài Viết Liên Quan:
System Design: Quy trình 4 bước thiết kế hệ thống
Trung Nguyen 09/01/2021
System Design: Quy trình 4 bước thiết kế hệ thống

Chúng tôi sẽ hướng dẫn bạn quy trình 4 bước để thiết kế hệ thống (System Design) và cung cấp một số thông tin để bạn thực hiện các ước tính cho hệ thống

System Design: Phỏng vấn về thiết kế hệ thống
Trung Nguyen 03/01/2021
System Design: Phỏng vấn về thiết kế hệ thống

Trong bài viết này, chúng ta sẽ tìm hiểu cách chuẩn bị để vượt qua những câu hỏi khi phỏng vấn về thiết kế hệ thống phần mềm (system design).