In a distributed architecture, components are hosted on different platforms and communicate through a network:
A Client-Server Architecture consists of two types of components: clients and servers. A server component perpetually listens for requests from client components. When a request is received, the server processes the request, and then sends a response back to the client. Servers may be further classified as stateless or stateful. Clients of a stateful server may make composite requests that consist of multiple atomic requests. This enables a more conversational or transactional interactions between client and server. To accomplish this, a stateful server keeps a record of the requests from each current client. This record is called a session.
The Master-Slave Pattern is often used to implement the server:
The Proxy Pattern allows us to add features to a server without modifying it.
In a three-tier architecture tier 2 is a tier 1 server and a tier 3 client:
In general, tier k in an N-tier architecture is server to tier k-1 and client to tier k+1.
In an open N-tier architecture tier k is client to tier j for k < j.
Here's a popular example of a 4 tier architecture:
In a peer-to-peer architecture the roles of client and server switch back and forth between components:
Pipeline is probably the oldest distributed architecture. A filter perpetually reads data from an input pipe, processes it, then writes the result to an output pipe.
There are also several important reference architectures, including:
Open Distributed Processing
CORBA
COM/DCOM
Service-Oriented Architecture