A Programming Model for Wide-Area Computing
During the last decade there have been great strides in broadband communication, and the World Wide Web provides a giant repository of information. This combination promises development of a new generation of distributed applications, ranging from mundane office tasks — e.g., planning a meeting by reading the calendars of the participants — to real-time distributed control and coordination of hundreds of machines —e.g., as would be required in a recovery effort from an earthquake.
The distributed applications we envisage have the structure that they collect data from a number of sources, compute for a while and then distribute the results to certain destinations. This simple paradigm hides a multitude of issues. When should an application start executing: when invoked by a human, by another application, periodically say, at midnight, or triggered by an event, say, upon detection of the failure of a communication link? How does an application ensure that the data it accesses during a computation is not altered by another concurrently executing application? How do communicating parties agree on the structure of the data being communicated? And, how are conflicts in a concurrent computation arbitrated? In short, the basic issues of concurrent computing such as, exclusive access to resources, deadlock and starvation, and maintaining consistent copies of data, have to be revisited in the wide-area context.
There seems to be an obvious methodology for designing distributed applications: represent each device (computer, robot, a site in the World Wide Web) by an object and have the objects communicate by messages or by calling each others’ methods. This representation maps conveniently to the underlying hardware, and it induces a natural partition on the problem that is amenable to step-wise refinement. We start with this model as our basis, simplify and enhance it so that it is possible to address the concurrent programming issues. In this talk, I discuss the programming model and some of our experience in building distributed applications.