Another weekend, another weekend read, this time all about a Note on Distributed Computing
I am writing a book on Thinking in Distributed Systems. 12 chapters, one chapter per month, full of diagrams, illustrations, and examples, all about distributed systems.
In their paper A Note on Distributed Computing, the authors Jim Waldo, Geoff Wyant, Ann Wollrath, and Sam Kendall argue that objects that interact in a distributed system need to be dealt with in ways that are intrinsically different from objects that interact in a single address space.
Fun Fact
The paper was written and published while the authors were at Sun Microsystems in 1994, the same place and time Laurence Peter Deutsch published the 7 Fallacies of Distributed Computing. Later, in 1997, James Gosling extended to the original fallacies to the well known 8 Fallacies of Distributed Computing:
The network is reliable
Latency is zero
Bandwidth is infinite
The network is secure
Topology doesn't change
There is one administrator
Transport cost is zero
The network is homogeneous
The authors argue that any programming model that pretends a distributed system is not a distributed system is doomed to fail.
Aligned with the predominant programming model of the time, the authors present their arguments using the lens of object-oriented programming. However, this emphasis does not undermine its universal applicability:
For those of us either old enough to have experienced it or interested enough in the history of computing to have learned about it, the vision of unified objects is quite familiar. The desire to merge the programming and computational models of local and remote computing is not new.
The authors go ahead and examine the flaws of pretending a distributed system is not distributed and examine 4 differences:
The major differences between local and distributed computing concern the areas of latency, memory access, partial failure, and concurrency.
After exploring the key differences, the authors explore Sun Microsystem’s distributed file system, NFS, to see the consequences of ignoring the distinction between local and distributed computing at the interface level.
The authors conclude that we need to take these differences seriously and while writing code, engineers will have to know whether they are sending messages to local or remote objects, and access those objects differently.
A timeless and highly recommended read for anybody interested in distributed systems
Happy Reading
A Note on Distributed Computing
Jim Waldo, Geoff Wyant, Ann Wollrath, Sam Kendall
We argue that objects that interact in a distributed system need to be dealt with in ways that are intrinsically different from objects that interact in a single address space. These differences are required because distributed systems require that the programmer be aware of latency, have a different model of memory access, and take into account issues of concurrency and partial failure.