Trong bài viết này, chúng ta sẽ đi tìm hiểu về cái khái niệm, nguyên tắc cơ bản trong thiết kế hệ thống (system design) như là: khả năng mở rộng (scalability), thông lượng (throughput), băng thông (bandwidth), độ trễ (latency),.. để có cái nhìn tổng quan hơn về topic thiết kế hệ thống là như thế nào.
1. Khả năng mở rộng (Scalability)
Trong thiết kế hệ thống, khả năng mở rộng là đặc điểm nổi bật của bất kỳ hệ thống nào
Khả năng mở rộng có nghĩa là tốc độ dữ liệu và lưu lượng tải sẽ được tăng lên khi quy mô hệ thống được mở rộng.
Một số điểm cần quan trọng khi mở rộng hệ thống - Cần đủ tài nguyên để xử lý ngày càng tăng - Hệ thống không nên quá phức tạp để có thể mở rộng bất kỳ thời điểm nào - Hiệu suất nên luôn tăng khi mở rộng hệ thống
2. Thông lượng (Throughput)
Thông lượng là số lượng công việc được thực hiện bởi một máy trong một thời gian cụ thể
Thông lượng là một trong những số liêu quan trọng đối với hiệu suất mạng, có bao nhiêu API được gọi trong một đơn vị thời gian
Đơn vị thông lượng: GBps, MBps, KBps
Ví dụ: Trong ứng dụng đặt đồ ăn, giả sử có một server của ứng dụng đặt đồ ăn có thể xử lý 100 yêu cầu đặt hàng từ nhiều client trong vòng 10 phút và có một hệ thống quy mô lớn khác có thể xử lý 1000 trong cùng một khoảng thời gian. Vì vậy, thông lượng trong trường hợp đầu tiên thấp hơn trong trường hợp thứ hai.
3. Băng thông (BandWidth)
Băng thông là lượng dữ liệu tối đa có thể truyền qua các mạng khác nhau
Kịch bản để tăng hiệu suất của hệ thống - Băng thông cao và thông lượng cao: trường hợp này có đủ tài nguyên để truyền qua các kênh khác nhau nhằm tận dụng tối đa băng thông khả dụng và đạt được thông lượng cao. - Băng thông cao nhưng thông lượng thấp: trường hơp này, không có đủ tài nguyên để sử dụng băng thông và do đó thông lượng vẫn thấp. - Băng thông thấp, đủ tài nguyên: trường hợp này, ngay cả khi có nhiều tài nguyên hơn nhưng băng thông thấp hơn sẽ hạn chế chuyển qua các tài nguyên đó, do đó chỉ đạt được thông lượng thấp
4. Thời gian phản hồi (Response Time)
Thời gian phản hồi là thời gian mà bất kỳ API nào thực hiện để phản hồi lệnh gọi API.
Khi nói rằng hệ thống phục vụ 100 yêu cầu mỗi giây, điều đó có nghĩa là thời gian phản hồi cho một yêu cầu là 0,01 giây.
Giả sử máy chủ có thông lượng 100 GBps và Thời gian phản hồi là 1 giây và máy chủ có thể phục vụ 1000 yêu cầu/giây. Bây giờ, tại bất kỳ thời điểm nào, API ngừng hoạt động do bất kỳ sự cố nào và thời gian phản hồi tăng lên 1 giây -> 2 giây, trong trường hợp đó, thông lượng sẽ giảm do yêu cầu của mất gấp đôi thời gian ngay cả khi bạn có đủ băng thông.
5. Độ trễ (Latency)
Độ trễ là thước đo quan trọng cho hiệu suất của hệ thống. Nó được định nghĩa là hệ thống mất bao lâu để truyền dữ liệu từ điểm này sang điểm khác trong hệ thống.
6. Tính khả dụng (Availability)
Với thông lượng và độ trễ, tính khả dụng cũng đóng một vai trò rất quan trọng. Nó chỉ đơn giản có nghĩa là hệ thống có khả năng chịu lỗi như thế nào. Nếu có bất kỳ sự cố nào xảy ra thì hệ thống sẽ hoạt động như thế nào? Đó là khả năng chống chịu của một hệ thống trong các điều kiện bất lợi và cách hệ thống tự sửa chữa khi cần thiết.
7. Tính đồng thời (Concurrency)
Tính đồng thời chỉ đơn giản có nghĩa là truy cập đồng thời cùng một tài nguyên và nếu nó có thể thay đổi được thì cuộc chạy đua dữ liệu bắt đầu và có thể dẫn đến sự không nhất quán.
Threads: Đây là đơn vị cơ bản của bất kỳ quá trình thực thi nào, tuân theo hướng dẫn của hệ thống. Có thể có nhiều luồng hiện đang chạy như một phần của hệ thống. Và tài nguyên có thể được chia sẻ giữa các chủ đề.
8. Tính nhất quán (Consistency)
Khi hai hoặc nhiều nút được cho là chia sẻ cùng một dữ liệu, bất kỳ nút nào cũng có thể thao tác dữ liệu trước và nút kia cũng đang cố truy cập, trong khi nút A viết nội dung nào đó tại thời điểm t1 và nút B đọc trước t1, nhưng dữ liệu đã được cập nhật trong khi đó, dẫn đến sự không thống nhất.
Để tránh sự không nhất quán, chúng ta có thể sử dụng kiến trúc Master-Slave, có thể trở thành ngang hàng trong một số trường hợp trong khi hai bản sao chia sẻ dữ liệu ở cùng cấp độ.
Hãy sử dụng một ví dụ về Google Drive, Giả sử Haris và Navy đang làm việc trên một tệp dự án và Haris có cùng một tệp cho đến phiên bản 1.0 trên ổ đĩa và phiên bản cập nhật trên máy cục bộ của Haris. Bây giờ, Navy đã cố truy cập Drive và tải xuống phiên bản 1.0 của tệp đó nhưng Haris đang tải lên phiên bản 2.0 cùng lúc. Trong trường hợp này, Navy sẽ sử dụng sai tệp và tất cả các thay đổi cũng như thao tác của Navy sẽ theo phiên bản 1.0. Đó là một ví dụ về tính nhất quán cuối cùng.
source: https://www.codingninjas.com/codestudio/guided-paths/system-design/content/119088/offering/1474987