Distribution is an important issue in software engineering, providing scalable systems across networks. Distribution supports a variety of new services from banking systems to social networks to video-on-demand. It is also used in embedded systems like cars and planes built with numerous interconnected computation-intensive blocks. When one processor is not enough, distribution is a natural complement to concurrency. In this chapter, we provide some of the elements to build a distributed system using Ada.
What are distributed systems?
Formally speaking, a distributed system is a federation of interconnected computers that collaborate to fulfill a task. As an example, one can cite web-based applications or constellations of satellites. Distributed systems rely on mechanisms to let information circulate from one node to another. In this section, we review key elements of distributed systems and discuss their strengths and limits.
Why distribute systems?
Before entering into the details of distribution and middleware, it is important to clarify the reasons why someone would want to build a distributed system. Distributing an application across several nodes requires an understanding of (1) the network (topology, technology, etc.), (2) its maintenance lifecycle (potential down time), and (3) its cost (performance and money). In addition, we need to be able to evaluate the value it adds to our application.
From an historic point of view (Vinoski, 2004), distribution was introduced in the early 1960s in large mainframe computer systems used for airline ticketing and banking.