Theo Coulouris và cộng sự:
“Một hệ thống phân tán (distributed system) là một hệ thống mà các thành phần của nó được đặt trên những máy tính khác nhau, được kết nối với nhau qua mạng, và chúng giao tiếp, phối hợp hành động bằng cách trao đổi thông điệp.”
Các thành phần trong hệ thống này có thể được hiểu là các chương trình phần mềm chạy trên phần cứng vật lý, chẳng hạn như máy tính. Những thành phần này tồn tại dưới nhiều hình thức khác nhau, ví dụ: web server, router, trình duyệt web, v.v.
Để giữ cách nhìn tổng quát, ta giả định rằng mỗi chương trình chạy trên một máy riêng biệt. Mỗi máy như vậy được gọi là một node (nút) trong hệ thống phân tán.

A distributed system
Hình minh họa ở trên cho thấy rằng mạng có thể bao gồm các kết nối trực tiếp giữa các thành phần của hệ thống phân tán, hoặc một hay nhiều thành phần trung gian tạo thành xương sống của mạng (ví dụ như khi việc giao tiếp được thực hiện thông qua Internet).
Mặc dù cách nhìn các thành phần như những node độc lập là một cách tiếp cận tổng quát và hữu ích để hiểu sơ đồ trên, nhưng trong nhiều trường hợp, các ví dụ thực tế về cách những node này hoạt động sẽ giúp việc hình dung trở nên dễ dàng hơn.
Trong những trường hợp đó, chúng ta sẽ giải thích chi tiết vai trò của từng node trong hệ thống.
Các thành phần của một hệ thống phân tán
Có hai nhóm thành phần trung tâm giúp một hệ thống phân tán có thể hoạt động:
- Các thành phần cấu thành hệ thống phân tán
Đây là các thành phần được đặt ở những vị trí khác nhau, chạy trên các máy riêng biệt và bị phân tách bởi mạng. - Mạng kết nối các thành phần của hệ thống phân tán
Mạng đóng vai trò như cơ chế giao tiếp, cho phép các thành phần trao đổi thông điệp và phối hợp với nhau.
Vì sao chúng ta cần hệ thống phân tán?
Có ba lợi ích chính của hệ thống phân tán, như được minh họa trong hình bên dưới.

Hãy cùng phân tích từng lợi ích của hệ thống phân tán một cách riêng biệt.
Performance (Hiệu năng)
Theo Mohan et al.:
“Performance là mức độ mà một hệ thống phần mềm hoặc một thành phần của nó đáp ứng được các mục tiêu về tính kịp thời (timeliness).”
Vấn đề với một máy tính đơn lẻ
Các giới hạn vật lý của phần cứng (CPU, RAM, disk, network…) đặt ra trần hiệu năng cho một máy tính đơn lẻ.
Hơn nữa, việc nâng cấp hiệu năng cho một máy tính sau một ngưỡng nhất định rất tốn kém và không còn hiệu quả về chi phí.
Giải pháp
Thay vì đầu tư vào một máy tính cấu hình cực cao, chúng ta có thể đạt được hiệu năng tương đương (hoặc tốt hơn) bằng cách sử dụng hai hoặc nhiều máy cấu hình thấp hơn.
➡️ Hệ thống phân tán cho phép:
- Đạt hiệu năng cao hơn
- Với chi phí thấp hơn
Lưu ý: Hiệu năng có thể mang nhiều ý nghĩa tùy vào ngữ cảnh, ví dụ:
- Độ trễ thấp hơn cho mỗi request (lower latency)
- Xử lý được nhiều request hơn trong một đơn vị thời gian (higher throughput)
Scalability (Khả năng mở rộng)
Theo Bondi et al.:
“Scalability là khả năng của một hệ thống, mạng hoặc quy trình trong việc xử lý khối lượng công việc ngày càng tăng, hoặc khả năng được mở rộng để đáp ứng sự tăng trưởng đó.”
Vấn đề với một máy tính đơn lẻ
Trong thực tế, giá trị cốt lõi của phần mềm nằm ở:
- Khả năng lưu trữ dữ liệu
- Khả năng xử lý dữ liệu
Khi số lượng người dùng tăng lên, hệ thống phải:
- Xử lý nhiều traffic hơn
- Lưu trữ nhiều dữ liệu hơn
Tuy nhiên, một hệ thống chỉ chạy trên một máy duy nhất thì chỉ có thể mở rộng đến một giới hạn nhất định.
Giải pháp
Với hệ thống phân tán, chúng ta có thể:
- Chia nhỏ dữ liệu và lưu trữ trên nhiều máy
- Phân tán khối lượng xử lý cho nhiều node khác nhau
Có hai chiến lược mở rộng chính:
- Vertical scaling (scale up)
Mở rộng bằng cách tăng tài nguyên (CPU, RAM, disk…) cho một node duy nhất - Horizontal scaling (scale out)
Mở rộng bằng cách thêm nhiều node vào hệ thống
➡️ Nhờ đó, hệ thống có thể mở rộng đến quy mô mà một máy tính đơn lẻ không bao giờ đạt được.
Availability (Tính sẵn sàng)
Trong ngữ cảnh hệ thống phần mềm, availability là:
Xác suất mà hệ thống hoạt động đúng như mong đợi, khi cần, trong suốt thời gian vận hành.
Vấn đề với một máy tính đơn lẻ
Ngày nay, hầu hết các dịch vụ online đều phải hoạt động 24/7.
Ví dụ, một hệ thống cam kết five-nines availability (99.999%) có nghĩa là:
- Chỉ được phép downtime tối đa khoảng 5 phút mỗi năm
Xét đến việc phần cứng luôn có khả năng hỏng hóc, ta có thể thấy:
➡️ Việc đạt được mức độ sẵn sàng này với một máy duy nhất là bất khả thi.
Giải pháp
Redundancy (dư thừa) là cơ chế phổ biến để tăng availability.
Điều này có nghĩa là:
- Dữ liệu được lưu trên nhiều máy khác nhau
- Khi một máy gặp sự cố, hệ thống có thể chuyển sang máy khác ngay lập tức
➡️ Người dùng sẽ không (hoặc rất ít) cảm nhận được sự cố
Và khi dữ liệu cùng logic được nhân bản trên nhiều máy, ta đã có một hệ thống phân tán.