Why distributed systems are hard to design – Vì sao hệ thống phân tán khó thiết kế
Nhìn chung, các hệ thống phân tán rất khó để thiết kế, xây dựng và suy luận. Điều này làm gia tăng nguy cơ xảy ra lỗi.
Chúng ta nên đặt câu hỏi: vì sao hệ thống phân tán lại khó thiết kế đến vậy? Câu trả lời cho câu hỏi này sẽ giúp chúng ta loại bỏ những “điểm mù” trong tư duy và cung cấp định hướng cho những khía cạnh mà chúng ta cần đặc biệt chú ý.
Properties that make distributed systems challenging – Những đặc tính khiến hệ thống phân tán trở nên thách thức
Hình minh họa sau đây cho thấy các đặc tính chính khiến hệ thống phân tán trở nên khó suy luận và phân tích.

Các đặc tính chính của hệ thống phân tán
1. Network asynchrony – Tính bất đồng bộ của mạng
Tính bất đồng bộ của mạng là một đặc tính của các mạng truyền thông, trong đó không thể cung cấp các đảm bảo chặt chẽ về việc phân phối sự kiện, ví dụ như thời gian tối đa mà một thông điệp cần để được gửi đi. Điều này có thể tạo ra nhiều hành vi phản trực giác, vốn không tồn tại trong các hệ thống không phân tán.
Điều này trái ngược với các thao tác bộ nhớ, vốn cung cấp những đảm bảo nghiêm ngặt hơn nhiều. Chẳng hạn, trong một hệ thống phân tán, các thông điệp có thể mất thời gian rất dài để được chuyển đến. Thậm chí, chúng có thể được gửi đến không theo thứ tự — hoặc không được gửi đến chút nào.

2. Partial failures – Lỗi từng phần
Lỗi từng phần là các trường hợp mà chỉ một số thành phần của hệ thống phân tán bị hỏng. Hành vi này có thể trái ngược với một số loại ứng dụng được triển khai trên một máy chủ đơn lẻ. Những ứng dụng này thường hoạt động dựa trên giả định rằng либо mọi thứ đều hoạt động bình thường, либо máy chủ đã bị sập hoàn toàn.
Điều này làm phát sinh độ phức tạp đáng kể khi hệ thống phân tán yêu cầu tính nguyên tử (atomicity) trên nhiều thành phần. Do đó, chúng ta phải đảm bảo rằng một thao tác hoặc được áp dụng lên tất cả các nút trong hệ thống, hoặc không được áp dụng lên nút nào.

Lỗi của hai nút trong một hệ thống phân tán gồm sáu nút
3. Concurrency – Tính đồng thời
Tính đồng thời là việc thực thi nhiều phép tính cùng một lúc, và có thể trên cùng một tập dữ liệu. Các phép tính này đan xen với nhau trong quá trình thực thi. Điều này tạo ra độ phức tạp bổ sung, vì các phép tính có thể can thiệp lẫn nhau và tạo ra những hành vi không mong đợi.
Một lần nữa, điều này đối lập với các ứng dụng đơn giản không có tính đồng thời, nơi chương trình chạy theo đúng thứ tự của chuỗi lệnh được định nghĩa trong mã nguồn.

Hai tiến trình ghi đồng thời vào cùng một tài nguyên
Tính bất đồng bộ của mạng, lỗi từng phần và tính đồng thời là những yếu tố chính góp phần tạo nên sự phức tạp trong lĩnh vực hệ thống phân tán. Vì vậy, chúng ta cần luôn ghi nhớ các yếu tố này khi xây dựng hệ thống phân tán trong thực tế. Điều đó sẽ giúp chúng ta dự đoán trước các trường hợp biên và xử lý chúng một cách phù hợp.