This section summarizes the development of distributed systems from the mulit-tier client-server model. It also describes the characteristics, advantages, and disadvantages of distributed systems.
- Distributed System Model
- The Nature of Distributed Systems
- The Nature of Distributed Systems
- Advantages of Distributed Systems
- Disadvantages of Distributed Systems
Distributed systems are a logical extension of multi-tier client-server architecture. Distributed systems invariably tend to be heterogeneous -- that is composed of several operating systems, running applications developed in several languages, running on various operating systems.
Instead of separating the business logic tier and the data access tier, distributed systems simply exposes all functionality of the application as objects, each of which can use any of the services provided by any of the other objects in the system, or even objects in another system.
This architecture blurs the distinction between client and server, because clients can create objects that behave like servers, and servers can make requests (and thus act as clients) to other servers.
There is no logical limit to the number of objects a system can have.
The Nature of Distributed Systems
Most organizations find themselves with a variety of hardware platforms, operating systems, programming languages, and networking technologies. IT infrastructure grows by adding new components, based on the technology available. The technology changes as business requirements change, and as the available technology options evolve.
It is unlikely that homogeneous systems, where all components use the same hardware, operating system, networking technology, and programming language will ever be realized. All of these different tools have strengths and weaknesses that make them more or less suitable for different tasks. To remain competitive, organizations must be able to use the right tools for each task, but still have all this different software working together.
Characteristics of Distributed Systems
- Clients actively issue requests to objects in servers.
- Servers passively provide access to objects that respond to client requests.
- Clients and servers are usually in different address spaces.
- Clients and servers usually execute on several machines.
As outlined in What Are Objects?, an object is defined by its data and the operations that can be performed on that data. In a distributed system, this information must be contained in the object's interface so that other objects in the system can communicate with it. Separating an object's interface from its implementation means that other objects in the system that communicate with it do not need to know how and where the object is implemented.
The effect of this separation is that any changes to an object's implementation do not affect its interface. This means that one object can be implemented in many different ways. This allows previously unthinkable flexibility.
Note:
It is important to realize that clients and servers are just roles that programs can play, and a single program can play both roles during execution.
Advantages of Distributed Systems
Distributed systems offer a number of advantages:
- Users can be geographically separate.
This is important for large corporations, where business decisions must be made by people in different locations, but those decisions must be based on company-wide data.
- Multiple machines can improve performance and scalability.
Because a client-server system is distributed over several machines, you can improve the performance and scalability in several ways. There might be multiple replicas of a server running on separate machines, so each handles only a fraction of the total number of clients. Redundant servers on separate machines can provide fail-over capability, to ensure service in the event of a problem on one machine.
- Heterogeneous systems can use the best tools for each task.
Different components of an application can run on hardware that is optimized for a specific task. For example, an application might need to retrieve large amounts of statistical or experimental data from a database, perform complex computations on that data (such as computing a weather model), and display the results of that computation in the form of maps. By running the database, the computational engine, and the graphics rendering engine on hardware that is optimized for each task, performance can improve dramatically.
- Distributed systems can reduce maintenance costs.
For example, by upgrading an application image on a single server, it is possible to upgrade thousands of clients.
Disadvantages of Distributed Systems
Often, organizations that attempt to create a client-server architecture themselves quickly run into serious problems, especially in heterogeneous environments. Almost every aspect of client-server computing presents very serious technical challenges. Organizations must take care of issues relating to the integration of different networking technologies, hardware architectures, operating systems, communication protocols, as well as error recovery, support for multiple languages, and a whole host of other issues.
Attempting to accomplish these tasks internally leads to massive expenditure on infrastructure, and with little chance of success: the technology is complex, few organizations have the skills to solve all the problems or, if they do, might not be able to solve the problems on time. Moreover, any home-grown solution is likely to be proprietary and therefore not open to integration with products from other vendors.