2.2. Communication Services and Primitives
Because of performance consideration, many of the distributed systems build their
own special communication software. In communication subsystems, low level and high
level services and primitives are provided. We outline the choices of transport service,
the choices of communication primitives, and their semantics.
2.2.1. Low Level Transport Service
The transport service provides a data transfer facility between processes. There are
two conceptual models. Virtual circuits provide reliable transfer of data packets between
two processes, with some form of flow and error control, while datagram provide delivery
of single packets from a source process to a destination process on a "best effort"
basis. The choice of virtual circuit or datagram strongly influences the other design decisions.
Many distributed systems such as Locus use datagrams, basically for performance
reason. Their underlying networks are fairly sound so that the probability of successful
delivery of packets is very high. Moreover, in many cases the transport service is used
only by special software to support remote procedure call (RPC) in which the inter-process
communication is mostly in form of request/response. Flow control and error handling
can be integrated with higher level service. The connection management and lower
level acknowledgements used by virtual circuit introduces unnecessary overhead. However,
the special software at the upper layer must be responsible for dealing with loss,
duplication and misordering of requests/responses.
Some distributed systems choose virtual circuits for their transport service. As an
example, the communication in R*, is built on top of the IBM SNA (Systems Network
Architecture), a virtual circuits protocol. Virtual circuits not only handle the flow and
error control, but also facilitate failure detection and resolution. Based on the model that
a user computation is a tree of processes connected by virtual circuits, R* uses a very
simple failure-resolution mechanism, which is safe unless the failure is detected during
the commit procedure in which case, R* uses datagrams as well.
2.2.2. Communication Primitives