Recent from talks
Nothing was collected or created yet.
Multitier architecture
View on WikipediaThis article needs additional citations for verification. (January 2008) |

In software engineering, multitier architecture (often referred to as n-tier architecture) is a client–server architecture in which various levels of software architecture are physically separated. The most common use of multitier architecture is the three-tier architecture, which separates presentation, application processing and data management functions, such as in the case of Cisco's hierarchical internetworking model. Other tiers of separation may include the service layer, business layer, data access layer, and persistence layer.
N-tier application architecture provides a model by which developers can modify or add to a specific tier in the software development process instead of reworking the entire application. It is commonly used for small and simple applications because of its simplicity and low cost.[1][2] In web development, three-tier architecture is often used to describe websites that comprise a front-end web server serving static content and some cached dynamic content, a middle dynamic content processing and generation application server, and a back-end database or data store.
In a strict layered system, each layer depends on the layer below it and can exist without the layers above it. In a relaxed layered system, a layer can also depend on all of the layers below it, creating additional couplings between layers.[3] Some multitier architectures use a hybrid approach so that some layers are strict while other layers are relaxed.[4][5] N-tier architecture may also be implemented with the model–view–presenter pattern.
The terms layer and tier are often used interchangeably, although layer is sometimes used to refer to a conceptual software logic structuring mechanism, while tier is used to refer to the physical hardware structuring mechanism for system infrastructure.[6][7] In this usage, a three-layer solution could be deployed on a single tier, as in the case of an some database-centric architectures called RDBMS-only architecture or in personal workstations.[8][9]
Layers
[edit]Common layers
[edit]In a logical multilayer architecture for an information system with an object-oriented design, the following four are the most common:[3]
- Presentation layer (a.k.a. UI layer, view layer, presentation tier in multitier architecture)
- Application layer (a.k.a. service layer[10][11] or GRASP Controller Layer [12])
- Business layer (a.k.a. business logic layer (BLL), domain logic layer)
- Data access layer (a.k.a. persistence layer, logging, networking, and other services which are required to support a particular business layer)
The more usual convention is that the application layer (or service layer) is considered a sublayer of the business layer, typically encapsulating the API definition surfacing the supported business functionality. The application/business layers can, in fact, be further subdivided to emphasize additional sublayers of distinct responsibility. For example, if the model–view–presenter pattern is used, the presenter sublayer might be used as an additional layer between the user interface layer and the business/application layer (as represented by the model sublayer).[citation needed] If the application architecture has no explicit distinction between the business layer and the presentation layer (i.e., the presentation layer is considered part of the business layer), then a traditional client-server (two-tier) model has been implemented.[citation needed]
Some also identify a separate layer called the business infrastructure layer (BI), located between the business layer(s) and the infrastructure layer(s). It is also sometimes called the "low-level business layer" or the "business services layer". This layer is very general and can be used in several application tiers (e.g. a CurrencyConverter).[13]
The infrastructure layer can be partitioned into different levels (high-level or low-level technical services).[13] Developers often focus on the persistence (data access) capabilities of the infrastructure layer and therefore only talk about the persistence layer or the data access layer (instead of an infrastructure layer or technical services layer). In other words, the other kind of technical services is not always explicitly thought of as part of any particular layer.[citation needed]. The Data Access layer normally contains an object known as the Data Access Object (DAO).
In a strict layered system, each layer depends on the layer below it and can exist without the layers above it. In a relaxed layered system, a layer can also depend on all of the layers below it and not merely the layer directly below it.[3] The relaxed layered system has more couplings and is more difficult to change. Some multitier architectures use a hybrid approach so that some layers are strict while other layers are relaxed.[4][5]
Three-tier architecture
[edit]Three-tier architecture is a client-server software architecture pattern in which the user interface (presentation), functional process logic ("business rules"), computer data storage and data access are developed and maintained as independent modules, most often on separate platforms.[14] It was developed by John J. Donovan in Open Environment Corporation (OEC), a tools company he founded in Cambridge, Massachusetts.[citation needed].
Apart from the usual advantages of modular software with well-defined interfaces, the three-tier architecture is intended to allow any of the three tiers to be upgraded or replaced independently in response to changes in requirements or technology. For example, a change of operating system in the presentation tier would only affect the user interface code. Typically, the user interface runs on a desktop PC or workstation and uses a standard graphical user interface, functional process logic that may consist of one or more separate modules running on a workstation or application server, and an RDBMS on a database server or mainframe that contains the computer data storage logic. The middle tier may be multitiered itself (in which case the overall architecture is called an "n-tier architecture").[15]
- Presentation tier
- This is the topmost level of the application. The presentation tier displays information related to such services as browsing merchandise, purchasing and shopping cart contents. It communicates with other tiers by which it puts out the results to the browser/client tier and all other tiers in the network. It is a layer that users can access directly (such as a web page, or an operating system's GUI).
- Application tier (business logic, logic tier, or middle tier)
- The logical tier is pulled out from the presentation tier and, as its layer, controls an application’s functionality by performing detailed processing.
- Data tier
- The data tier includes the data persistence mechanisms (database servers, file shares, etc.) and the data access layer that encapsulates the persistence mechanisms and exposes the data. The data access layer should provide an API to the application tier that exposes methods of managing the stored data without exposing or creating dependencies on the data storage mechanisms. Avoiding dependencies on the storage mechanisms allows for updates or changes without the application tier clients being affected by or even aware of the change. As with the separation of any tier, there are costs for implementation and often costs to performance in exchange for improved scalability and maintainability.
Web development
[edit]In the web development field, three-tier is often used to refer to websites, commonly electronic commerce websites, which are built using three tiers:
- A front-end web server serving static content, and potentially some cached dynamic content. In web-based application, front end is the content rendered by the browser. The content may be static or generated dynamically.
- A middle dynamic content processing and generation level application server (e.g., Symfony, Spring, ASP.NET, Django, Rails, Node.js).
- A back-end database or data store, comprising both data sets and the database management system software that manages and provides access to the data.
Other considerations
[edit]Data transfer between tiers is part of the architecture. Protocols involved may include one or more of SNMP, CORBA, Java RMI, .NET Remoting, Windows Communication Foundation, sockets, UDP, web services or other standard or proprietary protocols. Often middleware is used to connect the separate tiers. Separate tiers often (but not necessarily) run on separate physical servers, and each tier may itself run on a cluster.
Traceability
[edit]The Application Response Measurement defines concepts and APIs for measuring performance and correlating transactions between tiers.
Generally, the term "tiers" is used to describe physical distribution of components of a system on separate servers, computers, or networks (processing nodes). A three-tier architecture then will have three processing nodes. The term "layers" refers to a logical grouping of components which may or may not be physically located on one processing node.
See also
[edit]References
[edit]- ^ Richards, Mark (2020). Fundamentals of Software Architecture: An Engineering Approach (1st ed.). O'Reilly Media. ISBN 978-1492043454.
- ^ Richards, Mark (2022). Software Architecture Patterns. O'Reilly Media, Inc. ISBN 9781098134273.
- ^ a b c Buschmann, Frank; Meunier, Regine; Rohnert, Hans; Sommerlad, Peter; Stal, Michael (1996-08). Pattern-Oriented Software Architecture, Volume 1, A System of Patterns. Wiley, August 1996. ISBN 978-0-471-95869-7. Retrieved from http://www.wiley.com/WileyCDA/WileyTitle/productCd-0471958697.html.
- ^ a b Richards, Mark (March 3, 2020). Fundamentals of Software Architecture: An Engineering Approach (1st ed.). O'Reilly Media. ISBN 978-1492043454.
- ^ a b Richards, Mark. Software Architecture Patterns. O'Reilly Media, Inc.
- ^ Deployment Patterns (Microsoft Enterprise Architecture, Patterns, and Practices)
- ^ Fowler, Martin "Patterns of Enterprise Application Architecture" (2002). Addison Wesley.
- ^ Deployment Patterns (Microsoft Enterprise Architecture, Patterns, and Practices)
- ^ Vicente, Alfonso; Etcheverry, Lorena; Sabiguero, Ariel (2021). "An RDBMS-only architecture for web applications". 2021 XLVII Latin American Computing Conference (CLEI). pp. 1–9. doi:10.1109/CLEI53233.2021.9640017. ISBN 978-1-6654-9503-5. S2CID 245387844.
- ^ Martin Fowler's Service Layer
- ^ Martin Fowler explains that Service Layer is the same as Application Layer
- ^ Comparison/discussion of the GRASP Controller Layer vs. Application/Service Layer
- ^ a b Applying UML and Patterns, 3rd edition, page 203 ISBN 0-13-148906-2
- ^ Eckerson, Wayne W. "Three Tier Client/Server Architecture: Achieving Scalability, Performance, and Efficiency in Client Server Applications." Open Information Systems 10, 1 (January 1995): 3(20)
- ^ This article is based on material taken from three-tier at the Free On-line Dictionary of Computing prior to 1 November 2008 and incorporated under the "relicensing" terms of the GFDL, version 1.3 or later.
External links
[edit]Multitier architecture
View on GrokipediaFundamentals
Definition and Principles
Multitier architecture, also known as n-tier architecture, is a client-server model in which an application is divided into multiple logical layers and physical tiers, typically separating the presentation layer for user interfaces, the business logic layer for processing, and the data access layer for storage and retrieval.[5] This separation allows each component to operate independently, with logical layers representing functional divisions within the software and physical tiers denoting deployment on distinct hardware or virtual machines.[5] The approach evolved from single-tier models, where all components resided on a single machine, to address the complexities of distributed environments requiring greater scalability and reliability in modern systems.[5] Key principles of multitier architecture include separation of concerns, where each layer focuses on specific responsibilities to manage dependencies effectively; loose coupling between layers, enabling communication via direct calls or asynchronous messaging without tight interdependencies; and modularity, which promotes reusable components across the system.[5] Scalability is achieved by allowing independent scaling of individual tiers—for instance, adding resources to the data tier during high demand—while maintainability is enhanced through clear boundaries that simplify updates and debugging without affecting the entire application.[5] These principles ensure that changes in one layer, such as updating the user interface, do not necessitate modifications elsewhere, fostering long-term efficiency in development and operations.[2] In a typical multitier setup, data flows sequentially from the presentation layer, where user requests are initiated, through the business logic layer for processing and validation, to the data layer for storage or querying, before responses traverse back in reverse.[5] This high-level flow can be illustrated conceptually as a vertical stack: the top tier handles client-side interactions (e.g., web browsers or mobile apps), the middle tiers manage application logic and services, and the bottom tier interfaces with databases or external data sources, with middleware often facilitating secure, efficient interlayer communication.[5] Such a structure supports distributed computing by isolating concerns, reducing latency impacts, and improving overall system resilience.[2]Historical Development
The roots of multitier architecture trace back to the centralized computing paradigms of the 1960s and 1970s, dominated by mainframe systems that handled all processing, storage, and user interaction in a single, monolithic environment. These systems, exemplified by IBM's System/360 announced in 1964, emphasized batch processing and time-sharing but lacked the distributed separation that characterizes modern multitier designs. The transition began in the 1980s with the emergence of client-server models, where personal computers connected to centralized servers over networks, distributing workloads between client interfaces and backend resources. This shift was facilitated by advancements in relational databases, such as the development of SQL in 1974 by IBM researchers Donald Chamberlin and Raymond Boyce as part of the System R project, which enabled efficient data querying and separation of data management from application logic.[6] The 1990s marked the rise of three-tier architectures, driven by the explosive growth of the World Wide Web and the need for scalable, maintainable systems beyond simple client-server setups. Middleware technologies like the Common Object Request Broker Architecture (CORBA), standardized by the Object Management Group (OMG) in 1991, provided a framework for distributed object communication across heterogeneous environments, promoting interoperability in enterprise applications.[7] Concurrently, the release of Java in 1995 by Sun Microsystems introduced platform-independent programming that supported distributed computing, laying groundwork for more layered designs. Three-tier models separated presentation, application logic, and data tiers, addressing limitations in scalability as internet usage surged from the mid-1990s boom.[8][1] Key milestones in the late 1990s included the introduction of n-tier architectures through Enterprise JavaBeans (EJB) in 1998, which allowed for flexible, scalable deployment of business components across multiple layers in Java-based systems. The Object Management Group's ongoing standardization efforts, including CORBA evolutions, further drove adoption by providing protocols for distributed computing that emphasized modularity and fault tolerance. By the 2010s, multitier architectures evolved toward cloud-native paradigms, influenced by microservices architectures that decomposed applications into loosely coupled, independently deployable services, enhancing scalability in cloud environments like AWS and Azure. This shift was propelled by post-internet boom demands for handling massive user loads and global distribution, with microservices enabling dynamic scaling without monolithic constraints.[9][10][11]Architectural Components
Layer Structure
In multitier architecture, the layer structure organizes software components into a hierarchical arrangement that separates concerns to promote modularity and maintainability. Layers represent logical divisions of functionality, where each layer encapsulates specific responsibilities and interacts primarily with adjacent layers in a stacked, vertical manner—higher layers depend on lower ones without reverse dependencies. This vertical layering can be either closed, restricting calls to only the immediate lower layer, or open, allowing access to any lower layer, depending on the system's complexity.[5] The distinction between logical layers and physical tiers is fundamental to this structure. Logical layers focus on code organization without implying deployment specifics, enabling a coherent grouping of related functions such as processing or data handling. In contrast, physical tiers involve deploying these layers across separate hardware or virtual machines, which introduces distribution but also potential latency. This separation allows for horizontal deployment, where individual tiers can be scaled independently by replicating instances across multiple nodes to handle increased load.[12][5] Inter-layer communication in multitier systems typically follows request-response patterns to ensure ordered data flow. Mechanisms include direct calls via application programming interfaces (APIs) for synchronous interactions, remote procedure calls (RPCs) for distributed invocations, or asynchronous message queues to decouple components and improve resilience under varying loads. These approaches maintain unidirectional flow, often routing through intermediate layers to prevent direct connections that could compromise isolation.[5][2] Design guidelines emphasize creating stateless layers where feasible, meaning each layer processes requests without retaining session-specific data, which facilitates horizontal scaling and fault tolerance. Clear, well-defined interfaces between layers are essential to avoid tight coupling, using contracts like APIs or protocols that abstract implementation details and enable independent evolution of components.[5][13] The structure exhibits variability to adapt to system requirements, allowing layers to be combined—for instance, merging related functions into a single tier for simpler deployments—or split into finer-grained units for enhanced specialization and scalability. This flexibility supports evolving from basic configurations to more elaborate setups without altering the core hierarchical principles.[5]Common Layers and Responsibilities
In multitier architectures, systems are typically divided into distinct layers, each with specialized responsibilities to promote separation of concerns, scalability, and maintainability. The most common configuration includes the presentation layer, application or business logic layer, and data access layer, though extended models may incorporate an optional integration layer for handling external interactions. These layers communicate sequentially, with higher layers invoking services in lower ones via well-defined interfaces such as APIs, ensuring that dependencies flow in one direction to avoid tight coupling.[5] The presentation layer serves as the user-facing component, responsible for rendering interfaces, capturing user inputs, and performing initial validation to ensure data quality before forwarding requests. In web applications, this layer commonly employs technologies like HTML for structure, CSS for styling, and JavaScript for dynamic interactions, often within frameworks such as React or Angular to enhance responsiveness. It operates in a stateless manner, allowing load balancers to distribute requests across multiple instances without session affinity issues.[2][5][14] The application or business logic layer, positioned between the presentation and data layers, encapsulates core processing rules, workflows, and computations, such as transaction handling or decision-making algorithms. This layer receives validated inputs from the presentation tier, applies domain-specific logic, and coordinates with the data layer for necessary operations, often using asynchronous messaging for decoupling in distributed environments. Technologies here include server-side languages like Java, Python, or C#, deployed on platforms such as Azure App Services or virtual machines to manage scalability.[5][2][14] The data access layer manages all interactions with persistent storage, including querying, updating, and ensuring data integrity through abstraction mechanisms like Object-Relational Mapping (ORM) tools. It receives requests solely from the business logic layer to enforce security and encapsulation, utilizing relational databases such as SQL Server or PostgreSQL, or NoSQL options like MongoDB for flexible schemas. Tools like Hibernate in Java environments abstract database operations, allowing developers to work with object-oriented models while handling SQL generation and connection pooling.[5][2][15] In extended multitier models, an optional integration layer may be introduced to mediate communications with external services, APIs, or middleware, such as enterprise service buses for aggregating disparate systems without burdening the core business logic. This layer handles protocol translations, authentication, and data transformations, often leveraging tools like Azure API Management or similar middleware to support hybrid environments.[14][5]| Layer | Responsibilities | Inputs/Outputs | Example Technologies |
|---|---|---|---|
| Presentation | UI rendering, input capture, validation | User inputs → validated requests; responses → UI updates | HTML/CSS/JavaScript, React, Angular, load balancers |
| Application/Business Logic | Rule processing, workflows, computations | Validated requests → processed data/queries; results → presentation/data | Java/Python/C#, Azure Functions, Service Bus |
| Data Access | Storage management, queries, persistence | Queries → data results; updates → confirmations | SQL Server, PostgreSQL, Hibernate ORM, Cosmos DB |
| Integration (Optional) | External service mediation, data transformation | Internal requests → external API calls; responses → normalized data | Azure API Management, middleware/ESB |
