A distributed system can be viewed as a collection of objects working either in cooperation or independently for different tasks. Some of the objects represent execution of algorithms, others represent resources needed to perform the execution, still others represent data manipulated by the algorithms. Collections of objects working together can be modeled in different ways. The client-server model is commonly used in the context of distributed systems, as also cooperating objects.
In the client-server model the computing task is divided into modules working together in behalf of the human user. Clients interact with the user and request partial tasks to be performed by the servers. The servers can be general, multi-threaded processes that have no stable knowledge about the status of the task. The server can thus offer either execution of algorithms or stable storaging of information. Depending on the nature of servers, the client has more or less freedom in the phase of binding to server instances.
In the model of cooperating objects, the objects are peers. The algorithm of performing the given task is distributed so that the objects can simultaneously compute partial tasks, exchange partial results and thus complete the given task together. Each object also stores part of the status of the task.
The client-server model is commonly accepted but it has some problems. One of them is the division between client and server modules so that the computing task can be performed efficiently. The servers should be general enough to be useful in different application areas. Another important problem, although less discussed, is the problem of efficient and flexible binding of servers to clients. This problem is already present in single application systems, where exists functionally identical servers. Especially difficult the problem is in open distributed networks where a computing or transmitting service is offered by almost identical servers for different costs. The same problems occur also in cooperating objects model. Both methods also have the difficulties generated by the distribution: differences in naming schemes, authorization problems and asynchronous faults.
Several methods has been introduced to answer these problems. Directory servers offer a way to find the servers or objects and they also help in the name resolving by forcing a global naming scheme. Authorization servers can be used to allow cooperation between different computers in a secure way. As these methods have been used together with remote execution but not properly combined into the remote execution service, the result has not been satisfactory. The latest development is the scheme of trading. Trading should answer to the open question of autonomy in naming, finding the best server at the moment it is needed and the problem of handling slightly different interfaces of servers.