ossp-pkg/srpc/EVAL
1.7
Evaluation
==========
o Spread, http://www.spread.org/
Spread is a sophisticated framework for distributed computing. The
software itself is written in C and uses a design very similar to
SRPC's: It is split into a permanently running daemon and a link
library containing interface routines to that daemon to the
programmer. The daemon will maintain so called "groups", which
computers can join and leave. Furthermore the daemon provides group
communication services based on TCP, UDP or Multicast-UPD. Via this
communication services, the actual remote procedure calls are
implemented.
The software seems to be actively maintained, well-written and
documented, but unfortunately the following drawbacks kept us from
using it:
- Spread's license currently prohibits any commercial use.
But according to the authors (as of April 2001) they are providing
special license exceptions for Open Source projects and working on
moving Spread to a commercial split of from their University and
then releasing Spread under a real Open Source license.
- It is not possible for peers to communicate without the daemon.
(RSE: I'm not sure about this. If I understood the Spread guys
correctly at ApacheCon 2001 it should be possible to run it
without the daemon or at least with an own application-dedicated
daemon instead of a system-dedicated daemon. We should check this
in details).
- The API for the programmer is somewhat messy.
o XML-RPC, http://www.xmlrpc.org/
XML-RPC is a standardized remote procedure call framework for which
several complying implementations exist. These implementations
provide support for the programming languages Perl, Python, Java,
C/C++, Lisp, PHP, Microsoft .NET, Tcl, Delphi, WebObjects and many
more. Remote procedure calls are encoded in a portable XML
representation and transferred via HTTP.
The software seems to be popular and many resources dealing with
XML-RPC exist, but for us the massive XML encoding overhead was too
much.
o RPC2, http://www.coda.cs.cmu.edu/
This RPC mechanism is part of the CODA network file system, but it
can be used without the file system part. RPC2 consists of a link
library for the programmer and a stub generator, that will create
function descriptions, which the library can then use to call the
described function remotely. The whole approach is very clean and
minimalistic, but unfortunately, the code depends on liblwp -- a
user space threading library. While threading is certainly useful on
many occasions, we did not want to use a system that enforces
threading. In C++, for instance, the behavior of exceptions within a
thread are totally unspecified. Furthermore, user space threads do
not achieve the performance of kernel threads, nor are they
portable (RSE: Hmmmm... I'm not sure this really holds, because
evaluation showed that 1. user-space dispatching is usually faster
than dispatching in kernel-space and 2. GNU Pth proofed that
user-space threading can be done in a very portable way).
o MRPC, http://www.tildeslash.org/mrpc.html
"Modular RPC" is a minimalistic remote procedure call mechanism
using a similar design as the original RPC: It consists of a code
generator that will encapsulate function definitions in such a way
that they can be called remotely with the functions provided in a
link library. The whole system is very lean and efficient,
marshaling is done automatically for most data types, and the
provided documentation is sufficient.
Unfortunately, the whole system is written in C++ and can thus not
trivially be used in plain C or any other language.
o LinuxDoors, http://www.rampant.org/doors/
The author discontinued development of the package in May 2001. The
current version 0.9 is considered to be alpha quality software.
o ORBit, http://orbit-resource.sourceforge.net/
ORBit is a CORBA 2.2-compliant object request broker. Do I need to
say more?
o TIRPC, ftp://ftp.uu.net/networking/rpc/
The "Transport Independent RPC" package is derived from the original
SUN RPC and uses the TLI interface to access the network.
Unfortunately, TLI is not widely supported; sockets rule the
communication market. Thus, the package is not very useful for us.
o SunRPC
rfc1050.txt
rfc1057.txt
rfc1790.txt
rfc1831.txt
rfc1833.txt
rfc2203.txt
rfc2695.txt
o DCERPC
ftp://gatekeeper.dec.com/pub/DEC/DCE/
o Foreign Function Call Library
http://clisp.cons.org/~haible/packages-ffcall.html