Distributed System là gì?

Distributed System là gì?

Hệ thống phân tán (distributed system) là hệ thống phần mềm mà các thành phần cấu tạo nên nó nằm ở trên các máy tính khác nhau được kết nối thành mạng lưới (network). Các máy tính này phối hợp hoạt động với nhau để hoàn thành một nhiệm vụ chung bằng cách trao đổi qua lại các thông điệp (message).

Nói nôm na là hệ thống phân tán là việc hệ thống bạn có nhiều quá trình xử lý độc lập trên nhiều nhiều server vật lý khác nhau.

Với các hệ thống doanh nghiệp lớn (enterprise) đòi hỏi sự linh hoạt trong mở rộng bảo trì thì distributed system là một lựa chọn hoàn hảo nhờ các ưu điểm của nó.

Các tính chất chính để hình thành một hệ thống phân tán (distributed system) là:

  • Khả năng mở rộng(Scalability).
  • Độ tin cậy (Reliability).
  • Tính sẵn sàng (Availability).
  • Hiệu suất (Efficiency).
  • Tính mở rộng và khả năng bảo trì (Manageability).

Khả năng nở rộng (Scalability)

Scalability là khả năng mở rộng (scaling) của hệ thống (system), quy trình (process) hay mạng lưới (network), với nhu cầu gia tăng về số lượng công việc tăng theo thời gian của mô hình kinh doanh (business model).

Mô hình kinh doanh có thể mở rộng quy mô vì nhiều lý do như gia tăng khối lượng dữ liệu lưu trữ (data storage) hay khối lượng công việc (process/request).

Ví dụ: số lượng truy cập hay đặt hàng của một hệ thống thương mại điện tử. Và yêu cầu của sự mở rộng phải đạt được nhu cầu này mà không làm giảm hiệu suất, nói chung khả năng mở rộng là đáp ứng được sử mở rộng kích thước của hệ thống theo thời gian.

Có hai dạng scaling là mở rộng theo chiều ngang (vertical scaling) và mở rộng theo chiều dọc (horizontal scaling):

  • Vertical scaling: là cách tăng sức mạnh phần cứng của server bằng cách nâng cấp CPU, RAM, Disk Storage, v.v… Vertical scaling thường bị giới hạn bởi vượt quá khả năng về cấu hình vật lý hiện đại và độ trễ khi server bị downtime để nâng cấp phần cứng hay deploy hệ thống.
  • Horizontal scaling: là cách mở rộng bằng cách thêm nhiều Node/Server vào một mạng lưới đang có, làm tăng khả năng chịu tải của hệ thống. Cách làm này rẻ và dễ làm hơn so với vertical scaling, đặc biệt là rất dễ dàng downsize cũng như upsize hệ thống và hạn chế độ trễ khi bổ sung thêm Node/Server hoặc deploy hệ thống.
Khả năng nở rộng (Scalability)

Một ví dụ của horizontal scaling là MongoDB, Redis và Cassandra, cả hai đều cung cấp sẵn những phương pháp để scale hệ thống bằng cách thêm nhiều node vào hoặc xóa bớt các node mà không hề có độ trễ (zero downtime).

Và một ví dụ khác về vertical scaling là MySQL, Sql Server, cả hai đều có thể dễ dàng chuyển đổi từ một Server đang chạy sang một Server mới lớn hơn khỏe hơn, hoặc bổ sung thêm phần cứng cho server hiện tại, nhưng quá trình này có downtime.

Độ tin cậy (Reliability)

Reliability là khả năng chịu lỗi của hệ thống có nghĩa là hệ thống sẽ tiếp tục cung cấp dịch vụ của mình ngay khi có một hoặc nhiều thành phần (phần mềm/phần cứng) của hệ thống bị lỗi.

Độ tin cậy là tính chất quan trọng trong bất cứ một hệ thống phân tán (distributed system) nào, bởi vì trong một hệ thống như vậy, mọi hỏng hóc của bất kỳ một thành phần nào đó phải được thay thế bằng một thành phần đang khỏe mạnh khác, đảm bảo luôn hoàn thành nhiệm vụ yêu cầu.

Ví dụ của độ tin cậy là, một trang thương mại điện tử hay hệ thống ngân hàng (banking) mọi thông tin về giao dịch (transaction) của người dùng sẽ không bao giờ bị hủy do lỗi server đang chạy giao dịch đó, mỗi server bị lỗi sẽ phải được thay thế ngay bởi một bản sao chứa đầy đủ thông tin của server đó.

Để đạt được độ tin cậy, hệ thống phải có chế độ back-up real time của từng thành phần trong hệ thống, đây cũng là một thách thức về mặt kỹ thuật cũng như chi phí của dự án.

Tính sẵn sàng (Availability)

Tính sẵn sàng (Availability) là tổng thời gian một hệ thống vẫn hoạt động bình thường trong một khoảng thời gian cụ thể. Thước đo của tính sẵn sàng là tỷ lệ phần trăm thời gian mà hệ thống hoạt động liên tục trong một khoảng thời gian (thường là 1 năm).

Bạn sẽ bắt gặp các tỷ lệ phần trăm của tính sẵn sàng là: 99,9%(3 số 9), 99,99% (4 số 9) và 99,999% (5 số 9).

Ví dụ như một chiếc xe hơi có thể chạy trong nhiều tháng mà không cần bảo trì bảo dưỡng, thì có thể nói là chiếc xe đó có tính sẵn sàng cao. Nếu chiếc xe hơi đó ngừng hoạt động để đem tới gara để bảo trì, nó được coi là không sẵn sàng trong thời gian đó.

Sự khác nhau của độ tin cậy (reliability) và tính sẵn sàng (availability)

Nếu hệ thống có tính reliability thì nó chắc chắn sẽ có availability, tuy nhiên hệ thống có tính availability không có nghĩa là nó có tính reliability. Nói một cách khác thì reliability có nghĩa là nó có tính high availability, tuy nhiên vẫn có thể đạt được tính availability với một hệ thống không có tính reliability bằng cách giảm thiểu tối đa thời gian bảo trì, sửa chữa.

Hãy lấy một ví dụ, một hệ thống eCommerce có tỷ lệ availability lên đến 99,99% trong hai năm đầu tiên, nhưng hệ thống có một lỗi tiềm ẩn về bảo mật mà trong quá trình kiểm thử (testing) không phát hiện ra, khách hàng không hề biết về điều đó và họ vẫn rất hạnh phúc (happy) với hệ thống, cho đến một ngày đẹp trời vào bỗng nhiên lỗi tiềm ẩn đó bị khai thác dẫn đến hệ thống giảm tính sẵn sàng trong một thời gian dài cho đến khi lỗi được fix.

Kỳ thực mà nói một hệ thống có độ tin cậy cao (high reliability) gần như rất khó đạt được trong thực tế, mà hầu như chúng ta chỉ hướng tới một hệ thống có tính sẵn sàng cao (high availability) mà thôi.

Hiệu suất (Efficiency)

Hiệu suất (Efficiency) của một hệ thống phân tán (distributed system) là khả năng chịu tải (high load) và thời gian phản hồi (low latency). Có nghĩa là một hệ thống có khả năng chịu được nhiều request đồng thời với độ trễ thấp là một hệ thống có hiệu suất cao.

Thông thường nó được đo bằng số lượng request nó nhận được và phản hồi trong một khoảng thời gian, thường được tính bằng giây.

Ví dụ một hệ thống eCommerce có hiệu suất là chịu được 5k lượt đặt hàng trên một giây — 5k order / second, hay 500k lượt người cùng truy cập vào cùng một thời điểm.

Tính mở rộng và khả năng bảo trì (Manageability)

Một tính chất quan trọng khác của một hệ thống phân tán (distributed system) đó là khả năng dễ dàng mở rộng và bảo trì của hệ thống. Nói cách khác là thời gian thực hiện sửa chữa (repair) hay bảo trì (maintain) khi cần, nếu thời gian trên càng cao thì tính availability càng thấp.

Để đạt được tính mở rộng và khả năng bảo trì (Manageability), hệ thống cần phải dễ dàng phát hiện lỗi hoặc lỗi tiềm tàng nếu có, khả năng nhanh chóng phát hiện được nguyên nhân lỗi (root cause), dễ dàng thực hiện các thay đổi cần thiết để điều chỉnh, hoặc đơn giản chỉ là dễ dàng mở rộng khi cần.

Việc sớm phát hiện cũng như giải quyết vấn đề sớm sẽ làm giảm downtime từ đó tăng tính sẵn sàng của hệ thống. Ví dụ những ứng dụng doanh nghiệp (enterprise system) có khả năng tự phát hiện lỗi sau đó cô lập và báo cáo nhanh cho người vận hành hệ thống.

Kết Luận

Hệ thống phân tán (distributed system) là hệ thống phần mềm mà các thành phần cấu tạo nên nó nằm ở trên các máy tính khác nhau được kết nối thành mạng lưới (network). Các máy tính này phối hợp hoạt động với nhau để hoàn thành một nhiệm vụ chung bằng cách trao đổi qua lại các thông điệp (message).

Các tính chất chính để hình thành một hệ thống phân tán (distributed system) là:

  • Khả năng mở rộng(Scalability).
  • Độ tin cậy (Reliability).
  • Tính sẵn sàng (Availability).
  • Hiệu suất (Efficiency).
  • Tính mở rộng và khả năng bảo trì (Manageability).
Software ArchitectureDistributed System
Bài Viết Liên Quan:
Distributed System: Cơ sở dữ liệu phân tán trong Distributed System
Trung Nguyen 20/11/2020
Distributed System: Cơ sở dữ liệu phân tán trong Distributed System

Sharding là một giải pháp chia nhỏ một database lớn thành nhiều database nhỏ đặt ở nhiều server khác nhau.

Distributed System: Cache trong Distributed System
Trung Nguyen 18/11/2020
Distributed System: Cache trong Distributed System

Caching là cách giúp sử dụng tài nguyên hiệu quả hơn từ đó giảm chi phí của hệ thống phân tán (Distributed System).

Distributed System: Load balancing trong Distributed System
Trung Nguyen 17/11/2020
Distributed System: Load balancing trong Distributed System

Load Balancing là gì? Load Balancing đóng vai trò như thế nào trong hệ thống phân tán (Distributed System).

Distributed System toàn tập
Trung Nguyen 17/11/2020
Distributed System toàn tập

Series bài viết trình bày chi tiết các thành phần trong Distributed System và cách triển khai.