Knowledge Nugget: What is a Tier in Software Architecture?


Read this knowledge nugget if you want to learn what a Tier is in Software Architecture and why you would use it.

Unfortunately I do not know who coined the term originally. A Tier groups layers into larger building blocks that will be physically implemented. For example, on one physical server or on an instance of a server (a process) somewhere on a physical server.

Typical tier-structure of a web-based application
Figure 1 - Typical tier-structure of a web-based application

How many and which tiers you build is driven by those non-functional requirements that define the architecture qualities for the target architecture. Examples are: architectural qualities such as scalability, availability, performance, throughput, and others.

Figure 1 illustrates an exemplary tier-structure for a web-based application. The figure shows that the application is split into three tiers:

  • Client Tier – The client application. If it used by a human user it will typically be located on the user’s workstation.
  • Server Tier – This tier represents a physical server. Based on non-functional requirements I have made the decision to place all functional application layers onto one physical tier.
  • Database Tier – This tier represents the database server and contains the data layer.

For more details on layer please refer to Knowledge Nugget: What is a Layer in Software Architecture?.

References

[Pic2010] Pichler, M. 2010, “Knowledge Nugget: Layer”, A Practical Guide to Software Architecture [online] available at https://applicationarchitecture.wordpress.com/2010/04/27/knowledge-nugget-layer/

[pra2006] pranshujain. 2006, “Layers and Tiers”, Software Architecture and Content Management [online] available at http://pranshujain.wordpress.com/2006/09/15/layers-and-tiers/

Copyright © 2010 Michael Pichler

Advertisements

2 thoughts on “Knowledge Nugget: What is a Tier in Software Architecture?

    1. Dear Hari,
      I am not sure I understood your question correctly. I am not sure what you mean by “interview point of view”. Unfortunately there is no “default” (or simple) answer. It very much depends on the requirements you are trying to address (functional and non-functional) as well as the technologies you are using. Principally you would have the following layers:

      Layers

      Principally I see the following layers for a web application:

      Static Content | Web Presentation | Business Layer | Data Access Layer | Data Layer

      Static Content is all your static HTML content, Java Script, stylesheets, etc. You will most likely host it on a separate HTTP Server (such as Apache) and not within your JEE web container.

      Web Presentation is your presentation code (View such as JSP, JSF, Servlet, or other technologies), including the controllers and model objects.

      Business Layer is where you have your actual business logic. For example in EJBs. The business layer executes the actual logic based on your model objects.

      The Data Access Layer will also reside in your EJB container, but will be separate from the business layer. The data access layer will then transform your model objects into database content, or vice versa if you read from the database.

      The data layer represents the actual database-system.

      Tiers
      Depending on your non-functional requirements you could host all those layers on a single server (if it is a very small configuration); i.e. one tier.
      If you are implementing a very large configuration every layer may end up on one (or multiple clustered) server(s), i.e. many tiers because every layer has it’s own tier.

      Please look at those links. They may provide you with some further clues:
      https://applicationarchitecture.wordpress.com/2010/03/02/architectural-pattern-single-node-deployment-configuration-for-multi-tier-network-centric-software-applications/

      https://applicationarchitecture.wordpress.com/2010/03/16/architectural-pattern-multi-node-deployment-configuration-for-multi-tier-network-centric-software-applications/

      https://applicationarchitecture.wordpress.com/2010/05/04/architectural-pattern-clustering-for-single-tier-network-centric-j2ee-software-applications/

      I hope I could provide the answer you were looking for.

      Regards,
      Michael

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google+ photo

You are commenting using your Google+ account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

w

Connecting to %s