Open main menu
Home
Random
Recent changes
Special pages
Community portal
Preferences
About Wikipedia
Disclaimers
Incubator escapee wiki
Search
User menu
Talk
Dark mode
Contributions
Create account
Log in
Editing
Multitier architecture
Warning:
You are not logged in. Your IP address will be publicly visible if you make any edits. If you
log in
or
create an account
, your edits will be attributed to your username, along with other benefits.
Anti-spam check. Do
not
fill this in!
{{Short description|Computing system architecture}} {{redirect-several|Three-tier system|Tier 1|Tier 2|Tier 3|Tier 4}} {{More citations needed|date=January 2008}} In [[software engineering]], '''multitier architecture''' (often referred to as '''''n''-tier architecture''') is a [[client–server architecture]] in which presentation, application processing and [[data management]] functions are physically separated. The most widespread use of multitier architecture is the '''three-tier architecture''' (for example, Cisco's [[Hierarchical internetworking model]]). ''N''-tier [[Applications architecture|application architecture]] provides a [[model]] by which developers can create flexible and reusable applications. By segregating an application into tiers, developers acquire the option of modifying or adding a specific tier, instead of reworking the entire application. N-tier architecture is a good fit for small and simple applications because of its simplicity and low-cost. Also, it can be a good starting point when architectural requirements are not clear yet.<ref>{{Cite book |last=Richards |first=Mark |title=Fundamentals of Software Architecture: An Engineering Approach |publisher=O'Reilly Media |year=2020 |isbn=978-1492043454 |edition=1st}}</ref><ref>{{Cite book |last=Richards |first=Mark |title=Software Architecture Patterns |publisher=O'Reilly Media, Inc. |year=2022 |isbn=9781098134273}}</ref> A three-tier architecture is typically composed of a ''presentation'' tier, a ''[[Business logic|logic]]'' tier, and a ''[[Data access layer|data]]'' tier. While the concepts of layer and tier are often used interchangeably, one fairly common point of view is that there is indeed a difference. This view holds that a ''layer'' is a logical structuring mechanism for the conceptual elements that make up the software solution, while a ''tier'' is a physical structuring mechanism for the hardware elements that make up the system infrastructure.<ref>[http://msdn.microsoft.com/en-us/library/ms998478.aspx Deployment Patterns (Microsoft Enterprise Architecture, Patterns, and Practices)]</ref><ref>Fowler, Martin "Patterns of Enterprise Application Architecture" (2002). Addison Wesley.</ref> For example, a three-layer solution could easily be deployed on a single tier, such in the case of an extreme [[database-centric architecture]] called '''RDBMS-only architecture'''<ref>{{Cite book|last1=Vicente|first1=Alfonso|last2=Etcheverry|first2=Lorena|last3=Sabiguero|first3=Ariel|title=2021 XLVII Latin American Computing Conference (CLEI) |chapter=An RDBMS-only architecture for web applications |date=2021|chapter-url=https://ieeexplore.ieee.org/document/9640017|pages=1–9|doi=10.1109/CLEI53233.2021.9640017|isbn=978-1-6654-9503-5 |s2cid=245387844 }}</ref> or in a personal workstation.<ref>[http://msdn.microsoft.com/en-us/library/ms998478.aspx Deployment Patterns (Microsoft Enterprise Architecture, Patterns, and Practices)]</ref> ==Layers== The "Layers" [[architectural pattern]] has been described in various publications.<ref name="posa">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.</ref> ===Common layers=== In a logical multilayer architecture for an information system with an [[object-oriented design]], the following four are the most common: * '''Presentation layer''' (a.k.a. UI layer, view layer, presentation tier in multitier architecture) * '''Application layer''' (a.k.a. [[Service layer pattern|service layer]]<ref>[http://martinfowler.com/eaaCatalog/serviceLayer.html Martin Fowler's Service Layer]</ref><ref>[http://martinfowler.com/bliki/AnemicDomainModel.html Martin Fowler explains that Service Layer is the same as Application Layer]</ref> or [[GRASP (object-oriented design)|GRASP]] Controller Layer <ref>[https://archive.today/20120715125904/http://tech.groups.yahoo.com/group/domaindrivendesign/message/7582 Comparison/discussion of the GRASP Controller Layer vs. Application/Service Layer]</ref>) * '''[[Business logic|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) 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|date=February 2014}} 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|date=February 2014}} 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).<ref name="craiglarman.com">[http://www.craiglarman.com/wiki/index.php?title=Books#Applying_UML_and_Patterns ''Applying UML and Patterns'', 3rd edition, page 203] {{ISBN|0-13-148906-2}}</ref> The infrastructure layer can be partitioned into different levels (high-level or low-level technical services).<ref name="craiglarman.com"/> 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|date=February 2014}}. The Data Access layer normally contains an object known as the [[Data_access_object|Data Access Object (DAO)]]. A layer is on top of another, because it depends on it. Every layer can exist without the layers above it, and requires the layers below it to function. Another common view is that layers do not always strictly depend on only the adjacent layer below. For example, in a relaxed layered system (as opposed to a strict layered system) a layer can also depend on all the layers below it.<ref name="posa" /> The relaxed layered system has more couplings and subsequently it's more difficult to change. Multi-tier architectures can use a hybrid approach so that some layers are strict while other layers are relaxed.<ref>{{Cite book |last=Richards |first=Mark |title=Fundamentals of Software Architecture: An Engineering Approach |publisher=O'Reilly Media |isbn=978-1492043454 |edition=1st |publication-date=March 3, 2020}}</ref><ref>{{Cite book |last=Richards |first=Mark |title=Software Architecture Patterns |publisher=O'Reilly Media, Inc}}</ref> ==Three-tier architecture== [[File:Overview of a three-tier application vectorVersion.svg|thumb|400px|Overview of a three-tier application.]] Three-tier architecture is a client-server [[Software Architecture styles and patterns|software architecture pattern]] in which the [[user interface]] (presentation), [[Business logic layer|functional process logic]] ("business rules"), [[computer data storage]] and [[data access]] are developed and maintained as independent [[modular programming|modules]], most often on separate [[computing platform|platforms]].<ref>[[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)</ref> It was developed by [[John J. Donovan]] in Open Environment Corporation (OEC), a tools company he founded in [[Cambridge, MA|Cambridge, Massachusetts]].{{citation needed|date=February 2014}}. 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 [[personal computer|PC]] or [[Workstation (computer hardware)|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 computer|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").<ref>{{FOLDOC|three-tier}}</ref> ; 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. In simple terms, 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, it 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 [[Application programming interface|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 usage=== In the [[web development]] field, three-tier is often used to refer to [[website]]s, commonly [[electronic commerce]] websites, which are built using three tiers: # A front-end [[web server]] serving static content, and potentially some [[web cache|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 Framework|Spring]], [[ASP.NET]], [[Django (web framework)|Django]], [[Ruby on Rails|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=== Data transfer between tiers is part of the architecture. Protocols involved may include one or more of [[Simple Network Management Protocol|SNMP]], [[CORBA]], [[Java RMI]], [[.NET Remoting]], [[Windows Communication Foundation]], [[Internet socket|sockets]], [[User Datagram Protocol|UDP]], [[web service]]s or other standard or proprietary protocols. Often [[Middleware (distributed applications)|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 (computing)|cluster]]. ==Traceability== The end-to-end traceability of data flows through ''n''-tier systems is a challenging task which becomes more important when systems increase in complexity. The [[Application Response Measurement]] defines concepts and [[Application programming interface|API]]s 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== * [[Abstraction layer]] * [[Client–server model]] * [[Database-centric architecture]] * [[Front-end and back-end]] * [[Load balancing (computing)]] * [[Monolithic application]] * [[Open Services Architecture]] * [[Rich web application]] * [[Service layer]] * [[Shearing layers]] * [[Web application]] ==References== {{Reflist}} ==External links== * [http://www.linuxjournal.com/article/3508 Linux journal, ''Three Tier Architecture''] * [http://msdn.microsoft.com/en-us/library/ee658109.aspx Microsoft Application Architecture Guide] * [http://webebenezer.net/build_integration.html Example of free 3-tier system] * [http://www.tonymarston.net/php-mysql/3-tier-architecture.html ''What Is the 3-Tier Architecture?''] * [http://waf.codeplex.com/wikipage?title=Architecture%20-%20Get%20The%20Big%20Picture&referringTitle=Home Description of a concrete layered architecture for .NET/WPF Rich Client Applications] {{Design Patterns Patterns}} {{DEFAULTSORT:Multitier Architecture}} [[Category:Distributed computing architecture]] [[Category:Software architecture]] [[Category:Architectural pattern (computer science)]] [[Category:Software design]] [[Category:Software engineering terminology]] [[Category:Software design patterns]]
Edit summary
(Briefly describe your changes)
By publishing changes, you agree to the
Terms of Use
, and you irrevocably agree to release your contribution under the
CC BY-SA 4.0 License
and the
GFDL
. You agree that a hyperlink or URL is sufficient attribution under the Creative Commons license.
Cancel
Editing help
(opens in new window)
Pages transcluded onto the current version of this page
(
help
)
:
Template:Citation needed
(
edit
)
Template:Cite book
(
edit
)
Template:Design Patterns Patterns
(
edit
)
Template:FOLDOC
(
edit
)
Template:ISBN
(
edit
)
Template:More citations needed
(
edit
)
Template:Redirect-several
(
edit
)
Template:Reflist
(
edit
)
Template:Short description
(
edit
)
Template:Talk other
(
edit
)