The architecture of a system is its structure in terms of separately specified components and their interrelationships. The overall goal is to ensure that the structure will meet present and likely future demands on it. Major concerns are to make the system reliable,
manageable, adaptable and cost-effective. The architectural design of a building has similar aspects – it determines not only its appearance but also its general structure and architectural style (gothic, neo-classical, modern) and provides a consistent frame of reference for the design.
In this sectionpeer-to-peer approaches, distributed objects, distributed components, groundwork for a thorough understanding of approaches such as client-server models, systems – the architectural styles of distributed systems. In particular, we lay the we describe the main architectural models employed in distributeddistributedeventbased systems and the key differences between these styles.
The section adopts a three-stage approach:
• looking at the core underlying architectural elements that underpin modern distributed systems, highlighting the diversity of approaches that now exist;
• examining composite architectural patterns that can be used in isolation or, more commonly, in combination, in developing more sophisticated distributed systems solutions;
• and finally, considering middleware platforms that are available to support the various styles of programming that emerge from the above architectural styles.
Note that there are many trade-offs associated with the choices identified in this chapter in terms of the architectural elements employed, the patterns adopted and (where appropriate) the middleware used, for example affecting the performance and effectiveness of the resulting system. Understanding such trade-offs is arguably the key skill in distributed systems design.