A distributed system is a system in which components are located on different networked computers, which can communicate and coordinate their actions by passing messages to one another. The components interact with one another in order to achieve a common goal.
Key characteristics of distributed systems are
- Resource Sharing
Resource sharing means that the existing resources in a distributed system can be accessed or remotely accessed across multiple computers in the system. Computers in distributed systems shares resources like hardware (disks and printers), software (files, windows and data objects) and data. Hardware resources are shared for reductions in cost and convenience. Data is shared for consistency and exchange of information.
Resources are managed by a software module known as a resource manager. Every resource has its own management policies and methods.
In distributed systems components can have variety and differences in Networks, Computer hardware, Operating systems, Programming languages and implementations by different developers.
Openness is concerned with extensions and improvements of distributed systems. The distributed system must be open in terms of Hardware and Softwares. In order to make a distributed system open,
1. A detailed and well-defined interface of components must be published.
2. Should standardize the interfaces of components
3. The new component must be easily integrated with existing components
Concurrency is a property of a system representing the fact that multiple activities are executed at the same time. The concurrent execution of activities takes place in different components running on multiple machines as part of a distributed system. In addition, these activities may perform some kind of interactions among them. Concurrency reduces the latency and increases the throughput of the distributed system.
Scalability is mainly concerned about how the distributed system handles the growth as the number of users for the system increases. Mostly we scale the distributed system by adding more computers in the network. Components should not need to be changed when we scale the system. Components should be designed in such a way that it is scalable.
- Fault Tolerance
In a distributed system hardware, software, network anything can fail. The system must be designed in such a way that it is available all the time even after something has failed.
Distributed systems should be perceived by users and application programmers as a whole rather than as a collection of cooperating components. Transparency can be of various types like access, location, concurrency, replication, etc.