Distributed Objects - Remote Message Passing
Andrew P. Black
black at cse.ogi.edu
Tue Nov 21 08:13:44 UTC 2000
At 11:25 -0500 00.11.20, Lex Spoon wrote:
>The best summary of the problems with the abstraction I've seen is at:
>
> http://www.sun.com/research/technical-reports/1994/abstract-29.html
>
>What do you think?
I think that the Waldo paper referenced here, and Lex's browser
example, raise several very valid points. I've raised some of these
myself, along with others, in a paper of my own critiquing RPC
parameter passing. Butler Lampson also listed some of them in the
discussion of RPC that was part of his talk at the 1999 SOSP.
Java RMI is considered by some to be unusable because on the one
hand, the semantics of a message send depend on whether the sender
and the target are co-located, while on the other hand you are not
supposed to _know_ if they are co-located.
There are two issues to be solved in writing a distributed
application. The conceptually easy one is communicating with a
remote address space. It's conceptually easy, but very messy, as
anyone who has had to write code that marshals data into a network
format and rebuilds the data structure son the other side will
testify.
The conceptually hard issue is dealing with failure. I agree that in
some sense this is the core problem that characterizes the field of
distributed systems. Even detecting a failure is impossible: a
failed process cannot be distinguished from one that is simply very
slow.
RPC and RMI mechanisms help with the first problem. They do not help
with the second, other than by freeing up your time to focus on
issues of failure because you don't have to worry about getting the
bits across the network.
In this context, I think that the Waldo paper does not fairly
describe the distributed system-building methodology espoused by
languages such as Emerald. In Emerald, we made local and remote
method invocation semantically identical. This meant that when you
wrote a message send, the syntax and semantics did not depend on the
location of the sender and the target. I still believe that this is
appropriate.
What Emerald did not try to do was to hide the location of objects.
On the contrary, there were special system primitives that exposed
the location of objects to the program. And it was a design feature
that there operations were language primitives, and not simply
message sends. Indeed, the mantra of those early days was
"Invocation should be location independent, but Objects need not be".
Neither did Emerald try to hide failures -- just the opposite. Any
message send could be provided with a failure handler that allowed
the sender to explicitly write code that dealt with the situation
where the target object failed. Once again, this was quite different
from exception handling, which is applied when the message send and
answer mechanism has succeeded, but the reply may not be what the
sender had hoped for.
So, to recap: the hard problems of distributed computing are
designing the distributed object architecture, locating the objects
for efficiency, detecting failures, making progress in the presence
of uncertainty about the global system state, and so on. Anyone who
sells you an RPC or RMI mechanism claiming that it solves these
problems is a charlatan.
But that does mean that an RPC or RMI mechanism is not useful. If it
is well designed and implemented, it removes a lot of error-prone
detail from the eyes of the programmer and the maintainer. It lets
them focus on the hard problems listed above. I don't see that this
is bad.
Andrew
________________________________________________________________________________
Reference:
M. M. da Silva, M. P. Atkinson, A. P. Black (1996). Semantics for
Parameter Passing in a Type-complete Persistent RPC. 16th
International Conference on Distributed Computing Systems, Hong Kong,
IEEE Computer Society Press.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20001121/3b6df309/attachment.htm
More information about the Squeak-dev
mailing list
|