Hãy cùng xem những ngộ nhận sai lầm mà các lập trình viên thường mắc phải khi phát triển phần mềm cho hệ thống phân tán.
I. The difference in developing software for distributed systems – Sự khác biệt khi phát triển phần mềm cho hệ thống phân tán
Hệ thống phân tán phải chịu nhiều ràng buộc hơn so với các hệ thống phần mềm chạy trên một máy tính đơn lẻ. Do đó, việc phát triển phần mềm cho hệ thống phân tán cũng rất khác biệt.
Tuy nhiên, những người mới tiếp cận hệ thống phân tán thường đưa ra các giả định dựa trên kinh nghiệm phát triển phần mềm cho các hệ thống chạy trên một máy tính duy nhất. Điều này tất yếu sẽ tạo ra nhiều vấn đề trong các hệ thống mà họ xây dựng về sau.
Để loại bỏ sự nhầm lẫn này và giúp mọi người xây dựng các hệ thống tốt hơn, L. Peter Deutsch cùng các cộng sự tại Sun Microsystems đã tổng hợp một tập hợp các ngộ nhận sai lầm. Những ngộ nhận này được gọi là Fallacies of Distributed Computing.
II. Fallacies – Các ngộ nhận sai lầm
Có tám ngộ nhận sai lầm phổ biến trong điện toán phân tán. Hình minh hoạ dưới đây liệt kê các ngộ nhận này.

Những ngộ nhận sai lầm do các lập trình viên đưa ra trong quá trình phát triển phần mềm cho hệ thống phân tán.
Khi bạn tiếp tục học sâu hơn trong khóa học, bạn sẽ có cái nhìn rõ ràng hơn về lý do vì sao những phát biểu này lại là những ngộ nhận sai lầm.
Tuy nhiên, ngay tại đây, chúng ta sẽ điểm qua nhanh từng ngộ nhận và giải thích ngắn gọn những điểm mà chúng không còn đúng hoặc thiếu sót.
1. The network is reliable
Các abstraction mà lập trình viên học được từ nhiều công nghệ và giao thức khác nhau thường củng cố ngộ nhận phổ biến này. Như chúng ta sẽ thấy ở các chương sau, các giao thức mạng như TCP có thể khiến chúng ta tin rằng mạng là đáng tin cậy và không bao giờ lỗi. Tuy nhiên, đây chỉ là một ảo tưởng với những hệ quả nghiêm trọng. Ngoài ra, các kết nối mạng được xây dựng trên phần cứng, và phần cứng thì chắc chắn sẽ có lúc hỏng. Vì vậy, chúng ta cần thiết kế hệ thống có tính đến điều này.
2. Latency is zero
Các thư viện cố gắng mô hình hóa remote procedure calls (RPC) giống như các lời gọi cục bộ, chẳng hạn như gRPC hay Thrift, thường củng cố giả định này. Chúng ta cần luôn ghi nhớ rằng có sự khác biệt rất lớn về độ trễ (từ milliseconds đến nanoseconds) giữa một lời gọi tới hệ thống từ xa và một lần truy cập bộ nhớ cục bộ. Điều này còn tệ hơn nhiều khi xét đến các lời gọi giữa các data center ở những châu lục khác nhau. Do đó, đây là một yếu tố quan trọng khi quyết định cách geo-distribute hệ thống.
3. Bandwidth is infinite
Ngộ nhận này yếu hơn so với trước đây, bởi vì băng thông đã được cải thiện đáng kể trong vài thập kỷ gần đây. Ví dụ, ngày nay chúng ta có thể xây dựng các kết nối băng thông rất cao trong data center riêng. Tuy nhiên, điều đó không có nghĩa là chúng ta có thể sử dụng toàn bộ băng thông này khi lưu lượng cần đi qua Internet. Đây là điểm quan trọng cần cân nhắc khi thiết kế topology của hệ thống phân tán và khi các request truyền qua Internet.
4. The network is secure
Ngộ nhận này cho thấy rằng mạng rộng hơn mà hai node sử dụng để giao tiếp không nhất thiết nằm trong quyền kiểm soát của chúng. Vì vậy, chúng ta nên coi mạng là không an toàn.
Các ngộ nhận liên quan bao gồm:
- Topology doesn’t change
- There is one administrator
- The network is homogeneous
5. Transport cost is zero
Việc truyền dữ liệu giữa hai điểm luôn phát sinh chi phí tài chính. Chúng ta cần tính đến chi phí này khi xây dựng một distributed system.
6. The global clock fallacy
Có một ngộ nhận không thuộc nhóm trên, nhưng lại thường gây nhầm lẫn cho những người mới tiếp cận distributed systems. Nếu theo cùng phong cách diễn đạt, ngộ nhận này có thể được phát biểu như sau:
“Distributed systems có một global clock, dùng để xác định khi nào các sự kiện xảy ra.”
Giả định này rất dễ gây hiểu lầm, bởi vì nó có vẻ trực quan và đúng trong các hệ thống không phân tán. Ví dụ, một ứng dụng chạy trên một máy tính duy nhất có thể dùng local clock của máy để xác định thời điểm và thứ tự các sự kiện. Tuy nhiên, điều này không đúng trong distributed system, nơi mỗi node có một local clock riêng, và các clock này chạy với tốc độ khác nhau.
Mặc dù có những cách để đồng bộ clock, nhưng chi phí rất cao và không thể loại bỏ hoàn toàn sự sai lệch. Các định luật vật lý cũng ràng buộc giới hạn này. Một ví dụ điển hình là TrueTime API của Google, API này công khai độ bất định của clock như một khái niệm hạng nhất (first-class citizen).