Distributed Programming

📌 A distributed system is one in which both data and transaction processing are divided between one or more computers connected by a network, each computer playing a specific role in the system.


  • Client-server
  • Multi-tier
  • Peer-to-peer
  • Publish/subscribe
  • RPC
  • Distributed Objects
  • Object Spaces
  • Mobile Agents
  • Network Services
  • Groupware

The Client-Server Model and Distributed Systems

The client-server model is basic to distributed systems. It is a response to the limitations presented by the traditional mainframe client-host model, in which a single mainframe provides shared data access to many dumb terminals. The client-server model is also a response to the local area network (LAN) model, in which many isolated systems access a file server that provides no processing power.

Client-server architecture provides integration of data and services and allows clients to be isolated from inherent complexities, such as communication protocols. The simplicity of the client-server architecture allows clients to make requests that are routed to the appropriate server. These requests are made in the form of transactions.

Enterprise Computing

Usually the current work is done in:

Java EE (also known as: Java Platform, Enterprise Edition)

  • Runs on a JVM
  • From Sun
  • Fully implemented on many operating systems
  • Maintained and enhanced by the Java Community Process (comprised of hundreds of companies and organizations)
  • Source code for the entire framework freely available
  • Mature
  • Kind of a standard

.NET (pronounced “dot net”)

  • Runs on the CLR (Common Language Runtime)
  • From Microsoft
  • Fully implemented on Windows; partially implemented on other operating systems
  • Microsoft-maintained and enhanced
  • Some source code is proprietary
  • Mature
  • Kind of a marketing strategy; however, some “components” are official standards (e.g. C#)

Enterprise Architectures

In the old days, and today for the most trivial of applications, we see client-server organizations.

Two tier architectures are almost always way too fragile. They soon gave way to three-tier architectures:

The idea here is that any one of the three layers can be completely re-implemented without affecting the others.

The middle layer completely isolates the front end from any knowledge of the database. The UI doesn’t even know what the data source is.