A collection of independent computers that appears to its users as a single coherent system
Distributed system
Consists of autonomous components (computers)
Users think they are dealing with a single system
Components need to collaborate
No assumptions are made concerning the type of computers in a distributed system
Characteristics of distributed systems
Differences between computers and communication are hidden from users
Internal organization is hidden from users
Users and applications can interact in a consistent and uniform way
Relatively easy to expand or scale
Continuously available, with parts being replaced or fixed without users noticing
Middleware
A layer of software that is logically placed between users/applications and operating systems/communication facilities
Distributedsystemsaresometimescalledmiddleware
Making resources accessible
The main goal of a distributed system is to make it easy for users and applications to access remote resources and share them in a controlled and efficient way
Resources can include printers, computers, storage, data, files, web pages, networks, etc.
Connectivity of the Internet is leading to virtual organizations where geographically dispersed groups collaborate using groupware
Increased connectivity can also lead to security and privacy issues, such as tracking user preferences and unwanted communication (spam)
Distribution transparency
Hiding the fact that a distributed system's processes and resources are physically distributed across multiple computers
Types of transparency in distributed systems
Access transparency
Location transparency
Migration transparency
Relocation transparency
Replication transparency
Concurrency transparency
Attempting to completely hide all distribution aspects from users is not always a good idea
There is a trade-off between transparency and performance, consistency, and comprehensibility
Openness
A distributed system offers services according to standard rules that describe the syntax and semantics of those services
Interface definitions in an IDL capture the syntax but not the semantics of services
Extensibility
An open distributed system should be easy to configure out of different components, and easy to add new components or replace existing ones
Scalability
A distributed system can scale in size (more users/resources), geography (users/resources far apart), and administration (spanning multiple organizations)
Unfortunately, a system that is scalable in one dimension may not be scalable in another
Attaining flexibility in distributed systems is easier said than done
Scalability
Scalable with respect to size
Geographically scalable
Administratively scalable
A system that is scalable in one or more dimensions often exhibits some loss of performance as the system scales up
Centralized services
Services implemented by means of only a single server running on a specific machine in the distributed system
Centralized services can become a bottleneck as the number of users and applications grows
Centralized data
Data stored in a single database
Centralized data can saturate communication lines
Centralized algorithms
Algorithms that operate by collecting information from all the sites, sends it to a single machine for processing, and then distributes the results
Decentralized algorithms
Operate without collecting information from all sites
Do not send information to a single machine for processing
Do not distribute results from a single machine
Take into account lack of exact clock synchronization
Communication in wide-area networks is inherently unreliable and virtually always point-to-point, unlike local-area networks which provide highly reliable communication facilities based on broadcasting
Geographical scalability is limited by centralized components due to performance and reliability problems resulting from wide-area communication
Scaling a distributed system across multiple, independent administrative domains is a difficult and often open question due to conflicting policies with respect to resource usage, management, and security
Scaling techniques
Hiding communication latencies
Distribution
Replication
Hiding communication latencies
Avoiding waiting for responses to remote service requests as much as possible, e.g. using asynchronous communication or moving computation to the client
Distribution
Taking a component, splitting it into smaller parts, and spreading those parts across the system
Examples of distribution
Internet Domain Name System (DNS)
World Wide Web
Replication
Making copies of a component across a distributed system to increase availability and balance load
Caching
Making a copy of a resource in the proximity of the client, decided by the client rather than the owner
Replication and caching lead to consistency problems as multiple copies of a resource need to be kept in sync
Strong consistency guarantees are extremely hard or even impossible to implement in a scalable way
Size scalability is the least problematic from a technical point of view, geographical scalability is more difficult, and administrative scalability is the most difficult