Interactions between distributed applications presuppose an underlying
control model to coordinate information exchanges and networking soft
ware to implement that model. The client/server control model defines
distributed interactions in terms of one program requesting and obtain
ing a service from a second, possibly remote, application. However, th
is basic model provides inadequate design support when clients need to
invoke multiple, independent services, coordinated to reflect how tho
se services interrelate and contribute to the overall application. The
author describes extensions to the basic client/server model that exp
licitly address one-to-many client/server interactions by discussing t
hree basic design issues: how multiple services are requested, how tho
se services are managed, and how clients receive responses. The extend
ed coordination models provide support for locating, obtaining, and sy
nchronizing services, as well as for collecting and combining results
from multiple servers in a manner that is transparent to clients. Exte
nded models include a scripting engine for managing data and temporal
dependencies among services; a basic request broker for mediating clie
nt access to distributed services; and extended request broker models
that decompose composite services, manage redundant servers, and repli
cate messages to logical server groups. These coordination models were
designed as generic, programmable control services. The control servi
ces are interoperable, so they can be combined like building blocks to
match application-specific coordination requirements. The one-to-many
coordination services are layered on top of an object-oriented, messa
ge-passing communication substrate, which transparently manages the co
mplexities of interprogram interactions across networks of heterogeneo
us computers. This layered architecture lets complex coordination beha
viors be modeled and executed external to application elements. It acc
omplishes this through high-level application programming interface (A
PI) calls. The resulting partitioning of application and generic distr
ibuted behaviors yields improved modularity, maintainability, and exte
nsibility of individual clients and servers.