A distributed system is a software system in which components located on networked computers communicate and coordinate their actions by passing messages. The components interact with each other in order to achieve a common goal.
Distributed systems Principles
A distributed system consists of a collection of autonomous computers, connected through a network and distribution middleware, which enables computers to coordinate their activities and to share the resources of the system, so that users perceive the system as a single, integrated computing facility.
Symmetry – all nodes are equal
Decentralization – no central control
Work distribution heterogeneity
Centralized vs Distributed Systems
Centralized System Characteristics
One component with non-autonomous parts
Component shared by users all the time
All resources accessible
Software runs in a single process
Single Point of control
Single Point of failure
Distributed System Characteristics
Multiple autonomous components
Components are not shared by all users
Resources may not be accessible
Software runs in concurrent processes on different processors
Multiple Points of control
Multiple Points of failure
Examples of distributed systems and applications of distributed computing include the following:
- telecommunication networks:
- telephone networks and cellular networks,
- computer networks such as the Internet,
- wireless sensor networks,
- routing algorithms;
- network applications:
- World wide web (WWW) and peer-to-peer networks,
- massively multiplayer online games and virtual reality communities,
- distributed databases and distributed database management systems (DBMS),
- network file systems,
- distributed information processing systems such as banking systems and airline reservation systems;
- real-time process control:
- aircraft control systems,
- industrial control systems;
- parallel computation:
- scientific computing, including cluster computing and grid computing and various volunteer computing projects (see the list of distributed computing projects),
- distributed rendering in computer graphics.
Certain common characteristics can be used to assess distributed systems
Ability to use any hardware, software or data anywhere in the system.
Resource manager controls access, provides naming scheme and controls concurrency.
Resource sharing model (e.g. client/server or object-based) describing how
resources are provided,
they are used and
provider and user interact with each other.
Openness is concerned with extensions and improvements of distributed systems.
Detailed interfaces of components need to be published.
New components have to be integrated with existing components.
Differences in data representation of interface types on different processors (of different vendors) have to be resolved.
Components in distributed systems are executed in concurrent processes.
Components access and update shared resources (e.g. variables, databases, device drivers).
Integrity of the system may be violated if concurrent updates are not coordinated.
Adaption of distributed systems to accomodate more users
respond faster (this is the hard one)
Usually done by adding more and/or faster processors.
Components should not need to be changed when scale of a system increases.
Design components to be scalable
Hardware, software and networks fail!
Distributed systems must maintain availability even at low levels of hardware/software/network reliability.
Fault tolerance is achieved by
Distributed systems should be perceived by users and application programmers as a whole rather than as a collection of cooperating components.