- vừa được xem lúc

System Design - Nguyên tắc cơ bản về thiết kế hệ thống

0 0 17

Người đăng: Thái Thanh Hải

Theo Viblo Asia

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

Bình luận

Bài viết tương tự

- vừa được xem lúc

Sử dụng recoil thay thế redux ?

Như chúng ta đã biết quản lí state trong react đôi lúc rất khó khăn đó là lí do tại sao chúng ta sử dụng redux hoặc một số thư viện khác như mobx để giúp việc quản lí state trở nên dễ dàng hơn. Recoil cũng là một thư viện quản lí state được mô phỏng chặt chẽ theo các API của react hook.

0 0 202

- vừa được xem lúc

Tìm hiểu cơ bản về Python (P1)

Hello, xin chào mọi người, mình là một dev FE, nhưng mấy hôm nay thấy hứng thú với python nên quyết định làm 1 series về những gì mà mình học được. Lưu ý là những chia sẽ của mình cũng là một thằng bắ

0 0 35

- vừa được xem lúc

Kiến thức aws vụn vặt.

Cloud computing. Cloud computing được định nghĩa như sau: Cloud computing là điện toán đám mây, cung cấp tài nguyên IT theo yêu cầu thông qua Internet.

0 0 38

- vừa được xem lúc

Tổng quan về kiểm thử tự động: Định nghĩa, lợi ích, quy trình, các loại hình và cách áp dụng vào dự án

1. Kiểm thử tự động là gì. 2. Các lý do sau đây sẽ giúp bạn hiểu rõ hơn về tầm quan trọng của kiểm thử tự động:.

0 0 23

- vừa được xem lúc

Ứng dụng Kiểm Thử Tự Động vào nhóm dự án Agile

Phương pháp phát triển phần mềm theo triết lý/mô hình Agile đang ngày càng trở nên phổ biến trên khắp thế giới. Các công ty, doanh nghiệp và nhóm dự án vì thế cũng cần một cách thức kiểm thử phần mềm

0 0 31

- vừa được xem lúc

Tool testing guide for new Python developer

Lời mở đầu. Hello everyone, long time no see, nay tôi sẽ trở lại với bài dịch liên quan đến một bước crucial trong software development.

0 0 32