System Design: Scaling and Distributed System

6 min read

Scaling là gì?

Scaling là tăng tài nguyên và performance với việc tăng load và traffic truy cập hệ thống hiện có mà không ảnh hưởng đến độ phức tạp.

Ví dụ: Mình đã thiết kế một hệ thống cho 2000 request mỗi phút, và hệ thống của mình đang chạy tốt, nhưng mình cần mở rộng hoạt động kinh doanh và cần xử lý nhiều request hơn trong cùng một thời điểm hoặc bất cứ lúc nào. Bây giờ, mình sẽ cần nhiều tài nguyên hơn để xử lý tất cả các request và tăng performance. Bây giờ, giả sử mình có thể đạt được 10000 request mỗi phút

Scaling là cần thiết để tăng hệ thống và giải quyết vấn đề hiện tại ở quy mô lớn hơn, vì vậy chúng ta nên thiết kế hệ thống của mình để mở rộng quy mô hệ thống của chúng ta ở quy mô lớn hơn bất cứ khi nào cần thiết traffic sẽ tăng lên vào bất kỳ thời điểm nào, vì vậy chúng ta cần đủ tài nguyên để xử lý traffic ngày càng tăng. Hệ thống không nên quá phức tạp để có thể dễ dàng Scaling tại bất kỳ thời điểm nào performance phải luôn được tăng lên với Scaling

Các loại scaling

Có hai loại ScalingScaling theo chiều ngang và Scaling theo chiều dọc

Scaling theo chiều dọc -Tăng khả năng của cùng một resource để đáp ứng request và tối đa hóa traffic được gọi là mở rộng theo chiều dọc

Ví dụ: giả sử kiến trúc hiện tại của bạn xử lý 1000 request/s , nhưng traffic tăng trên trang web và hệ thống của chúng tôi có thể xử lý traffic tăng bằng cách tăng cấu hình hoặc tăng dung lượng lưu trữ, thêm các phương pháp nhanh để tăng sức mạnh tính toán và tăng performance, đây là một ví dụ về scaling theo chiều dọc

Scaling theo chiều ngang – Tăng số lượng resource toàn diện để phục vụ nhu cầu mở rộng quy mô của hệ thống tăng traffic/load

Ví dụ: giả sử hệ thống của bạn có thể xử lý lượng traffic tăng lên, nhưng cơ sở dữ liệu không thể xử lý tất cả các request này ở một máy chủ. Vì vậy, hệ thống tăng traffic nhưng mình không thể phục vụ nhiều request hơn do các hạn chế.

Hệ thống phân tán (distributed system)

Hệ thống phân tán là một hệ thống với các phân đoạn khác nhau nằm trên nhiều máy nhằm truyền đạt và tạo điều kiện thuận lợi cho các hoạt động hiển thị dưới dạng một hệ thống duy nhất cho người dùng cuối

Mục tiêu chính của một hệ thống phân tán là người dùng (và ứng dụng) của nó có thể truy cập và chia sẻ tài nguyên từ xa một cách dễ dàng. tức là, sẽ tiết kiệm chi phí hơn nhiều nếu chia sẻ một cơ sở lưu trữ cao cấp, đáng tin cậy duy nhất thay vì phải mua và duy trì bộ nhớ riêng cho từng người dùng.

Các tính năng chính của Hệ thống phân tán bao gồm:

  • Chia sẻ tài nguyên trong hệ thống phân tán: Chia sẻ tài nguyên có nghĩa là các tài nguyên hiện tại trong framework distributed system có thể được truy cập từ xa trên nhiều PC trong framework. Các PC trong các framework distributed system chia sẻ các tài nguyên như thiết bị (đĩa phần cứng, giảm chi phí và tiện lợi), phần mềm (bản ghi, cửa sổ) và chia sẻ thông tin để làm việc hợp tác và nhất quán
  • Transparency or Openness: Tính mở rộng của framework distributed system về cơ bản được xác định bởi số lượng service share nội dung mới có thể được cung cấp cho khách hàng. tức là, Nó phụ thuộc vào một interface bị gián đoạn và interface phân tán để truy cập vào các property được chia sẻ
  • Tính đồng thời: Kiểm soát đồng thời là một vấn đề quan trọng trong framework tập dữ liệu phân tán vì nó giải quyết các xung đột đọc-ghi và ghi-đọc. Điều này là do tính đồng thời cho phép nhiều trao đổi giao dịch thực hiện mọi lúc đến mức thông tin bị thao túng vẫn ở trạng thái đáng tin cậy
  • Scaling: là thuộc tính của một framework để giải quyết công việc ngày càng tăng bằng cách thêm nội dung vào framework. Một khuôn khổ, doanh nghiệp hoặc chương trình được miêu tả là có thể mở rộng sẽ có lợi ích vì nó linh hoạt hơn đối với khách hàng hoặc nhu cầu hoặc yêu cầu luôn thay đổi của khách hàng. Scaling là một điểm quan trọng trong hệ thống phân tán. Nó mô tả khả năng thay đổi dần dần cấu hình của khung bằng cách thay đổi các nội dung có thể truy cập và kỹ thuật lập kế hoạch. Khả năng mở rộng được phân lập thành hai góc độ: phần cứng và phần mềm.
  • Khả năng chịu lỗi: Khả năng chịu lỗi ngụ ý khả năng của một framework (PC, tổ chức, nhóm đám mây, v.v.) để tiếp tục hoạt động mà không bị can thiệp khi ít nhất một trong các bộ phận của nó bị lỗi. Các hệ thống có khả năng chịu lỗi sử dụng các bộ phận gia cố thay thế một cách tự nhiên các bộ phận và phân đoạn bị phá hủy, đảm bảo hoạt động trơn tru. Do đó, chúng tôi cần tăng tính khả dụng của các dịch vụ để làm cho hệ thống của chúng tôi có khả năng chịu lỗi tốt hơn.
  • Transparency: Tính minh bạch là một thuộc tính quan trọng của các framework phân tán, vì nó làm cho hoạt động của chúng, theo ý kiến ​​của khách hàng, trở nên thân thiện hơn, đơn giản hơn hoặc đơn giản là minh bạch. Khách hàng không nên biết về khu vực hoặc vị trí của chính quyền và việc trao đổi từ máy cục bộ sang máy ở xa phải minh bạch đối với họ

Tài liệu tham khảo và bài đọc liên quan

FIT, A Framework for Integrating Testing: Cunningham, W., online at http://fit.c2.com, and Mugridge, R. and Cunningham, W., ‘’Fit for Developing Software’’, Prentice-Hall PTR, 2005.

The ‘’Adapter’’ pattern: in Gamma, E., Helm, R., Johnson, R., Vlissides, J., ‘’Design Patterns’’, Addison-Wesley, 1995, pp. 139-150.

The ‘’Pedestal’’ pattern: in Rubel, B., “Patterns for Generating a Layered Architecture”, in Coplien, J., Schmidt, D., ‘’PatternLanguages of Program Design’’, Addison-Wesley, 1995, pp. 119-150.

The ‘’Checks’’ pattern: by Cunningham, W., online at http://c2.com/ppr/checks.html

The ‘’Dependency Inversion Principle’‘: Martin, R., in ‘’Agile Software Development Principles Patterns and Practices’’, Prentice Hall, 2003, Chapter 11: “The Dependency-Inversion Principle”, and online at http://www.objectmentor.com/resources/articles/dip.pdf

The ‘’Dependency Injection’’ pattern: Fowler, M., online at http://www.martinfowler.com/articles/injection.html

The ‘’Mock Object’’ pattern: Freeman, S. online at http://MockObjects.com

The ‘’Loopback’’ pattern: Cockburn, A., online at http://c2.com/cgi/wiki?LoopBack

‘’Use cases:’’ Cockburn, A., ‘’Writing Effective Use Cases’’, Addison-Wesley, 2001, and Cockburn, A., “Structuring Use Cases with Goals”, online at http://alistair.cockburn.us/crystal/articles/sucwg/structuringucswithgoals.htm

Avatar photo

Leave a Reply

Your email address will not be published. Required fields are marked *