Introduction to Distributed Computing
The term "distributed" as used in contexts such as "distributed system," "distributed programming," and "distributed algorithm" originally described networks where computers were physically spread across geographical locations. Nowadays, this term broadly covers autonomous processes, even those running on the same physical computer, which interact via message passing.
While a unified definition of a distributed system remains elusive, certain properties are commonly accepted:
Distributed systems may aim to solve large computational problems, appearing as a single unit to the user. Alternatively, they might manage shared resources or provide communication services, with each computer serving different user needs.
Distributed systems are designed to handle several complexities:
The terms "distributed computing," "parallel computing," and "concurrent computing" overlap significantly:
The accompanying figure differentiates between distributed (Figures a and b) and parallel (Figure c) systems. Figure a provides a network topology view of a distributed system, while Figure b zooms in to show individual computers linked by communication channels. Figure c illustrates a parallel system where all processors share memory.
The concept of message-passing concurrent processes dates back to the 1960s in operating system research. The proliferation of distributed systems began with the development of local-area networks, such as Ethernet in the 1970s, and was furthered by the introduction of ARPANET, a precursor to the internet, in the late 1960s. ARPANET's e-mail system, developed in the early 1970s, became one of the first successful large-scale distributed applications. Subsequent networks like Usenet and FidoNet also supported distributed systems from the 1980s. The formal study of distributed computing evolved into a distinct branch of computer science by the early 1980s, marked by the establishment of dedicated conferences like the Symposium on Principles of Distributed Computing (PODC) and the International Symposium on Distributed Computing (DISC).
For more detailed discussions, see the provided links regarding distributed algorithms and systems.
Distributed computing involves various hardware and software architectures. These systems typically require the interconnection of multiple CPUs through networks which can be complexly structured or simply made up of loosely coupled devices and cables.
The fundamental architectures of distributed systems are primarily categorized by resource sharing:
Distributed programming often adopts specific architectural frameworks:
Distributed systems also vary in their method of communication among concurrent processes:
The deployment of distributed systems is often driven by specific needs and advantages:
Distributed computing is integral to a vast array of systems and sectors:
These architectures and applications illustrate the diversity and complexity of distributed computing systems, reflecting their critical role in modern technology and industry.
Distributed computing involves solving computational problems across multiple computers or processes. This field intersects with theories of computability and computational complexity, which explore what problems can be solved and the efficiency of these solutions.
In theoretical computer science, computational problems are defined by instances (questions) and their corresponding solutions. Problems suitable for automation by computers often follow this question-answer format.
Computational problems are considered solvable if an algorithm can produce a correct solution for any instance. Such algorithms can be implemented on general-purpose computers which perform computations to convert input instances into output solutions. Models like random-access machines or universal Turing machines serve as abstract models for these computations. For more on these models, see Formal Models of Computation.
This domain extends the discussion to systems involving multiple computers or concurrent processes on a single machine, exploring the solvability and efficiency of problems in these contexts.
1. Parallel Algorithms in Shared-Memory Model:
2. Parallel Algorithms in Message-Passing Model:
3. Distributed Algorithms in Message-Passing Model:
In distributed computing, many computational problems are inherently graph-related, reflecting the structure and dynamics of the underlying computer network. Each graph serves not only as a tool but often as the problem instance itself.
Explore these concepts further through Distributed Algorithms and Systems for a comprehensive understanding of distributed algorithms' theoretical underpinnings and practical applications.
Research on distributed systems not only involves designing systems to solve specific problems but also studying the inherent properties of these systems.
Analogous to centralized computing's halting problem, which questions whether a given program will halt or run indefinitely, distributed computing faces similar challenges. The halting problem, undecidable in general, highlights the complexity of predicting behavior in even a single computer, which scales further in distributed networks.
Despite the overarching challenge, certain special cases within distributed systems can be decided. Notably, the behavior of networks consisting of finite-state machines offers intriguing possibilities:
For more on the theoretical challenges and properties of distributed systems, explore detailed studies such as those found in the Journal of Physics: Conference Series, which discusses various aspects of complex computing environments