Architecture of a distributed system is mostly defined by the software components that constitute the system. Architecture might be developed in a certain style, that is referred as architectural style. Such a style is formulated in terms of components, the way the components are connected to each other, the data exchanged between components, and finally how these elements are jointly configured into a system.
A component is a modular unit with well-defined required and provided interfaces that is replaceable within its environment.
A connector is generally described as a mechanism that mediates communication, coordination, or cooperation among components.
There are several style have by now been identified, of which the most important ones for distributed systems are:
The basic idea for the layered style is that components are organized in a layered fashion where a component at layer $L_j$ can make a downcall to a component at a lower-level layer $L_i$ $(i <j)$ and generally expects a response. In exceptional cases the upcall might be made to a higher-level component.
A large number of user applications are developed in a layered architectural style having the following levels: