We assume that a system consists of a number of services . A service has a number of clients that rely on the service to get their work done. A client may itself provide service to other clients.
A service has a service specification and an implementation. A service specification describes what a service provides; a service implementation consists of a collection of software and hardware objects that collectively provide the specified service. For example, a name service maintains associations between names and objects. A name service can be replicated, that is, it can be implemented by a number of objects that each contain all the associations. It is important to notice that we consider a replicated name service as one logical entity even though it may be implemented by a collection of distributed objects.
A client uses a service through a service reference , or simply a reference . A reference is a handle that a client can use to issue service requests. A reference provides a client with a single access point, even to services that are implemented by multiple objects.
Traditionally, a service specification is a functional interface
that lists the operations and attributes that clients can access; we extend this traditional notion of a service specification to also include a definition of the QoS provided by the service. The same service specification can be realized by multiple implementations, and the same collection of objects can implement multiple service specifications.