What are distributed systems?

Distributed systems are an assembly of autonomous computing units called nodes. In order to accomplish shared tasks, nodes communicate and collaborate through a common network by sharing resources with each other. Such systems will appear to the end-users as if they are a single unit.

Characteristics of distributed systems

  1. Openness: If the components of a distributed system are engineered in accordance to a standardized and well-defined set of interfaces, extending the system with re-usable components without impacting its stability would be relatively straightforward. Such systems are referred to as open.

  2. Scalability: Scalable systems can adapt to changing workloads by adjusting their resources while preserving their functionality and availability. For example, if the number of users of a distributed system increases, the system must be able to grow its computing resources in order to accommodate the required processing power without needing any change in design.

  3. Resource Sharing: Users of a distributed system and its components should be able to share local and remote data, software and hardware resources.

  4. Concurrency: Distributed systems should be able to handle concurrent execution of tasks which may or may not access the same data. Concurrent processes should not interfere with each other and the system should ensure the consistency of the shared data.

  5. Fault Tolerance: Distributed systems should be fault tolerant by being able to gracefully recover from failures without any interruptions to ongoing operations.

  6. Transparency: Complex internals of a distributed system should be hidden from its users so that the system should be perceived as a whole unit rather than a collection of components. There are different kinds of transparencies that can be achieved in a distributed system:

    • Access Transparency: Regardless of where the resources are located, either local or remote, access methods should be identical for the users.

    • Location Transparency: User should be able to access a resource in the system without having to know its physical and/or network location.

    • Concurrency Transparency: Components in the system and its users should be able to use shared data concurrently without interfering with each other.

    • Replication Transparency: Without concerning the users, distributed systems should be able to replicate and distribute resources for improved reliability and performance.

    • Failure Transparency: The system should be able to recover from failures and hide them from the users without impacting the availability and correctness of the system.

    • Migration Transparency: The system should be able to silently move resources around without interfering with the operations on them.

    • Performance Transparency: The system should be reconfigurable for changing workloads and performance requirements.

    • Scaling Transparency: Depending on the requirements, the system should be able to gracefully grow or shrink in size without affecting the application.