Computer Science

Distributed Programming

Distributed programming is a method of designing and implementing software systems that are composed of multiple independent components running on different computers and communicating with each other over a network. It involves the use of various techniques and technologies to ensure that the components work together seamlessly and efficiently.

Written by Perlego with AI-assistance

5 Key excerpts on "Distributed Programming"

  • Computer Architecture and Security
    eBook - ePub

    Computer Architecture and Security

    Fundamentals of Designing Secure Computer Systems

    • Shuangbao Paul Wang, Robert S. Ledley(Authors)
    • 2012(Publication Date)
    • Wiley
      (Publisher)
    Distributed computing is a field of computer science that studies distributed systems. A distributed system consists of multiple autonomous computers that communicate through a computer network. The computers interact with each other in order to achieve a common goal. A computer program that runs in a distributed system is called a distributed program, and Distributed Programming is the process of writing such programs.
    Distributed computing also refers to the use of distributed systems to solve computational problems. In distributed computing, a problem is divided into many tasks, each of which is solved by one or more computers.
    The word distributed in terms such as “distributed system,” “Distributed Programming,” and “distributed algorithm” originally referred to computer networks where individual computers were physically distributed within some geographical area. The terms are nowadays used in a much wider sense, even referring to autonomous processes that run on the same physical computer and interact with each other by message passing.

    7.4.4 Distributed Systems

    While there is no single definition of a distributed system, the following defining properties are commonly used:
    • There are several autonomous computational entities, each of which has its own local memory.
    • The entities communicate with each other by message passing.
    • Have a common goal, such as solving a large computational problem.
    • Each computer may have its own user with individual needs, and the purpose of the distributed system is to coordinate the use of shared resources or provide communication services to the users.
    • The system has to tolerate failures in individual computers.
    • The structure of the system (network topology, network latency, number of computers) is not known in advance, the system may consist of different kinds of computers and network links, and the system may change during the execution of a distributed program.

    7.4.5 Parallel and Distributed Computing

    Distributed systems are groups of networked computers, which have the same goal for their work. The terms “concurrent computing,” “parallel computing,” and “distributed computing” have a lot of overlap, and no clear distinction exists between them. The same system may be characterized both as “parallel” and “distributed;” the processors in a typical distributed system run concurrently in parallel. Parallel computing may be seen as a particular tightly-coupled form of distributed computing, and distributed computing may be seen as a loosely-coupled form of parallel computing. Nevertheless, it is possible to roughly classify concurrent systems as “parallel” or “distributed” using the following criteria:
  • Distributed Computing with Python
    Distributing computation across multiple computers is again a pretty obvious strategy when using systems that are able to speak to each other over the (local or otherwise) network. In many respects, in fact, this is just a generalization of the concepts of parallel computing that we saw in the previous section.
    Reasons to build distributed systems abound. Oftentimes, the reason is the ability to tackle a problem so big that no individual computer could handle it at all, or at least, not in a reasonable amount of time. An interesting example from a field that is probably familiar to most of us is the rendering of 3D animation movies, such as those from Pixar and DreamWorks.
    Given the sheer number of frames to render for a full-length feature (30 frames per second on a two-hour movie is a lot!), movie studios need to spread the full-rendering job to large numbers of computers (computer farms as they are called).
    Other times, the very nature of the application being developed requires a distributed system. This is the case, for instance, for instant messaging and video conferencing applications. For these pieces of software, performance is not the main driver. It is just that the problem that the application solves is itself distributed.
    In the following figure, we see a very common web application architecture (another example of a distributed application), where multiple users connect to the website over the network. At the same time, the application itself communicates with systems (such as a database server) running on different machines in its LAN:
    Another interesting example of distributed systems, which might be a bit counterintuitive, is the CPU-GPU combination. These days, graphics cards are very sophisticated computers in their own right. They are highly parallel and offer compelling performance for a large number of compute-intensive problems, not just for displaying images on screen. Tools and libraries exist to allow programmers to make use of GPUs for general-purpose computing (for example CUDA from NVIDIA, OpenCL , and OpenAcc
  • Parallel Computing Architectures and APIs
    eBook - ePub

    Parallel Computing Architectures and APIs

    IoT Big Data Stream Processing

  • • Loosely coupled multicomputers (without shared memory) physically colocated. These may be bus-based (e.g., networks of workstations (NOW) connected by a local area network [LAN] or Myrinet card) or use a more general communication network, and the processors may be heterogeneous. In such systems, processors neither share memory nor have a common clock, and hence may be classified as distributed systems; however, the processors are very close to one another, which is characteristic of a parallel system. As the communication latency may be significantly lower than in wide area distributed systems, the solution approaches to various problems may be different for such systems than for wide area distributed systems.
  • • Loosely coupled multicomputers (without shared memory and without a common clock) that are physically remote. These correspond to the conventional notion of distributed systems.
  • • Parallelism or speedup of a program on a specific system
  • This is a measure of the relative speedup of a specific program on a given machine. The speedup depends on the number of processors and the mapping of the code to the processors. It is expressed as the ratio of time T (1) with a single processor, to time T (n ) with n processors.
  • • Parallelism within a parallel/distributed program
  • This is an aggregate measure of the percentage of time that all the processors are executing CPU instructions productively, as opposed to waiting for communication (either via shared memory or message passing) operations to complete. The term is traditionally used to characterize parallel programs. If the aggregate measure is a function of only the code, then the parallelism is independent of the architecture.
  • • Concurrency of a program
  • This is similar to the parallelism of a program, but is used in the context of distributed programs. The parallelism/concurrency in a parallel/distributed program can be measured by the ratio of the number of local (non-communication and non-shared memory access) operations to the total number of operations (including the communication or shared memory access operations).
  • • Granularity of a program
  • The ratio of the amount of computation to the amount of communication within the parallel/distributed program is termed granularity
  • Remoting Patterns
    eBook - ePub

    Remoting Patterns

    Foundations of Enterprise, Internet and Realtime Distributed Object Middleware

    • Markus Völter, Michael Kircher, Uwe Zdun(Authors)
    • 2013(Publication Date)
    • Wiley
      (Publisher)
    There are also property-related reasons for using distributed systems – that is, reasons that are motivated by a particular system property that should be improved by distributing the system. Examples of such system properties are:
    • Performance and Scalability. If a system has to cope with sufficiently heavy loads that a single machine cannot cost-effectively solve the problem, the problem is divided and assigned to several machines to share the load. To allow these to efficiently handle the computing load, the machines have to be coordinated in some way. This process is called ‘load balancing’, and results in a distributed system. For example, most Web sites with very high hit rates are served by more than one machine. Another example is the area of super-computing: Grids of smaller machines are assembled to provide a performance unattainable by any single machine. We discuss availability and scalability patterns in Chapter 13, Related Concepts, Technologies, and Patterns.
    • Fault Tolerance. Another reason for using distributed systems is fault tolerance. All hardware devices have some Mean Time Between Failure (MTBF) that is smaller than infinity. Software can also fail: a program might have a bug or some non-deterministic behavior that results in a failure, or in strange behavior that may happen only occasionally. As a consequence, every machine, or a part of it, will fail at some time. If the overall system should continue working in such an event, it must be designed so that the system does not fail completely when a partial failure occurs. One approach to this is to distribute the software system over many machines, and ensure that its clients do not notice when a specific machine fails. The coordination between different software components running on individual machines results in a distributed system Note that there are ways to provide fault tolerance other than hardware redundancy. For more details, refer to Chapter 13, Related Concepts, Technologies, and Patterns.
    • Service and Client Location Independence
  • TORUS 1 - Toward an Open Resource Using Services
    eBook - ePub

    TORUS 1 - Toward an Open Resource Using Services

    Cloud Computing for Environmental Data

    • Dominique Laffly(Author)
    • 2020(Publication Date)
    • Wiley-ISTE
      (Publisher)
    Another milestone in information technology evolution was cluster computing. In 1994, two NASA scientists put some PCs together and made them to communicate to form a parallel, virtual supercomputer [STE 95]. The name of the first cluster, Beowulf, comes from an epic Nordic hero who killed a dragon. The “dragon” was the expensive mainframe. The success was beyond their imagination. All commercial companies now offer clusters of PCs as a standard solution.
    During the last decade of 20th Century, cluster and distributed computing architecture increasingly became dominant. Since then, the development of new technologies and new network services has been very fast. Local-area networks (LANs) allow thousands of machines within a building or campus to be connected in such a way that data can be transferred at rates of billions of bits per second (Gbps). Wide-area networks (WANs) allow hundreds of millions of machines all over the world to be connected at speeds up to hundreds of millions of bits per second, and sometimes even faster.
    In parallel to the development of increasingly powerful and networked machines, massively parallel computer architectures started rising and message passing interface (MPI) and other communication protocols started developing.
    As a result of these developments, now it is possible to put together a computing system composed of many networked computers. These computers are generally geographically dispersed and, for this reason, they are called a distributed system. A distributed system may be composed of a few devices, as well as by millions of computers [VAN 16].

    12.1.2. Design requirements

    A loose definition is given by Van Steen and Tanenbaum [VAN 16]:
    “A distributed system is a collection of autonomous computing elements that appears to its users as a single coherent system.”
    This definition underlines the two main characteristics of distributed systems. First, a distributed system is a collection of independent computing elements, generally called nodes. Second, users use it and “see” it as a single system.
  • Index pages curate the most relevant extracts from our library of academic textbooks. They’ve been created using an in-house natural language model (NLM), each adding context and meaning to key research topics.