Designing Data-Intensive Web Applications

Architecture design marks a change of viewpoint in the development process. Compared to requirements collection and data and hypertext design, which focus on the progressive specification of the application, architecture design concentrates on the choice of the hardware, network, and software components that make up the system, to find the mix of these components that best meets the application requirements, and at the same time respects the technical and economic constraints of the project.
As Chapter 1 pointed out, a data-intensive Web application relies on many different technical ingredients, including protocols, languages, and software systems, which do not always fit together well. This heterogeneity makes architecture design a complex task, which requires mastering a large spectrum of problems and solutions. The work of the designer is driven by such technical objectives as performance, scalability, availability, state preservation, and security, and is constrained by economical and organizational factors, including the availability and skill of human resources, the allowed costs, the outsourcing policies, the availability of hardware and software licenses, and so on. In this chapter, we do not consider the organizational factors, and concentrate instead on the technical aspects of architecture design.
Rather than proposing a comprehensive checklist of the decisions to consider in architecture design or discussing formal methods for sizing up the architecture, we proceed pragmatically, by contrasting a number of increasingly sophisticated architectures, ranging from the simple single-host solution, sufficient for small applications, to a four-layer, fully replicated configuration, suitable to large applications with heavy...