paper

A Note on Distributed Computing

  • Authors:

📜 Abstract

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. We look at a number of distributed systems that have attempted to paper over the distinction between local and remote objects, and show that such systems fail to support basic requirements of robustness and reliability. These failures have been masked in the past by the small size of the distributed systems that have been built. In the enterprise-wide distributed systems foreseen in the near future, however, such a masking will be impossible. We conclude by discussing what is required of both systems-level and application-level programmers and designers if one is to take distribution seriously.

✨ Summary

The paper rejects the unified-object vision in which local and remote objects can be used interchangeably without affecting program design. It argues that distributed computing differs fundamentally from local computing in four areas: latency, memory access, partial failure, and concurrency. Latency makes fine-grained remote interaction expensive; address-space-local pointers cannot be used remotely; partial failures create indeterminate outcomes that have no direct local analogue; and distributed systems introduce asynchronous interactions without a single authority for resource management, synchronization, or recovery.

The paper further argues that these issues cannot be treated merely as implementation-level “quality of service.” Robustness, retry behavior, idempotence, duplicate suppression, locking, and recovery semantics must be represented in protocols and interfaces. Its discussion of NFS illustrates the consequences of adapting a local file-system interface to a distributed setting: soft mounts expose failures in ways that can corrupt applications, while hard mounts conceal failures by causing clients to block. The paper recommends keeping the distinction between local and remote objects visible to programmers, specifying whether interfaces are intended for local or remote use, and providing a middle ground for objects in separate address spaces on the same machine.

The paper has been used as a conceptual reference in subsequent distributed-object and programming-language research. Cook, Ibrahim, Tilevich, and Wiedermann explicitly use it as a guide for their work on language design for distributed objects, citing its analysis of latency, memory access, partial failure, and concurrency while motivating larger-granularity remote operations such as batching. (people.cs.vt.edu) Later research on automatic distribution describes the paper as a blueprint for Java RMI and examines its implications for transparent distribution. (citeseerx.ist.psu.edu) Oracle’s Java RMI documentation directs developers to the paper when discussing failure and recovery, while Java RMI requires remote methods to account for communication-related failures through RemoteException. (docs.oracle.com) Accounts of the Jini project also identify the paper’s distinctions between local and distributed design as central to that project’s design approach. (informit.com) The paper was subsequently published as a chapter in Mobile Object Systems in 1996. (dblp.org)